From e8e05d6bc633c1b892956a292daa621f4406feb4 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Fri, 13 Jun 2025 17:28:01 -0700 Subject: [PATCH 01/27] sidecar exporters + tracing toggle --- .../templates/backend/deployment.yaml | 8 +++ .../templates/clickhouse/config-map.yaml | 16 ++++- .../templates/clickhouse/service.yaml | 6 ++ .../templates/clickhouse/stateful-set.yaml | 22 ++++-- .../templates/host-backend/deployment.yaml | 8 +++ .../platform-backend/deployment.yaml | 8 +++ .../langsmith/templates/postgres/service.yaml | 6 ++ .../templates/postgres/stateful-set.yaml | 10 +++ .../langsmith/templates/queue/deployment.yaml | 8 +++ charts/langsmith/templates/redis/service.yaml | 6 ++ .../templates/redis/stateful-set.yaml | 10 +++ charts/langsmith/values.yaml | 71 +++++++++++++++++-- 12 files changed, 167 insertions(+), 12 deletions(-) diff --git a/charts/langsmith/templates/backend/deployment.yaml b/charts/langsmith/templates/backend/deployment.yaml index ba4c7d2f..418171bf 100644 --- a/charts/langsmith/templates/backend/deployment.yaml +++ b/charts/langsmith/templates/backend/deployment.yaml @@ -62,6 +62,14 @@ spec: {{- with $envVars }} {{- toYaml . | nindent 12 }} {{- end }} + {{- if .Values.config.tracing.enabled }} + - name: OTEL_TRACING_ENABLED + value: {{ .Values.config.tracing.enabled }} + - name: OTLP_ENDPOINT + value: {{ .Values.config.tracing.endpoint }} + - name: OTEL_USE_TLS + value: {{ .Values.config.tracing.useTls }} + {{- end }} envFrom: - configMapRef: name: {{ include "langsmith.fullname" . }}-config diff --git a/charts/langsmith/templates/clickhouse/config-map.yaml b/charts/langsmith/templates/clickhouse/config-map.yaml index 425c816e..5fe5973d 100644 --- a/charts/langsmith/templates/clickhouse/config-map.yaml +++ b/charts/langsmith/templates/clickhouse/config-map.yaml @@ -35,7 +35,7 @@ data: - config.xml: | + logging_config.xml: | {{ .Values.clickhouse.config.logLevel }} @@ -52,4 +52,18 @@ data: 10 + + {{- if .Values.clickhouse.metrics.enabled }} + metrics_config.xml: | + + + /metrics + {{ .Values.clickhouse.metrics.port }} + true + true + true + true + + + {{- end }} {{- end }} diff --git a/charts/langsmith/templates/clickhouse/service.yaml b/charts/langsmith/templates/clickhouse/service.yaml index 9c6122a2..db70e289 100644 --- a/charts/langsmith/templates/clickhouse/service.yaml +++ b/charts/langsmith/templates/clickhouse/service.yaml @@ -29,6 +29,12 @@ spec: port: {{ .Values.clickhouse.service.nativePort }} targetPort: ch-native protocol: TCP + {{- if .Values.clickhouse.metrics.enabled }} + - name: ch-metrics + port: {{ .Values.clickhouse.metrics.port }} + targetPort: {{ .Values.clickhouse.metrics.port }} + protocol: TCP + {{- end }} selector: {{- include "langsmith.selectorLabels" . | nindent 4 }} app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.clickhouse.name }} diff --git a/charts/langsmith/templates/clickhouse/stateful-set.yaml b/charts/langsmith/templates/clickhouse/stateful-set.yaml index 10dc597f..e84aac43 100644 --- a/charts/langsmith/templates/clickhouse/stateful-set.yaml +++ b/charts/langsmith/templates/clickhouse/stateful-set.yaml @@ -79,6 +79,11 @@ spec: - name: ch-native containerPort: {{ .Values.clickhouse.containerNativePort }} protocol: TCP + {{- if .Values.clickhouse.metrics.enabled }} + - name: ch-metrics + containerPort: {{ .Values.clickhouse.metrics.port }} + protocol: TCP + {{- end }} {{- with .Values.clickhouse.statefulSet.startupProbe }} startupProbe: {{- toYaml . | nindent 12 }} @@ -106,9 +111,14 @@ spec: - mountPath: /etc/clickhouse-server/users.d/users.xml name: clickhouse-conf subPath: users.xml - - mountPath: /etc/clickhouse-server/config.d/config.xml + - mountPath: /etc/clickhouse-server/config.d/logging_config.xml name: clickhouse-conf - subPath: config.xml + subPath: logging_config.xml + {{- if .Values.clickhouse.metrics.enabled }} + - mountPath: /etc/clickhouse-server/config.d/metrics_config.xml + name: clickhouse-conf + subPath: metrics_config.xml + {{- end }} {{- with .Values.clickhouse.statefulSet.extraContainerConfig }} {{- toYaml . | nindent 10 }} {{- end }} @@ -138,8 +148,12 @@ spec: items: - key: users.xml path: users.xml - - key: config.xml - path: config.xml + - key: logging_config.xml + path: logging_config.xml + {{- if .Values.clickhouse.metrics.enabled }} + - key: metrics_config.xml + path: metrics_config.xml + {{- end }} {{- with .Values.clickhouse.statefulSet.volumes }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/langsmith/templates/host-backend/deployment.yaml b/charts/langsmith/templates/host-backend/deployment.yaml index 9defe15e..85d90864 100644 --- a/charts/langsmith/templates/host-backend/deployment.yaml +++ b/charts/langsmith/templates/host-backend/deployment.yaml @@ -59,6 +59,14 @@ spec: {{- with $envVars }} {{- toYaml . | nindent 12 }} {{- end }} + {{- if .Values.config.tracing.enabled }} + - name: OTEL_TRACING_ENABLED + value: {{ .Values.config.tracing.enabled }} + - name: OTLP_ENDPOINT + value: {{ .Values.config.tracing.endpoint }} + - name: OTEL_USE_TLS + value: {{ .Values.config.tracing.useTls }} + {{- end }} envFrom: - configMapRef: name: {{ include "langsmith.fullname" . }}-config diff --git a/charts/langsmith/templates/platform-backend/deployment.yaml b/charts/langsmith/templates/platform-backend/deployment.yaml index 9d0ea089..af8e7358 100644 --- a/charts/langsmith/templates/platform-backend/deployment.yaml +++ b/charts/langsmith/templates/platform-backend/deployment.yaml @@ -62,6 +62,14 @@ spec: {{- with $envVars }} {{ toYaml . | nindent 12 }} {{- end }} + {{- if .Values.config.tracing.enabled }} + - name: OTEL_TRACING_ENABLED + value: {{ .Values.config.tracing.enabled }} + - name: OTLP_ENDPOINT + value: {{ .Values.config.tracing.endpoint }} + - name: OTEL_USE_TLS + value: {{ .Values.config.tracing.useTls }} + {{- end }} envFrom: - configMapRef: name: {{ include "langsmith.fullname" . }}-config diff --git a/charts/langsmith/templates/postgres/service.yaml b/charts/langsmith/templates/postgres/service.yaml index 0f8f8748..5f38d8d0 100644 --- a/charts/langsmith/templates/postgres/service.yaml +++ b/charts/langsmith/templates/postgres/service.yaml @@ -25,6 +25,12 @@ spec: port: {{ .Values.postgres.service.port }} targetPort: postgres protocol: TCP + {{- if .Values.postgres.metrics.enabled }} + - name: postgres-metrics + port: {{ .Values.postgres.metrics.containerPort }} + targetPort: {{ .Values.postgres.metrics.containerPort }} + protocol: TCP + {{- end }} selector: {{- include "langsmith.selectorLabels" . | nindent 4 }} app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.postgres.name }} diff --git a/charts/langsmith/templates/postgres/stateful-set.yaml b/charts/langsmith/templates/postgres/stateful-set.yaml index 1ade4f05..f19571ae 100644 --- a/charts/langsmith/templates/postgres/stateful-set.yaml +++ b/charts/langsmith/templates/postgres/stateful-set.yaml @@ -108,6 +108,16 @@ spec: {{- with .Values.postgres.statefulSet.sidecars }} {{- toYaml . | nindent 8 }} {{- end }} + {{- if .Values.postgres.metrics.enabled }} + - name: postgres-metrics-exporter + image: {{ .Values.postgres.metrics.image.repository }}:{{ .Values.postgres.metrics.image.tag }} + imagePullPolicy: {{ .Values.postgres.metrics.image.pullPolicy }} + ports: + - name: pg-metrics + containerPort: {{ .Values.postgres.metrics.containerPort }} + resources: + {{- toYaml .Values.postgres.metrics.resources | nindent 12 }} + {{- end }} {{- with .Values.postgres.statefulSet.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/queue/deployment.yaml b/charts/langsmith/templates/queue/deployment.yaml index 36397613..d6b322b2 100644 --- a/charts/langsmith/templates/queue/deployment.yaml +++ b/charts/langsmith/templates/queue/deployment.yaml @@ -61,6 +61,14 @@ spec: {{- with $envVars }} {{- toYaml . | nindent 12 }} {{- end }} + {{- if .Values.config.tracing.enabled }} + - name: OTEL_TRACING_ENABLED + value: {{ .Values.config.tracing.enabled }} + - name: OTLP_ENDPOINT + value: {{ .Values.config.tracing.endpoint }} + - name: OTEL_USE_TLS + value: {{ .Values.config.tracing.useTls }} + {{- end }} envFrom: - configMapRef: name: {{ include "langsmith.fullname" . }}-config diff --git a/charts/langsmith/templates/redis/service.yaml b/charts/langsmith/templates/redis/service.yaml index b26a9db0..53e6a5c5 100644 --- a/charts/langsmith/templates/redis/service.yaml +++ b/charts/langsmith/templates/redis/service.yaml @@ -25,6 +25,12 @@ spec: port: {{ .Values.redis.service.port }} targetPort: redis protocol: TCP + {{- if .Values.redis.metrics.enabled }} + - name: redis-metrics + port: {{ .Values.redis.metrics.containerPort }} + targetPort: {{ .Values.redis.metrics.containerPort }} + protocol: TCP + {{- end }} selector: {{- include "langsmith.selectorLabels" . | nindent 4 }} app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.redis.name }} diff --git a/charts/langsmith/templates/redis/stateful-set.yaml b/charts/langsmith/templates/redis/stateful-set.yaml index 5946edac..68d95f0b 100644 --- a/charts/langsmith/templates/redis/stateful-set.yaml +++ b/charts/langsmith/templates/redis/stateful-set.yaml @@ -89,6 +89,16 @@ spec: {{- toYaml . | nindent 12 }} {{- end }} {{- end }} + {{- if .Values.redis.metrics.enabled }} + - name: redis-metrics-exporter + image: {{ .Values.redis.metrics.image.repository }}:{{ .Values.redis.metrics.image.tag }} + imagePullPolicy: {{ .Values.redis.metrics.image.pullPolicy }} + ports: + - name: redis-exporter + containerPort: {{ .Values.redis.metrics.containerPort }} + resources: + {{- toYaml .Values.redis.metrics.resources | nindent 12 }} + {{- end }} {{- with .Values.redis.statefulSet.extraContainerConfig }} {{- toYaml . | nindent 10 }} {{- end }} diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 48254e95..000c03aa 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -73,7 +73,7 @@ ingress: config: existingSecretName: "" - langsmithLicenseKey: "" + langsmithLicenseKey: "lcl_4b5a9a94e5e941ccb6df1ecc2bc2f800_f92e987b18" langgraphPlatform: # -- Optional. Used to enable the Langgraph platform control plane. If enabled, the license key must be provided. enabled: false @@ -83,16 +83,16 @@ config: tlsEnabled: true # -- Salt used to generate the API key. Should be a random string. - apiKeySalt: "" + apiKeySalt: "1234567890" logLevel: "info" # -- Must be 'oauth' for OAuth with PKCE, 'mixed' for basic auth or OAuth without PKCE - authType: "" + authType: "mixed" basicAuth: - enabled: false - initialOrgAdminEmail: "" + enabled: true + initialOrgAdminEmail: "romain@langchain.dev" # Either set the password and JWT secret in plaintext, or set in the secret specified by existingSecretName above. - initialOrgAdminPassword: "" - jwtSecret: "" + initialOrgAdminPassword: "securePassword!" + jwtSecret: "1234567890" # -- Prevent organization creation. If using basic auth, this is set to true by default. orgCreationDisabled: false # -- Disable personal orgs. Users will need to be invited to an org manually. If using basic auth, this is set to true by default. @@ -170,6 +170,11 @@ config: enabled: false logoUrl: "" coBrandingEnabled: true + + tracing: + enabled: false + endpoint: "" + useTls: true aceBackend: name: "ace-backend" @@ -433,6 +438,10 @@ backend: name: "" labels: {} annotations: {} + traces: + enabled: false + endpoint: "" + useTls: true clickhouse: name: "clickhouse" @@ -540,6 +549,9 @@ clickhouse: name: "" labels: {} annotations: {} + metrics: + enabled: true + port: 9363 frontend: name: "frontend" @@ -719,6 +731,10 @@ hostBackend: create: true labels: {} annotations: {} + traces: + enabled: false + endpoint: "" + useTls: true listener: name: "listener" @@ -977,6 +993,10 @@ platformBackend: name: "" labels: {} annotations: {} + traces: + enabled: false + endpoint: "" + useTls: true operator: name: "operator" @@ -1164,6 +1184,10 @@ playground: name: "" labels: {} annotations: {} + traces: + enabled: false + endpoint: "" + useTls: true postgres: name: "postgres" @@ -1255,6 +1279,20 @@ postgres: name: "" labels: {} annotations: {} + metrics: + enabled: true + image: + repository: prometheuscommunity/postgres-exporter + tag: v0.17.1 + pullPolicy: IfNotPresent + containerPort: 9187 + resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi queue: name: "queue" @@ -1331,6 +1369,10 @@ queue: name: "" labels: {} annotations: {} + traces: + enabled: false + endpoint: "" + useTls: true redis: name: "redis" @@ -1414,6 +1456,21 @@ redis: name: "" labels: {} annotations: {} + metrics: + enabled: true + image: + repository: oliver006/redis_exporter + tag: v1.74.0 + pullPolicy: IfNotPresent + containerPort: 9121 + resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi + quickwit: name: quickwit From 943a9e99bb18c78eb00ead16505c61bd67fbd104 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Sun, 15 Jun 2025 20:13:12 -0700 Subject: [PATCH 02/27] progress on OTEL collector --- charts/langsmith-observability/Chart.lock | 6 + charts/langsmith-observability/Chart.yaml | 14 ++ .../charts/kube-state-metrics-5.36.0.tgz | Bin 0 -> 15404 bytes .../templates/_helpers.tpl | 50 +++++++ .../templates/otel/_helpers.tpl | 60 ++++++++ .../templates/otel/daemonset/configmap.yaml | 140 ++++++++++++++++++ .../templates/otel/daemonset/daemonset.yaml | 0 charts/langsmith-observability/values.yaml | 70 +++++++++ 8 files changed, 340 insertions(+) create mode 100644 charts/langsmith-observability/Chart.lock create mode 100644 charts/langsmith-observability/Chart.yaml create mode 100644 charts/langsmith-observability/charts/kube-state-metrics-5.36.0.tgz create mode 100644 charts/langsmith-observability/templates/_helpers.tpl create mode 100644 charts/langsmith-observability/templates/otel/_helpers.tpl create mode 100644 charts/langsmith-observability/templates/otel/daemonset/configmap.yaml create mode 100644 charts/langsmith-observability/templates/otel/daemonset/daemonset.yaml create mode 100644 charts/langsmith-observability/values.yaml diff --git a/charts/langsmith-observability/Chart.lock b/charts/langsmith-observability/Chart.lock new file mode 100644 index 00000000..0c39d361 --- /dev/null +++ b/charts/langsmith-observability/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: kube-state-metrics + repository: https://prometheus-community.github.io/helm-charts + version: 5.36.0 +digest: sha256:2ec3add9d1e6e7c73d536b26b04b96937d28d62d8d7e690983f500338f930fbd +generated: "2025-06-15T19:46:40.583397-07:00" diff --git a/charts/langsmith-observability/Chart.yaml b/charts/langsmith-observability/Chart.yaml new file mode 100644 index 00000000..e0eaffa3 --- /dev/null +++ b/charts/langsmith-observability/Chart.yaml @@ -0,0 +1,14 @@ +apiVersion: v2 +name: langsmith-observability +maintainers: + - name: Romain + email: romain@langchain.dev +description: Helm chart to deploy the observability services for LangSmith. +type: application +version: 0.1.0 +appVersion: "0.1.0" +dependencies: + - name: kube-state-metrics + version: 5.36.0 + repository: https://prometheus-community.github.io/helm-charts + condition: observability.metrics.kubeStateMetrics.enabled \ No newline at end of file diff --git a/charts/langsmith-observability/charts/kube-state-metrics-5.36.0.tgz b/charts/langsmith-observability/charts/kube-state-metrics-5.36.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..886d0bd1ff6b4c3c7c017bea76fd6145e367a1b6 GIT binary patch literal 15404 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 literal 0 HcmV?d00001 diff --git a/charts/langsmith-observability/templates/_helpers.tpl b/charts/langsmith-observability/templates/_helpers.tpl new file mode 100644 index 00000000..759dade9 --- /dev/null +++ b/charts/langsmith-observability/templates/_helpers.tpl @@ -0,0 +1,50 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "langsmith-observability.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +*/}} +{{- define "langsmith-observability.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "langsmith-observability.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "langsmith-observability.labels" -}} +helm.sh/chart: {{ include "langsmith-observability.chart" . }} +{{ include "langsmith-observability.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "langsmith-observability.selectorLabels" -}} +app.kubernetes.io/name: {{ include "langsmith-observability.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + diff --git a/charts/langsmith-observability/templates/otel/_helpers.tpl b/charts/langsmith-observability/templates/otel/_helpers.tpl new file mode 100644 index 00000000..cf0c135c --- /dev/null +++ b/charts/langsmith-observability/templates/otel/_helpers.tpl @@ -0,0 +1,60 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "opentelemetry-collector.name" -}} +{{ .Values.collector.name }} +{{- end }} + +{{- define "opentelemetry-collector.lowercase_chartname" -}} +{{- default .Chart.Name | lower }} +{{- end }} + +{{/* +Build a list of database DNS names for enabled metrics collectors +*/}} +{{- define "opentelemetry-collector.database-dns-names" -}} +{{- $dnsNames := list -}} +{{- $namespace := .Values.observability.langsmith_namespace -}} + +{{- if and .Values.collector.metrics.postgres.enabled .Values.collector.metrics.postgres.service -}} +{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.postgres.service $namespace (.Values.collector.metrics.postgres.port | int) .Values.collector.metrics.postgres.path) -}} +{{- end -}} + +{{- if and .Values.collector.metrics.redis.enabled .Values.collector.metrics.redis.service -}} +{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.redis.service $namespace (.Values.collector.metrics.redis.port | int) .Values.collector.metrics.redis.path) -}} +{{- end -}} + +{{- if and .Values.collector.metrics.clickhouse.enabled .Values.collector.metrics.clickhouse.service -}} +{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.clickhouse.service $namespace (.Values.collector.metrics.clickhouse.port | int) .Values.collector.metrics.clickhouse.path) -}} +{{- end -}} + +{{- $dnsNames | toJson -}} +{{- end -}} + +{{/* +Build a list of service DNS names for enabled metrics collectors +*/}} +{{- define "opentelemetry-collector.service-dns-names" -}} +{{- $dnsNames := list -}} +{{- $namespace := .Values.observability.langsmith_namespace -}} + +{{- if and .Values.collector.metrics.langsmith.backend.enabled .Values.collector.metrics.langsmith.backend.service -}} +{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.langsmith.backend.service $namespace (.Values.collector.metrics.langsmith.backend.port | int) .Values.collector.metrics.langsmith.backend.path) -}} +{{- end -}} + +{{- if and .Values.collector.metrics.langsmith.hostBackend.enabled .Values.collector.metrics.langsmith.hostBackend.service -}} +{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.langsmith.hostBackend.service $namespace (.Values.collector.metrics.langsmith.hostBackend.port | int) .Values.collector.metrics.langsmith.hostBackend.path) -}} +{{- end -}} + +{{- if and .Values.collector.metrics.langsmith.platformBackend.enabled .Values.collector.metrics.langsmith.platformBackend.service -}} +{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.langsmith.platformBackend.service $namespace (.Values.collector.metrics.langsmith.platformBackend.port | int) .Values.collector.metrics.langsmith.platformBackend.path) -}} +{{- end -}} + +{{- if and .Values.collector.metrics.langsmith.playground.enabled .Values.collector.metrics.langsmith.playground.service -}} +{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.langsmith.playground.service $namespace (.Values.collector.metrics.langsmith.playground.port | int) .Values.collector.metrics.langsmith.playground.path) -}} +{{- end -}} + +{{- $dnsNames | toJson -}} +{{- end -}} + + diff --git a/charts/langsmith-observability/templates/otel/daemonset/configmap.yaml b/charts/langsmith-observability/templates/otel/daemonset/configmap.yaml new file mode 100644 index 00000000..1bde5295 --- /dev/null +++ b/charts/langsmith-observability/templates/otel/daemonset/configmap.yaml @@ -0,0 +1,140 @@ +{{- if and .Values.collector.enabled .Values.collector.mode | eq "daemonset" }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "opentelemetry-collector.name" . }}-config + namespace: {{ .Release.Namespace }} + data: + relay: | + extensions: + health_check: + endpoint: ${env:MY_POD_IP}:13133 + + receivers: + {{- if .Values.collector.logs.enabled }} + filelog: + exclude: [] + include: + - /var/log/pods/*/*/*.log + include_file_name: false + include_file_path: true + operators: + - id: container-parser + max_log_size: 102400 + type: container + retry_on_failure: + enabled: true + start_at: end + {{- end }} + {{- if .Values.collector.metrics.enabled }} + prometheus: + scrape_configs: + - job_name: 'database-metrics' + scrape_interval: 15s + static_configs: + - targets: {{ include "opentelemetry-collector.database-dns-names" . | quote }} + - job_name: 'service-metrics' + scrape_interval: 15s + static_configs: + - targets: {{ include "opentelemetry-collector.service-dns-names" . | quote }} + {{- end }} + {{- if .Values.collector.traces.enabled }} + otlp: + protocols: + grpc: + endpoint: + http: + endpoint: + {{- end }} + + processors: + batch: {} + memory_limiter: + check_interval: 1m + limit_percentage: 75 + spike_limit_percentage: 25 + filter: + error_mode: ignore + logs: + log_record: + - 'resource.attributes["k8s.namespace.name"] != "{{ .Values.observability.langsmith_namespace }}"' + - 'resource.attributes["k8s.app.name"] != "langsmith"' + k8sattributes: + extract: + labels: + - from: pod + key: app.kubernetes.io/name + tag_name: k8s.app.name + metadata: + - k8s.namespace.name + filter: + node_from_env_var: K8S_NODE_NAME + passthrough: false + pod_association: + - sources: + - from: resource_attribute + name: k8s.pod.ip + - sources: + - from: resource_attribute + name: k8s.pod.uid + - sources: + - from: connection + + exporters: + {{- if .Values.collector.logs.enabled }} + otlphttp/logs: + endpoint: {{ .Values.collector.logs.endpoint }} + tls: + insecure: {{ not .Values.collector.logs.useTls }} + {{- end }} + {{- if .Values.collector.metrics.enabled }} + otlphttp/metrics: + endpoint: {{ .Values.collector.metrics.endpoint }} + tls: + insecure: {{ not .Values.collector.metrics.useTls }} + {{- end }} + {{- if .Values.collector.traces.enabled }} + otlphttp/traces: + endpoint: {{ .Values.collector.traces.endpoint }} + tls: + insecure: {{ not .Values.collector.traces.useTls }} + {{- end }} + + service: + extensions: + - health_check + pipelines: + {{- if .Values.collector.logs.enabled }} + logs/langsmith: + receivers: + - filelog + processors: + - k8sattributes + - filter + - batch + exporters: + - otlphttp/logs + - debug + {{- end }} + {{- if .Values.collector.metrics.enabled }} + metrics/langsmith: + receivers: + - prometheus + processors: + - batch + exporters: + - otlphttp/metrics + - debug + {{- end }} + {{- if .Values.collector.traces.enabled }} + traces/langsmith: + receivers: + - otlp + processors: + - batch + - memory_limiter + exporters: + - otlphttp/traces + - debug + {{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/daemonset/daemonset.yaml b/charts/langsmith-observability/templates/otel/daemonset/daemonset.yaml new file mode 100644 index 00000000..e69de29b diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml new file mode 100644 index 00000000..e46556b2 --- /dev/null +++ b/charts/langsmith-observability/values.yaml @@ -0,0 +1,70 @@ +observability: + langsmith_namespace: langsmith + +collector: + enabled: true + name: langsmith-otel-collector + mode: daemonset # Can be sidecar or daemonset + image: + registry: otel/opentelemetry-collector-contrib + tag: "0.127.0" + + logs: + enabled: true + endpoint: http://localhost:1984/v1/logs + useTls: true + + metrics: + enabled: true + endpoint: http://localhost:1984/v1/metrics + useTls: true + + redis: + enabled: true + service: langsmith-redis + port: 9121 + path: /metrics + + postgres: + enabled: true + service: langsmith-postgres + port: 9187 + path: /metrics + + clickhouse: + enabled: true + service: langsmith-clickhouse + port: 9363 + path: /metrics + + langsmith: + enabled: true + + backend: + enabled: true + service: langsmith-backend + port: 1984 + path: /metrics + + hostBackend: + enabled: true + service: langsmith-host-backend + port: 1985 + path: /metrics + + platformBackend: + enabled: true + service: langsmith-platform-backend + port: 1986 + path: /metrics + + playground: + enabled: true + service: langsmith-playground + port: 1988 + path: /metrics + + traces: + enabled: true + endpoint: http://localhost:1984/v1/traces + useTls: true \ No newline at end of file From a94f261d0d18e4b4fea3509d439aa618239f89d2 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Mon, 16 Jun 2025 16:59:20 -0700 Subject: [PATCH 03/27] remove langsmith-observability for this pr, some more changes --- .gitignore | 1 + charts/langsmith-observability/Chart.lock | 6 - charts/langsmith-observability/Chart.yaml | 14 -- .../charts/kube-state-metrics-5.36.0.tgz | Bin 15404 -> 0 bytes .../templates/_helpers.tpl | 50 ------- .../templates/otel/_helpers.tpl | 60 -------- .../templates/otel/daemonset/configmap.yaml | 140 ------------------ .../templates/otel/daemonset/daemonset.yaml | 0 charts/langsmith-observability/values.yaml | 70 --------- .../templates/backend/deployment.yaml | 9 +- .../templates/host-backend/deployment.yaml | 8 +- .../platform-backend/deployment.yaml | 8 +- .../langsmith/templates/queue/deployment.yaml | 8 +- charts/langsmith/values.yaml | 9 +- 14 files changed, 22 insertions(+), 361 deletions(-) delete mode 100644 charts/langsmith-observability/Chart.lock delete mode 100644 charts/langsmith-observability/Chart.yaml delete mode 100644 charts/langsmith-observability/charts/kube-state-metrics-5.36.0.tgz delete mode 100644 charts/langsmith-observability/templates/_helpers.tpl delete mode 100644 charts/langsmith-observability/templates/otel/_helpers.tpl delete mode 100644 charts/langsmith-observability/templates/otel/daemonset/configmap.yaml delete mode 100644 charts/langsmith-observability/templates/otel/daemonset/daemonset.yaml delete mode 100644 charts/langsmith-observability/values.yaml diff --git a/.gitignore b/.gitignore index 616ed2bb..4840664d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ test*.yaml .DS_Store .cursor/ +langsmith-observability/charts/* diff --git a/charts/langsmith-observability/Chart.lock b/charts/langsmith-observability/Chart.lock deleted file mode 100644 index 0c39d361..00000000 --- a/charts/langsmith-observability/Chart.lock +++ /dev/null @@ -1,6 +0,0 @@ -dependencies: -- name: kube-state-metrics - repository: https://prometheus-community.github.io/helm-charts - version: 5.36.0 -digest: sha256:2ec3add9d1e6e7c73d536b26b04b96937d28d62d8d7e690983f500338f930fbd -generated: "2025-06-15T19:46:40.583397-07:00" diff --git a/charts/langsmith-observability/Chart.yaml b/charts/langsmith-observability/Chart.yaml deleted file mode 100644 index e0eaffa3..00000000 --- a/charts/langsmith-observability/Chart.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v2 -name: langsmith-observability -maintainers: - - name: Romain - email: romain@langchain.dev -description: Helm chart to deploy the observability services for LangSmith. -type: application -version: 0.1.0 -appVersion: "0.1.0" -dependencies: - - name: kube-state-metrics - version: 5.36.0 - repository: https://prometheus-community.github.io/helm-charts - condition: observability.metrics.kubeStateMetrics.enabled \ No newline at end of file diff --git a/charts/langsmith-observability/charts/kube-state-metrics-5.36.0.tgz b/charts/langsmith-observability/charts/kube-state-metrics-5.36.0.tgz deleted file mode 100644 index 886d0bd1ff6b4c3c7c017bea76fd6145e367a1b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15404 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 diff --git a/charts/langsmith-observability/templates/_helpers.tpl b/charts/langsmith-observability/templates/_helpers.tpl deleted file mode 100644 index 759dade9..00000000 --- a/charts/langsmith-observability/templates/_helpers.tpl +++ /dev/null @@ -1,50 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "langsmith-observability.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -*/}} -{{- define "langsmith-observability.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "langsmith-observability.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "langsmith-observability.labels" -}} -helm.sh/chart: {{ include "langsmith-observability.chart" . }} -{{ include "langsmith-observability.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "langsmith-observability.selectorLabels" -}} -app.kubernetes.io/name: {{ include "langsmith-observability.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - diff --git a/charts/langsmith-observability/templates/otel/_helpers.tpl b/charts/langsmith-observability/templates/otel/_helpers.tpl deleted file mode 100644 index cf0c135c..00000000 --- a/charts/langsmith-observability/templates/otel/_helpers.tpl +++ /dev/null @@ -1,60 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "opentelemetry-collector.name" -}} -{{ .Values.collector.name }} -{{- end }} - -{{- define "opentelemetry-collector.lowercase_chartname" -}} -{{- default .Chart.Name | lower }} -{{- end }} - -{{/* -Build a list of database DNS names for enabled metrics collectors -*/}} -{{- define "opentelemetry-collector.database-dns-names" -}} -{{- $dnsNames := list -}} -{{- $namespace := .Values.observability.langsmith_namespace -}} - -{{- if and .Values.collector.metrics.postgres.enabled .Values.collector.metrics.postgres.service -}} -{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.postgres.service $namespace (.Values.collector.metrics.postgres.port | int) .Values.collector.metrics.postgres.path) -}} -{{- end -}} - -{{- if and .Values.collector.metrics.redis.enabled .Values.collector.metrics.redis.service -}} -{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.redis.service $namespace (.Values.collector.metrics.redis.port | int) .Values.collector.metrics.redis.path) -}} -{{- end -}} - -{{- if and .Values.collector.metrics.clickhouse.enabled .Values.collector.metrics.clickhouse.service -}} -{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.clickhouse.service $namespace (.Values.collector.metrics.clickhouse.port | int) .Values.collector.metrics.clickhouse.path) -}} -{{- end -}} - -{{- $dnsNames | toJson -}} -{{- end -}} - -{{/* -Build a list of service DNS names for enabled metrics collectors -*/}} -{{- define "opentelemetry-collector.service-dns-names" -}} -{{- $dnsNames := list -}} -{{- $namespace := .Values.observability.langsmith_namespace -}} - -{{- if and .Values.collector.metrics.langsmith.backend.enabled .Values.collector.metrics.langsmith.backend.service -}} -{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.langsmith.backend.service $namespace (.Values.collector.metrics.langsmith.backend.port | int) .Values.collector.metrics.langsmith.backend.path) -}} -{{- end -}} - -{{- if and .Values.collector.metrics.langsmith.hostBackend.enabled .Values.collector.metrics.langsmith.hostBackend.service -}} -{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.langsmith.hostBackend.service $namespace (.Values.collector.metrics.langsmith.hostBackend.port | int) .Values.collector.metrics.langsmith.hostBackend.path) -}} -{{- end -}} - -{{- if and .Values.collector.metrics.langsmith.platformBackend.enabled .Values.collector.metrics.langsmith.platformBackend.service -}} -{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.langsmith.platformBackend.service $namespace (.Values.collector.metrics.langsmith.platformBackend.port | int) .Values.collector.metrics.langsmith.platformBackend.path) -}} -{{- end -}} - -{{- if and .Values.collector.metrics.langsmith.playground.enabled .Values.collector.metrics.langsmith.playground.service -}} -{{- $dnsNames = append $dnsNames (printf "%s.%s.svc.cluster.local:%d%s" .Values.collector.metrics.langsmith.playground.service $namespace (.Values.collector.metrics.langsmith.playground.port | int) .Values.collector.metrics.langsmith.playground.path) -}} -{{- end -}} - -{{- $dnsNames | toJson -}} -{{- end -}} - - diff --git a/charts/langsmith-observability/templates/otel/daemonset/configmap.yaml b/charts/langsmith-observability/templates/otel/daemonset/configmap.yaml deleted file mode 100644 index 1bde5295..00000000 --- a/charts/langsmith-observability/templates/otel/daemonset/configmap.yaml +++ /dev/null @@ -1,140 +0,0 @@ -{{- if and .Values.collector.enabled .Values.collector.mode | eq "daemonset" }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ include "opentelemetry-collector.name" . }}-config - namespace: {{ .Release.Namespace }} - data: - relay: | - extensions: - health_check: - endpoint: ${env:MY_POD_IP}:13133 - - receivers: - {{- if .Values.collector.logs.enabled }} - filelog: - exclude: [] - include: - - /var/log/pods/*/*/*.log - include_file_name: false - include_file_path: true - operators: - - id: container-parser - max_log_size: 102400 - type: container - retry_on_failure: - enabled: true - start_at: end - {{- end }} - {{- if .Values.collector.metrics.enabled }} - prometheus: - scrape_configs: - - job_name: 'database-metrics' - scrape_interval: 15s - static_configs: - - targets: {{ include "opentelemetry-collector.database-dns-names" . | quote }} - - job_name: 'service-metrics' - scrape_interval: 15s - static_configs: - - targets: {{ include "opentelemetry-collector.service-dns-names" . | quote }} - {{- end }} - {{- if .Values.collector.traces.enabled }} - otlp: - protocols: - grpc: - endpoint: - http: - endpoint: - {{- end }} - - processors: - batch: {} - memory_limiter: - check_interval: 1m - limit_percentage: 75 - spike_limit_percentage: 25 - filter: - error_mode: ignore - logs: - log_record: - - 'resource.attributes["k8s.namespace.name"] != "{{ .Values.observability.langsmith_namespace }}"' - - 'resource.attributes["k8s.app.name"] != "langsmith"' - k8sattributes: - extract: - labels: - - from: pod - key: app.kubernetes.io/name - tag_name: k8s.app.name - metadata: - - k8s.namespace.name - filter: - node_from_env_var: K8S_NODE_NAME - passthrough: false - pod_association: - - sources: - - from: resource_attribute - name: k8s.pod.ip - - sources: - - from: resource_attribute - name: k8s.pod.uid - - sources: - - from: connection - - exporters: - {{- if .Values.collector.logs.enabled }} - otlphttp/logs: - endpoint: {{ .Values.collector.logs.endpoint }} - tls: - insecure: {{ not .Values.collector.logs.useTls }} - {{- end }} - {{- if .Values.collector.metrics.enabled }} - otlphttp/metrics: - endpoint: {{ .Values.collector.metrics.endpoint }} - tls: - insecure: {{ not .Values.collector.metrics.useTls }} - {{- end }} - {{- if .Values.collector.traces.enabled }} - otlphttp/traces: - endpoint: {{ .Values.collector.traces.endpoint }} - tls: - insecure: {{ not .Values.collector.traces.useTls }} - {{- end }} - - service: - extensions: - - health_check - pipelines: - {{- if .Values.collector.logs.enabled }} - logs/langsmith: - receivers: - - filelog - processors: - - k8sattributes - - filter - - batch - exporters: - - otlphttp/logs - - debug - {{- end }} - {{- if .Values.collector.metrics.enabled }} - metrics/langsmith: - receivers: - - prometheus - processors: - - batch - exporters: - - otlphttp/metrics - - debug - {{- end }} - {{- if .Values.collector.traces.enabled }} - traces/langsmith: - receivers: - - otlp - processors: - - batch - - memory_limiter - exporters: - - otlphttp/traces - - debug - {{- end }} -{{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/daemonset/daemonset.yaml b/charts/langsmith-observability/templates/otel/daemonset/daemonset.yaml deleted file mode 100644 index e69de29b..00000000 diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml deleted file mode 100644 index e46556b2..00000000 --- a/charts/langsmith-observability/values.yaml +++ /dev/null @@ -1,70 +0,0 @@ -observability: - langsmith_namespace: langsmith - -collector: - enabled: true - name: langsmith-otel-collector - mode: daemonset # Can be sidecar or daemonset - image: - registry: otel/opentelemetry-collector-contrib - tag: "0.127.0" - - logs: - enabled: true - endpoint: http://localhost:1984/v1/logs - useTls: true - - metrics: - enabled: true - endpoint: http://localhost:1984/v1/metrics - useTls: true - - redis: - enabled: true - service: langsmith-redis - port: 9121 - path: /metrics - - postgres: - enabled: true - service: langsmith-postgres - port: 9187 - path: /metrics - - clickhouse: - enabled: true - service: langsmith-clickhouse - port: 9363 - path: /metrics - - langsmith: - enabled: true - - backend: - enabled: true - service: langsmith-backend - port: 1984 - path: /metrics - - hostBackend: - enabled: true - service: langsmith-host-backend - port: 1985 - path: /metrics - - platformBackend: - enabled: true - service: langsmith-platform-backend - port: 1986 - path: /metrics - - playground: - enabled: true - service: langsmith-playground - port: 1988 - path: /metrics - - traces: - enabled: true - endpoint: http://localhost:1984/v1/traces - useTls: true \ No newline at end of file diff --git a/charts/langsmith/templates/backend/deployment.yaml b/charts/langsmith/templates/backend/deployment.yaml index 418171bf..05b37ad7 100644 --- a/charts/langsmith/templates/backend/deployment.yaml +++ b/charts/langsmith/templates/backend/deployment.yaml @@ -33,7 +33,6 @@ spec: template: metadata: annotations: - {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.backend.deployment.annotations }} {{- toYaml . | nindent 8 }} {{- end }} @@ -62,13 +61,13 @@ spec: {{- with $envVars }} {{- toYaml . | nindent 12 }} {{- end }} - {{- if .Values.config.tracing.enabled }} + {{- if .Values.config.observability.tracing.enabled }} - name: OTEL_TRACING_ENABLED - value: {{ .Values.config.tracing.enabled }} + value: {{ .Values.config.observability.tracing.enabled }} - name: OTLP_ENDPOINT - value: {{ .Values.config.tracing.endpoint }} + value: {{ .Values.config.observability.tracing.endpoint }} - name: OTEL_USE_TLS - value: {{ .Values.config.tracing.useTls }} + value: {{ .Values.config.observability.tracing.useTls }} {{- end }} envFrom: - configMapRef: diff --git a/charts/langsmith/templates/host-backend/deployment.yaml b/charts/langsmith/templates/host-backend/deployment.yaml index 85d90864..6db5c06d 100644 --- a/charts/langsmith/templates/host-backend/deployment.yaml +++ b/charts/langsmith/templates/host-backend/deployment.yaml @@ -59,13 +59,13 @@ spec: {{- with $envVars }} {{- toYaml . | nindent 12 }} {{- end }} - {{- if .Values.config.tracing.enabled }} + {{- if .Values.config.observability.tracing.enabled }} - name: OTEL_TRACING_ENABLED - value: {{ .Values.config.tracing.enabled }} + value: {{ .Values.config.observability.tracing.enabled }} - name: OTLP_ENDPOINT - value: {{ .Values.config.tracing.endpoint }} + value: {{ .Values.config.observability.tracing.endpoint }} - name: OTEL_USE_TLS - value: {{ .Values.config.tracing.useTls }} + value: {{ .Values.config.observability.tracing.useTls }} {{- end }} envFrom: - configMapRef: diff --git a/charts/langsmith/templates/platform-backend/deployment.yaml b/charts/langsmith/templates/platform-backend/deployment.yaml index af8e7358..b029b842 100644 --- a/charts/langsmith/templates/platform-backend/deployment.yaml +++ b/charts/langsmith/templates/platform-backend/deployment.yaml @@ -62,13 +62,13 @@ spec: {{- with $envVars }} {{ toYaml . | nindent 12 }} {{- end }} - {{- if .Values.config.tracing.enabled }} + {{- if .Values.config.observability.tracing.enabled }} - name: OTEL_TRACING_ENABLED - value: {{ .Values.config.tracing.enabled }} + value: {{ .Values.config.observability.tracing.enabled }} - name: OTLP_ENDPOINT - value: {{ .Values.config.tracing.endpoint }} + value: {{ .Values.config.observability.tracing.endpoint }} - name: OTEL_USE_TLS - value: {{ .Values.config.tracing.useTls }} + value: {{ .Values.config.observability.tracing.useTls }} {{- end }} envFrom: - configMapRef: diff --git a/charts/langsmith/templates/queue/deployment.yaml b/charts/langsmith/templates/queue/deployment.yaml index d6b322b2..24c8500c 100644 --- a/charts/langsmith/templates/queue/deployment.yaml +++ b/charts/langsmith/templates/queue/deployment.yaml @@ -61,13 +61,13 @@ spec: {{- with $envVars }} {{- toYaml . | nindent 12 }} {{- end }} - {{- if .Values.config.tracing.enabled }} + {{- if .Values.config.observability.tracing.enabled }} - name: OTEL_TRACING_ENABLED - value: {{ .Values.config.tracing.enabled }} + value: {{ .Values.config.observability.tracing.enabled }} - name: OTLP_ENDPOINT - value: {{ .Values.config.tracing.endpoint }} + value: {{ .Values.config.observability.tracing.endpoint }} - name: OTEL_USE_TLS - value: {{ .Values.config.tracing.useTls }} + value: {{ .Values.config.observability.tracing.useTls }} {{- end }} envFrom: - configMapRef: diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 000c03aa..9fbb0330 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -171,10 +171,11 @@ config: logoUrl: "" coBrandingEnabled: true - tracing: - enabled: false - endpoint: "" - useTls: true + observability: + tracing: + enabled: false + endpoint: "" + useTls: true aceBackend: name: "ace-backend" From 87f90cd787867b6b74511b402b2db3043e106e93 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Mon, 16 Jun 2025 17:07:32 -0700 Subject: [PATCH 04/27] cleanup --- .gitignore | 1 - charts/langsmith/templates/backend/deployment.yaml | 1 + charts/langsmith/values.yaml | 14 +++++++------- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 4840664d..616ed2bb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ test*.yaml .DS_Store .cursor/ -langsmith-observability/charts/* diff --git a/charts/langsmith/templates/backend/deployment.yaml b/charts/langsmith/templates/backend/deployment.yaml index 05b37ad7..97e5c4e5 100644 --- a/charts/langsmith/templates/backend/deployment.yaml +++ b/charts/langsmith/templates/backend/deployment.yaml @@ -33,6 +33,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.backend.deployment.annotations }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 9fbb0330..042079d8 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -73,7 +73,7 @@ ingress: config: existingSecretName: "" - langsmithLicenseKey: "lcl_4b5a9a94e5e941ccb6df1ecc2bc2f800_f92e987b18" + langsmithLicenseKey: "" langgraphPlatform: # -- Optional. Used to enable the Langgraph platform control plane. If enabled, the license key must be provided. enabled: false @@ -83,16 +83,16 @@ config: tlsEnabled: true # -- Salt used to generate the API key. Should be a random string. - apiKeySalt: "1234567890" + apiKeySalt: "" logLevel: "info" # -- Must be 'oauth' for OAuth with PKCE, 'mixed' for basic auth or OAuth without PKCE - authType: "mixed" + authType: "" basicAuth: - enabled: true - initialOrgAdminEmail: "romain@langchain.dev" + enabled: false + initialOrgAdminEmail: "" # Either set the password and JWT secret in plaintext, or set in the secret specified by existingSecretName above. - initialOrgAdminPassword: "securePassword!" - jwtSecret: "1234567890" + initialOrgAdminPassword: "" + jwtSecret: "" # -- Prevent organization creation. If using basic auth, this is set to true by default. orgCreationDisabled: false # -- Disable personal orgs. Users will need to be invited to an org manually. If using basic auth, this is set to true by default. From 912f37c54ce11f43d3a432c5663c836bb5efa72d Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Mon, 16 Jun 2025 17:21:58 -0700 Subject: [PATCH 05/27] readme + clean values.yaml --- charts/langsmith/README.md | 25 +++++++++++++++++++++++++ charts/langsmith/values.yaml | 32 +++++++------------------------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/charts/langsmith/README.md b/charts/langsmith/README.md index 77f0fd4d..ea5c4afe 100644 --- a/charts/langsmith/README.md +++ b/charts/langsmith/README.md @@ -233,6 +233,11 @@ For information on how to use this chart, up-to-date release notes, and other gu | config.oauth.oauthIssuerUrl | string | `""` | | | config.oauth.oauthScopes | string | `"email,profile,openid"` | | | config.oauth.oauthSessionMaxSec | string | `"86400"` | | +| config.observability.tracing.enabled | bool | `false` | | +| config.observability.tracing.endpoint | string | `"http://localhost:4318"` | | +| config.observability.tracing.env | string | `"ls_self_hosted"` | | +| config.observability.tracing.exporter | string | `"http"` | | +| config.observability.tracing.useTls | bool | `true` | | | config.orgCreationDisabled | bool | `false` | Prevent organization creation. If using basic auth, this is set to true by default. | | config.personalOrgsDisabled | bool | `false` | Disable personal orgs. Users will need to be invited to an org manually. If using basic auth, this is set to true by default. | | config.settings | object | `{"redisRunsExpirySeconds":"21600"}` | Application Settings. These are used to tune the application | @@ -480,6 +485,8 @@ For information on how to use this chart, up-to-date release notes, and other gu | clickhouse.external.tlsSecretKey | string | `"clickhouse_tls"` | | | clickhouse.external.user | string | `"default"` | | | clickhouse.external.userSecretKey | string | `"clickhouse_user"` | | +| clickhouse.metrics.enabled | bool | `false` | | +| clickhouse.metrics.port | int | `9363` | | | clickhouse.name | string | `"clickhouse"` | | | clickhouse.pdb.annotations | object | `{}` | | | clickhouse.pdb.enabled | bool | `false` | | @@ -942,6 +949,15 @@ For information on how to use this chart, up-to-date release notes, and other gu | postgres.external.port | string | `"5432"` | | | postgres.external.schema | string | `"public"` | | | postgres.external.user | string | `"postgres"` | | +| postgres.metrics.containerPort | int | `9187` | | +| postgres.metrics.enabled | bool | `false` | | +| postgres.metrics.image.pullPolicy | string | `"IfNotPresent"` | | +| postgres.metrics.image.repository | string | `"prometheuscommunity/postgres-exporter"` | | +| postgres.metrics.image.tag | string | `"v0.17.1"` | | +| postgres.metrics.resources.limits.cpu | string | `"100m"` | | +| postgres.metrics.resources.limits.memory | string | `"128Mi"` | | +| postgres.metrics.resources.requests.cpu | string | `"100m"` | | +| postgres.metrics.resources.requests.memory | string | `"128Mi"` | | | postgres.name | string | `"postgres"` | | | postgres.pdb.annotations | object | `{}` | | | postgres.pdb.enabled | bool | `false` | | @@ -1067,6 +1083,15 @@ For information on how to use this chart, up-to-date release notes, and other gu | redis.external.connectionUrlSecretKey | string | `"connection_url"` | | | redis.external.enabled | bool | `false` | | | redis.external.existingSecretName | string | `""` | | +| redis.metrics.containerPort | int | `9121` | | +| redis.metrics.enabled | bool | `false` | | +| redis.metrics.image.pullPolicy | string | `"IfNotPresent"` | | +| redis.metrics.image.repository | string | `"oliver006/redis_exporter"` | | +| redis.metrics.image.tag | string | `"v1.74.0"` | | +| redis.metrics.resources.limits.cpu | string | `"100m"` | | +| redis.metrics.resources.limits.memory | string | `"128Mi"` | | +| redis.metrics.resources.requests.cpu | string | `"100m"` | | +| redis.metrics.resources.requests.memory | string | `"128Mi"` | | | redis.name | string | `"redis"` | | | redis.pdb.annotations | object | `{}` | | | redis.pdb.enabled | bool | `false` | | diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 042079d8..c6837c17 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -170,12 +170,14 @@ config: enabled: false logoUrl: "" coBrandingEnabled: true - + observability: tracing: enabled: false - endpoint: "" + endpoint: "http://localhost:4318" useTls: true + env: "ls_self_hosted" + exporter: "http" aceBackend: name: "ace-backend" @@ -439,10 +441,6 @@ backend: name: "" labels: {} annotations: {} - traces: - enabled: false - endpoint: "" - useTls: true clickhouse: name: "clickhouse" @@ -551,7 +549,7 @@ clickhouse: labels: {} annotations: {} metrics: - enabled: true + enabled: false port: 9363 frontend: @@ -732,10 +730,6 @@ hostBackend: create: true labels: {} annotations: {} - traces: - enabled: false - endpoint: "" - useTls: true listener: name: "listener" @@ -994,10 +988,6 @@ platformBackend: name: "" labels: {} annotations: {} - traces: - enabled: false - endpoint: "" - useTls: true operator: name: "operator" @@ -1185,10 +1175,6 @@ playground: name: "" labels: {} annotations: {} - traces: - enabled: false - endpoint: "" - useTls: true postgres: name: "postgres" @@ -1281,7 +1267,7 @@ postgres: labels: {} annotations: {} metrics: - enabled: true + enabled: false image: repository: prometheuscommunity/postgres-exporter tag: v0.17.1 @@ -1370,10 +1356,6 @@ queue: name: "" labels: {} annotations: {} - traces: - enabled: false - endpoint: "" - useTls: true redis: name: "redis" @@ -1458,7 +1440,7 @@ redis: labels: {} annotations: {} metrics: - enabled: true + enabled: false image: repository: oliver006/redis_exporter tag: v1.74.0 From 6fa13f01bdcc2932778bcbf1b179032ca5e25dd1 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Mon, 16 Jun 2025 17:34:04 -0700 Subject: [PATCH 06/27] cleanup --- charts/langsmith/README.md | 4 ++-- charts/langsmith/templates/_helpers.tpl | 18 ++++++++++++++++++ .../templates/backend/deployment.yaml | 9 +-------- .../templates/host-backend/deployment.yaml | 9 +-------- .../templates/platform-backend/deployment.yaml | 9 +-------- .../templates/playground/deployment.yaml | 1 + .../templates/postgres/stateful-set.yaml | 2 +- .../langsmith/templates/queue/deployment.yaml | 9 +-------- .../templates/redis/stateful-set.yaml | 6 +++--- charts/langsmith/values.yaml | 4 ++-- 10 files changed, 31 insertions(+), 40 deletions(-) diff --git a/charts/langsmith/README.md b/charts/langsmith/README.md index ea5c4afe..f6117f44 100644 --- a/charts/langsmith/README.md +++ b/charts/langsmith/README.md @@ -949,11 +949,11 @@ For information on how to use this chart, up-to-date release notes, and other gu | postgres.external.port | string | `"5432"` | | | postgres.external.schema | string | `"public"` | | | postgres.external.user | string | `"postgres"` | | -| postgres.metrics.containerPort | int | `9187` | | | postgres.metrics.enabled | bool | `false` | | | postgres.metrics.image.pullPolicy | string | `"IfNotPresent"` | | | postgres.metrics.image.repository | string | `"prometheuscommunity/postgres-exporter"` | | | postgres.metrics.image.tag | string | `"v0.17.1"` | | +| postgres.metrics.port | int | `9187` | | | postgres.metrics.resources.limits.cpu | string | `"100m"` | | | postgres.metrics.resources.limits.memory | string | `"128Mi"` | | | postgres.metrics.resources.requests.cpu | string | `"100m"` | | @@ -1083,11 +1083,11 @@ For information on how to use this chart, up-to-date release notes, and other gu | redis.external.connectionUrlSecretKey | string | `"connection_url"` | | | redis.external.enabled | bool | `false` | | | redis.external.existingSecretName | string | `""` | | -| redis.metrics.containerPort | int | `9121` | | | redis.metrics.enabled | bool | `false` | | | redis.metrics.image.pullPolicy | string | `"IfNotPresent"` | | | redis.metrics.image.repository | string | `"oliver006/redis_exporter"` | | | redis.metrics.image.tag | string | `"v1.74.0"` | | +| redis.metrics.port | int | `9121` | | | redis.metrics.resources.limits.cpu | string | `"100m"` | | | redis.metrics.resources.limits.memory | string | `"128Mi"` | | | redis.metrics.resources.requests.cpu | string | `"100m"` | | diff --git a/charts/langsmith/templates/_helpers.tpl b/charts/langsmith/templates/_helpers.tpl index 9b1c62b2..ad4e0784 100644 --- a/charts/langsmith/templates/_helpers.tpl +++ b/charts/langsmith/templates/_helpers.tpl @@ -621,3 +621,21 @@ Creates the image reference used for Langsmith deployments. If registry is speci {{ $imageConfig.repository }}:{{ $imageConfig.tag | default .Chart.AppVersion }} {{- end -}} {{- end -}} + +{{/* +Returns the OTEL tracing envrironment variables. +*/}} +{{- define "langsmith.otelTracingEnvVars" -}} +{{- if .Values.config.observability.tracing.enabled }} +- name: OTEL_TRACING_ENABLED + value: {{ .Values.config.observability.tracing.enabled }} +- name: OTEL_ENVIRONMENT + value: {{ .Values.config.observability.tracing.env }} +- name: OTLP_ENDPOINT + value: {{ .Values.config.observability.tracing.endpoint }} +- name: OTEL_EXPORTER + value: {{ .Values.config.observability.tracing.exporter }} +- name: OTEL_USE_TLS + value: {{ .Values.config.observability.tracing.useTls }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/langsmith/templates/backend/deployment.yaml b/charts/langsmith/templates/backend/deployment.yaml index 97e5c4e5..cc353a2f 100644 --- a/charts/langsmith/templates/backend/deployment.yaml +++ b/charts/langsmith/templates/backend/deployment.yaml @@ -7,6 +7,7 @@ {{- end }} {{- end -}} {{- $envVars := concat .Values.commonEnv (include "langsmith.commonEnv" . | fromYamlArray) (include "backendEnvVars" . | fromYamlArray) .Values.backend.deployment.extraEnv -}} +{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment @@ -62,14 +63,6 @@ spec: {{- with $envVars }} {{- toYaml . | nindent 12 }} {{- end }} - {{- if .Values.config.observability.tracing.enabled }} - - name: OTEL_TRACING_ENABLED - value: {{ .Values.config.observability.tracing.enabled }} - - name: OTLP_ENDPOINT - value: {{ .Values.config.observability.tracing.endpoint }} - - name: OTEL_USE_TLS - value: {{ .Values.config.observability.tracing.useTls }} - {{- end }} envFrom: - configMapRef: name: {{ include "langsmith.fullname" . }}-config diff --git a/charts/langsmith/templates/host-backend/deployment.yaml b/charts/langsmith/templates/host-backend/deployment.yaml index 6db5c06d..877da6c5 100644 --- a/charts/langsmith/templates/host-backend/deployment.yaml +++ b/charts/langsmith/templates/host-backend/deployment.yaml @@ -3,6 +3,7 @@ value: {{ .Values.hostBackend.containerPort | quote }} {{- end -}} {{- $envVars := concat (include "langsmith.commonEnv" . | fromYamlArray ) (include "hostBackendEnvVars" . | fromYamlArray) .Values.hostBackend.deployment.extraEnv -}} +{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} {{- if .Values.config.langgraphPlatform.enabled }} apiVersion: apps/v1 @@ -59,14 +60,6 @@ spec: {{- with $envVars }} {{- toYaml . | nindent 12 }} {{- end }} - {{- if .Values.config.observability.tracing.enabled }} - - name: OTEL_TRACING_ENABLED - value: {{ .Values.config.observability.tracing.enabled }} - - name: OTLP_ENDPOINT - value: {{ .Values.config.observability.tracing.endpoint }} - - name: OTEL_USE_TLS - value: {{ .Values.config.observability.tracing.useTls }} - {{- end }} envFrom: - configMapRef: name: {{ include "langsmith.fullname" . }}-config diff --git a/charts/langsmith/templates/platform-backend/deployment.yaml b/charts/langsmith/templates/platform-backend/deployment.yaml index b029b842..6193dde5 100644 --- a/charts/langsmith/templates/platform-backend/deployment.yaml +++ b/charts/langsmith/templates/platform-backend/deployment.yaml @@ -7,6 +7,7 @@ {{- end }} {{- end -}} {{- $envVars := concat .Values.commonEnv (include "langsmith.commonEnv" . | fromYamlArray) (include "platformBackendEnvVars" . | fromYamlArray) .Values.platformBackend.deployment.extraEnv -}} +{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment @@ -62,14 +63,6 @@ spec: {{- with $envVars }} {{ toYaml . | nindent 12 }} {{- end }} - {{- if .Values.config.observability.tracing.enabled }} - - name: OTEL_TRACING_ENABLED - value: {{ .Values.config.observability.tracing.enabled }} - - name: OTLP_ENDPOINT - value: {{ .Values.config.observability.tracing.endpoint }} - - name: OTEL_USE_TLS - value: {{ .Values.config.observability.tracing.useTls }} - {{- end }} envFrom: - configMapRef: name: {{ include "langsmith.fullname" . }}-config diff --git a/charts/langsmith/templates/playground/deployment.yaml b/charts/langsmith/templates/playground/deployment.yaml index cd674131..2381b80d 100644 --- a/charts/langsmith/templates/playground/deployment.yaml +++ b/charts/langsmith/templates/playground/deployment.yaml @@ -5,6 +5,7 @@ value: {{ .Values.config.logLevel | quote }} {{- end -}} {{- $envVars := concat (include "playgroundEnvVars" . | fromYamlArray) .Values.playground.deployment.extraEnv -}} +{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment diff --git a/charts/langsmith/templates/postgres/stateful-set.yaml b/charts/langsmith/templates/postgres/stateful-set.yaml index f19571ae..0fbc9e6e 100644 --- a/charts/langsmith/templates/postgres/stateful-set.yaml +++ b/charts/langsmith/templates/postgres/stateful-set.yaml @@ -114,7 +114,7 @@ spec: imagePullPolicy: {{ .Values.postgres.metrics.image.pullPolicy }} ports: - name: pg-metrics - containerPort: {{ .Values.postgres.metrics.containerPort }} + containerPort: {{ .Values.postgres.metrics.port }} resources: {{- toYaml .Values.postgres.metrics.resources | nindent 12 }} {{- end }} diff --git a/charts/langsmith/templates/queue/deployment.yaml b/charts/langsmith/templates/queue/deployment.yaml index 24c8500c..2cd0be48 100644 --- a/charts/langsmith/templates/queue/deployment.yaml +++ b/charts/langsmith/templates/queue/deployment.yaml @@ -5,6 +5,7 @@ value: "3" {{- end -}} {{- $envVars := concat .Values.commonEnv (include "langsmith.commonEnv" . | fromYamlArray) (include "queueEnvVars" . | fromYamlArray) .Values.queue.deployment.extraEnv -}} +{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment @@ -61,14 +62,6 @@ spec: {{- with $envVars }} {{- toYaml . | nindent 12 }} {{- end }} - {{- if .Values.config.observability.tracing.enabled }} - - name: OTEL_TRACING_ENABLED - value: {{ .Values.config.observability.tracing.enabled }} - - name: OTLP_ENDPOINT - value: {{ .Values.config.observability.tracing.endpoint }} - - name: OTEL_USE_TLS - value: {{ .Values.config.observability.tracing.useTls }} - {{- end }} envFrom: - configMapRef: name: {{ include "langsmith.fullname" . }}-config diff --git a/charts/langsmith/templates/redis/stateful-set.yaml b/charts/langsmith/templates/redis/stateful-set.yaml index 68d95f0b..721180b3 100644 --- a/charts/langsmith/templates/redis/stateful-set.yaml +++ b/charts/langsmith/templates/redis/stateful-set.yaml @@ -58,7 +58,7 @@ spec: imagePullPolicy: {{ .Values.images.redisImage.pullPolicy }} ports: - name: redis - containerPort: {{ .Values.redis.containerPort }} + port: {{ .Values.redis.port }} protocol: TCP {{- with .Values.redis.statefulSet.startupProbe }} startupProbe: @@ -94,8 +94,8 @@ spec: image: {{ .Values.redis.metrics.image.repository }}:{{ .Values.redis.metrics.image.tag }} imagePullPolicy: {{ .Values.redis.metrics.image.pullPolicy }} ports: - - name: redis-exporter - containerPort: {{ .Values.redis.metrics.containerPort }} + - name: redis-metrics + containerPort: {{ .Values.redis.metrics.port }} resources: {{- toYaml .Values.redis.metrics.resources | nindent 12 }} {{- end }} diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index c6837c17..e6006b20 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -1272,7 +1272,7 @@ postgres: repository: prometheuscommunity/postgres-exporter tag: v0.17.1 pullPolicy: IfNotPresent - containerPort: 9187 + port: 9187 resources: limits: cpu: 100m @@ -1445,7 +1445,7 @@ redis: repository: oliver006/redis_exporter tag: v1.74.0 pullPolicy: IfNotPresent - containerPort: 9121 + port: 9121 resources: limits: cpu: 100m From 237f72be205a0af02e1bc9d472b682a43b6bc34b Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Tue, 17 Jun 2025 11:43:21 -0700 Subject: [PATCH 07/27] tested end to end with docs --- charts/langsmith/README.md | 12 ++- charts/langsmith/templates/_helpers.tpl | 73 +++++++++++++++++-- .../templates/backend/deployment.yaml | 2 +- .../templates/host-backend/deployment.yaml | 1 - .../platform-backend/deployment.yaml | 2 +- .../templates/playground/deployment.yaml | 2 +- .../langsmith/templates/postgres/service.yaml | 4 +- .../templates/postgres/stateful-set.yaml | 2 +- .../langsmith/templates/queue/deployment.yaml | 2 +- charts/langsmith/templates/redis/service.yaml | 4 +- .../templates/redis/stateful-set.yaml | 4 +- charts/langsmith/values.yaml | 14 +++- 12 files changed, 96 insertions(+), 26 deletions(-) diff --git a/charts/langsmith/README.md b/charts/langsmith/README.md index dc319e25..4838170e 100644 --- a/charts/langsmith/README.md +++ b/charts/langsmith/README.md @@ -1,6 +1,6 @@ # langsmith -![Version: 0.10.28](https://img.shields.io/badge/Version-0.10.28-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.10.74](https://img.shields.io/badge/AppVersion-0.10.74-informational?style=flat-square) +![Version: 0.10.29](https://img.shields.io/badge/Version-0.10.29-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.10.74](https://img.shields.io/badge/AppVersion-0.10.74-informational?style=flat-square) Helm chart to deploy the langsmith application and all services it depends on. @@ -234,7 +234,7 @@ For information on how to use this chart, up-to-date release notes, and other gu | config.oauth.oauthScopes | string | `"email,profile,openid"` | | | config.oauth.oauthSessionMaxSec | string | `"86400"` | | | config.observability.tracing.enabled | bool | `false` | | -| config.observability.tracing.endpoint | string | `"http://localhost:4318"` | | +| config.observability.tracing.endpoint | string | `""` | | | config.observability.tracing.env | string | `"ls_self_hosted"` | | | config.observability.tracing.exporter | string | `"http"` | | | config.observability.tracing.useTls | bool | `true` | | @@ -463,6 +463,7 @@ For information on how to use this chart, up-to-date release notes, and other gu | backend.serviceAccount.create | bool | `true` | | | backend.serviceAccount.labels | object | `{}` | | | backend.serviceAccount.name | string | `""` | | +| backend.tracing.endpoint | string | `""` | | ## Clickhouse @@ -901,6 +902,7 @@ For information on how to use this chart, up-to-date release notes, and other gu | platformBackend.serviceAccount.create | bool | `true` | | | platformBackend.serviceAccount.labels | object | `{}` | | | platformBackend.serviceAccount.name | string | `""` | | +| platformBackend.tracing.endpoint | string | `""` | | ## Playground @@ -976,6 +978,7 @@ For information on how to use this chart, up-to-date release notes, and other gu | playground.serviceAccount.create | bool | `true` | | | playground.serviceAccount.labels | object | `{}` | | | playground.serviceAccount.name | string | `""` | | +| playground.tracing.endpoint | string | `""` | | ## Postgres @@ -992,11 +995,11 @@ For information on how to use this chart, up-to-date release notes, and other gu | postgres.external.port | string | `"5432"` | | | postgres.external.schema | string | `"public"` | | | postgres.external.user | string | `"postgres"` | | +| postgres.metrics.containerPort | int | `9187` | | | postgres.metrics.enabled | bool | `false` | | | postgres.metrics.image.pullPolicy | string | `"IfNotPresent"` | | | postgres.metrics.image.repository | string | `"prometheuscommunity/postgres-exporter"` | | | postgres.metrics.image.tag | string | `"v0.17.1"` | | -| postgres.metrics.port | int | `9187` | | | postgres.metrics.resources.limits.cpu | string | `"100m"` | | | postgres.metrics.resources.limits.memory | string | `"128Mi"` | | | postgres.metrics.resources.requests.cpu | string | `"100m"` | | @@ -1118,6 +1121,7 @@ For information on how to use this chart, up-to-date release notes, and other gu | queue.serviceAccount.create | bool | `true` | | | queue.serviceAccount.labels | object | `{}` | | | queue.serviceAccount.name | string | `""` | | +| queue.tracing.endpoint | string | `""` | | ## Redis @@ -1128,11 +1132,11 @@ For information on how to use this chart, up-to-date release notes, and other gu | redis.external.connectionUrlSecretKey | string | `"connection_url"` | | | redis.external.enabled | bool | `false` | | | redis.external.existingSecretName | string | `""` | | +| redis.metrics.containerPort | int | `9121` | | | redis.metrics.enabled | bool | `false` | | | redis.metrics.image.pullPolicy | string | `"IfNotPresent"` | | | redis.metrics.image.repository | string | `"oliver006/redis_exporter"` | | | redis.metrics.image.tag | string | `"v1.74.0"` | | -| redis.metrics.port | int | `9121` | | | redis.metrics.resources.limits.cpu | string | `"100m"` | | | redis.metrics.resources.limits.memory | string | `"128Mi"` | | | redis.metrics.resources.requests.cpu | string | `"100m"` | | diff --git a/charts/langsmith/templates/_helpers.tpl b/charts/langsmith/templates/_helpers.tpl index 5cc9fcbd..41b2af91 100644 --- a/charts/langsmith/templates/_helpers.tpl +++ b/charts/langsmith/templates/_helpers.tpl @@ -633,17 +633,76 @@ Creates the image reference used for Langsmith deployments. If registry is speci {{/* Returns the OTEL tracing envrironment variables. */}} -{{- define "langsmith.otelTracingEnvVars" -}} +{{- define "langsmith.sharedTracingEnvVars" -}} {{- if .Values.config.observability.tracing.enabled }} - name: OTEL_TRACING_ENABLED - value: {{ .Values.config.observability.tracing.enabled }} + value: {{ .Values.config.observability.tracing.enabled | quote }} - name: OTEL_ENVIRONMENT - value: {{ .Values.config.observability.tracing.env }} -- name: OTLP_ENDPOINT - value: {{ .Values.config.observability.tracing.endpoint }} + value: {{ .Values.config.observability.tracing.env | quote }} - name: OTEL_EXPORTER - value: {{ .Values.config.observability.tracing.exporter }} + value: {{ .Values.config.observability.tracing.exporter | quote }} - name: OTEL_USE_TLS - value: {{ .Values.config.observability.tracing.useTls }} + value: {{ .Values.config.observability.tracing.useTls | quote }} +{{- end }} +{{- end }} + + +{{/* +Returns the OTEL tracing environment variables for platform-backend. +*/}} +{{- define "langsmith.platformBackendOtelTracingEnvVars" -}} +{{- if .Values.config.observability.tracing.enabled }} +{{- include "langsmith.sharedTracingEnvVars" . | nindent 0 }} +- name: OTLP_ENDPOINT + {{- if .Values.platformBackend.tracing.endpoint }} + value: {{ .Values.platformBackend.tracing.endpoint }} + {{- else }} + value: {{ .Values.config.observability.tracing.endpoint }} + {{- end }} +{{- end }} +{{- end }} + +{{/* +Returns the OTEL tracing environment variables for backend. +*/}} +{{- define "langsmith.backendOtelTracingEnvVars" -}} +{{- if .Values.config.observability.tracing.enabled }} +{{- include "langsmith.sharedTracingEnvVars" . | nindent 0 }} +- name: OTLP_ENDPOINT + {{- if .Values.backend.tracing.endpoint }} + value: {{ .Values.backend.tracing.endpoint }} + {{- else }} + value: {{ .Values.config.observability.tracing.endpoint }} + {{- end }} +{{- end }} {{- end }} + +{{/* +Returns the OTEL tracing environment variables for playground. +*/}} +{{- define "langsmith.playgroundOtelTracingEnvVars" -}} +{{- if .Values.config.observability.tracing.enabled }} +{{- include "langsmith.sharedTracingEnvVars" . | nindent 0 }} +- name: OTLP_ENDPOINT + {{- if .Values.playground.tracing.endpoint }} + value: {{ .Values.playground.tracing.endpoint }} + {{- else }} + value: {{ .Values.config.observability.tracing.endpoint }} + {{- end }} +{{- end }} +{{- end }} + +{{/* +Returns the OTEL tracing environment variables for queue. +*/}} +{{- define "langsmith.queueOtelTracingEnvVars" -}} +{{- if .Values.config.observability.tracing.enabled }} +{{- include "langsmith.sharedTracingEnvVars" . | nindent 0 }} +- name: OTLP_ENDPOINT + {{- if .Values.queue.tracing.endpoint }} + value: {{ .Values.queue.tracing.endpoint }} + {{- else }} + value: {{ .Values.config.observability.tracing.endpoint }} + {{- end }} {{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/langsmith/templates/backend/deployment.yaml b/charts/langsmith/templates/backend/deployment.yaml index 4201f5bb..3ae6f1b0 100644 --- a/charts/langsmith/templates/backend/deployment.yaml +++ b/charts/langsmith/templates/backend/deployment.yaml @@ -7,7 +7,7 @@ {{- end }} {{- end -}} {{- $envVars := concat .Values.commonEnv (include "langsmith.commonEnv" . | fromYamlArray) (include "backendEnvVars" . | fromYamlArray) .Values.backend.deployment.extraEnv -}} -{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} +{{- $envVars := concat $envVars (include "langsmith.backendOtelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment diff --git a/charts/langsmith/templates/host-backend/deployment.yaml b/charts/langsmith/templates/host-backend/deployment.yaml index 608b0a88..d19476df 100644 --- a/charts/langsmith/templates/host-backend/deployment.yaml +++ b/charts/langsmith/templates/host-backend/deployment.yaml @@ -3,7 +3,6 @@ value: {{ .Values.hostBackend.containerPort | quote }} {{- end -}} {{- $envVars := concat (include "langsmith.commonEnv" . | fromYamlArray ) (include "hostBackendEnvVars" . | fromYamlArray) .Values.hostBackend.deployment.extraEnv -}} -{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} {{- if .Values.config.langgraphPlatform.enabled }} apiVersion: apps/v1 diff --git a/charts/langsmith/templates/platform-backend/deployment.yaml b/charts/langsmith/templates/platform-backend/deployment.yaml index 84989d01..a0ca37e6 100644 --- a/charts/langsmith/templates/platform-backend/deployment.yaml +++ b/charts/langsmith/templates/platform-backend/deployment.yaml @@ -7,7 +7,7 @@ {{- end }} {{- end -}} {{- $envVars := concat .Values.commonEnv (include "langsmith.commonEnv" . | fromYamlArray) (include "platformBackendEnvVars" . | fromYamlArray) .Values.platformBackend.deployment.extraEnv -}} -{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} +{{- $envVars := concat $envVars (include "langsmith.platformBackendOtelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment diff --git a/charts/langsmith/templates/playground/deployment.yaml b/charts/langsmith/templates/playground/deployment.yaml index d2ea8765..98d3d31c 100644 --- a/charts/langsmith/templates/playground/deployment.yaml +++ b/charts/langsmith/templates/playground/deployment.yaml @@ -5,7 +5,7 @@ value: {{ .Values.config.logLevel | quote }} {{- end -}} {{- $envVars := concat (include "playgroundEnvVars" . | fromYamlArray) .Values.playground.deployment.extraEnv -}} -{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} +{{- $envVars := concat $envVars (include "langsmith.playgroundOtelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment diff --git a/charts/langsmith/templates/postgres/service.yaml b/charts/langsmith/templates/postgres/service.yaml index 1466774c..5f38d8d0 100644 --- a/charts/langsmith/templates/postgres/service.yaml +++ b/charts/langsmith/templates/postgres/service.yaml @@ -27,8 +27,8 @@ spec: protocol: TCP {{- if .Values.postgres.metrics.enabled }} - name: postgres-metrics - port: {{ .Values.postgres.metrics.port }} - targetPort: {{ .Values.postgres.metrics.port }} + port: {{ .Values.postgres.metrics.containerPort }} + targetPort: {{ .Values.postgres.metrics.containerPort }} protocol: TCP {{- end }} selector: diff --git a/charts/langsmith/templates/postgres/stateful-set.yaml b/charts/langsmith/templates/postgres/stateful-set.yaml index d0e2f7b8..8886f3a7 100644 --- a/charts/langsmith/templates/postgres/stateful-set.yaml +++ b/charts/langsmith/templates/postgres/stateful-set.yaml @@ -118,7 +118,7 @@ spec: imagePullPolicy: {{ .Values.postgres.metrics.image.pullPolicy }} ports: - name: pg-metrics - containerPort: {{ .Values.postgres.metrics.port }} + containerPort: {{ .Values.postgres.metrics.containerPort }} resources: {{- toYaml .Values.postgres.metrics.resources | nindent 12 }} {{- end }} diff --git a/charts/langsmith/templates/queue/deployment.yaml b/charts/langsmith/templates/queue/deployment.yaml index ab9b56dc..f74e502c 100644 --- a/charts/langsmith/templates/queue/deployment.yaml +++ b/charts/langsmith/templates/queue/deployment.yaml @@ -5,7 +5,7 @@ value: "3" {{- end -}} {{- $envVars := concat .Values.commonEnv (include "langsmith.commonEnv" . | fromYamlArray) (include "queueEnvVars" . | fromYamlArray) .Values.queue.deployment.extraEnv -}} -{{- $envVars := concat $envVars (include "langsmith.otelTracingEnvVars" . | fromYamlArray) -}} +{{- $envVars := concat $envVars (include "langsmith.queueOtelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment diff --git a/charts/langsmith/templates/redis/service.yaml b/charts/langsmith/templates/redis/service.yaml index a0df7191..53e6a5c5 100644 --- a/charts/langsmith/templates/redis/service.yaml +++ b/charts/langsmith/templates/redis/service.yaml @@ -27,8 +27,8 @@ spec: protocol: TCP {{- if .Values.redis.metrics.enabled }} - name: redis-metrics - port: {{ .Values.redis.metrics.port }} - targetPort: {{ .Values.redis.metrics.port }} + port: {{ .Values.redis.metrics.containerPort }} + targetPort: {{ .Values.redis.metrics.containerPort }} protocol: TCP {{- end }} selector: diff --git a/charts/langsmith/templates/redis/stateful-set.yaml b/charts/langsmith/templates/redis/stateful-set.yaml index ead0e3b1..139a4118 100644 --- a/charts/langsmith/templates/redis/stateful-set.yaml +++ b/charts/langsmith/templates/redis/stateful-set.yaml @@ -62,7 +62,7 @@ spec: imagePullPolicy: {{ .Values.images.redisImage.pullPolicy }} ports: - name: redis - port: {{ .Values.redis.port }} + containerPort: {{ .Values.redis.containerPort }} protocol: TCP {{- with .Values.redis.statefulSet.startupProbe }} startupProbe: @@ -99,7 +99,7 @@ spec: imagePullPolicy: {{ .Values.redis.metrics.image.pullPolicy }} ports: - name: redis-metrics - containerPort: {{ .Values.redis.metrics.port }} + containerPort: {{ .Values.redis.metrics.containerPort }} resources: {{- toYaml .Values.redis.metrics.resources | nindent 12 }} {{- end }} diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 3e25e748..75bd71e6 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -174,7 +174,7 @@ config: observability: tracing: enabled: false - endpoint: "http://localhost:4318" + endpoint: "" useTls: true env: "ls_self_hosted" exporter: "http" @@ -446,6 +446,8 @@ backend: name: "" labels: {} annotations: {} + tracing: + endpoint: "" clickhouse: name: "clickhouse" @@ -1031,6 +1033,8 @@ platformBackend: name: "" labels: {} annotations: {} + tracing: + endpoint: "" operator: name: "operator" @@ -1220,6 +1224,8 @@ playground: name: "" labels: {} annotations: {} + tracing: + endpoint: "" postgres: name: "postgres" @@ -1318,7 +1324,7 @@ postgres: repository: prometheuscommunity/postgres-exporter tag: v0.17.1 pullPolicy: IfNotPresent - port: 9187 + containerPort: 9187 resources: limits: cpu: 100m @@ -1403,6 +1409,8 @@ queue: name: "" labels: {} annotations: {} + tracing: + endpoint: "" redis: name: "redis" @@ -1493,7 +1501,7 @@ redis: repository: oliver006/redis_exporter tag: v1.74.0 pullPolicy: IfNotPresent - port: 9121 + containerPort: 9121 resources: limits: cpu: 100m From 05df3857412bf4dc3fab333a8c896195444d9d80 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Tue, 17 Jun 2025 21:37:10 -0700 Subject: [PATCH 08/27] progress, loki almost done --- charts/langsmith-observability/Chart.lock | 12 ++ charts/langsmith-observability/Chart.yaml | 22 +++ .../charts/grafana-9.2.6.tgz | Bin 0 -> 47972 bytes .../charts/loki-6.30.1.tgz | Bin 0 -> 153235 bytes .../charts/minio-16.0.10.tgz | Bin 0 -> 60830 bytes .../templates/otel/logs-sidecar.yaml | 71 +++++++++ .../templates/otel/rbac.yaml | 26 ++++ charts/langsmith-observability/values.yaml | 139 ++++++++++++++++++ 8 files changed, 270 insertions(+) create mode 100644 charts/langsmith-observability/Chart.lock create mode 100644 charts/langsmith-observability/Chart.yaml create mode 100644 charts/langsmith-observability/charts/grafana-9.2.6.tgz create mode 100644 charts/langsmith-observability/charts/loki-6.30.1.tgz create mode 100644 charts/langsmith-observability/charts/minio-16.0.10.tgz create mode 100644 charts/langsmith-observability/templates/otel/logs-sidecar.yaml create mode 100644 charts/langsmith-observability/templates/otel/rbac.yaml create mode 100644 charts/langsmith-observability/values.yaml diff --git a/charts/langsmith-observability/Chart.lock b/charts/langsmith-observability/Chart.lock new file mode 100644 index 00000000..8e14044e --- /dev/null +++ b/charts/langsmith-observability/Chart.lock @@ -0,0 +1,12 @@ +dependencies: +- name: grafana + repository: https://grafana.github.io/helm-charts + version: 9.2.6 +- name: loki + repository: https://grafana.github.io/helm-charts + version: 6.30.1 +- name: minio + repository: https://charts.bitnami.com/bitnami + version: 16.0.10 +digest: sha256:e6b828e8881b4b2d049e49b8aa16f7af697eb6fdf842750820ab2b3c81a88e40 +generated: "2025-06-17T21:27:00.575251-07:00" diff --git a/charts/langsmith-observability/Chart.yaml b/charts/langsmith-observability/Chart.yaml new file mode 100644 index 00000000..585b0c57 --- /dev/null +++ b/charts/langsmith-observability/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: v2 +name: langsmith-observability +maintainers: + - name: Romain + email: romain@langchain.dev +description: Helm chart to deploy the observability stack for LangSmith. +type: application +version: 0.1.0 +appVersion: "0.1.0" +dependencies: + - name: grafana + version: 9.2.6 + repository: https://grafana.github.io/helm-charts + condition: grafana.enabled + - name: loki + version: 6.30.1 + repository: https://grafana.github.io/helm-charts + condition: loki.enabled + - name: minio + version: 16.0.10 + repository: https://charts.bitnami.com/bitnami + condition: minio.enabled diff --git a/charts/langsmith-observability/charts/grafana-9.2.6.tgz b/charts/langsmith-observability/charts/grafana-9.2.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..602aaaee17b05677c54fc953bb5f5dbd630ba117 GIT binary patch literal 47972 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

pFeZ w^8fvv{QZCb<Dc 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 BEx7;y literal 0 HcmV?d00001 diff --git a/charts/langsmith-observability/charts/minio-16.0.10.tgz b/charts/langsmith-observability/charts/minio-16.0.10.tgz new file mode 100644 index 0000000000000000000000000000000000000000..437152c5247a69f94616c6306df3c82849e71e7a GIT binary patch literal 60830 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 z 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 Date: Wed, 18 Jun 2025 16:16:44 -0700 Subject: [PATCH 09/27] lgtm stack all working --- charts/langsmith-observability/Chart.lock | 10 +- charts/langsmith-observability/Chart.yaml | 12 +- .../charts/mimir-distributed-5.7.0.tgz | Bin 0 -> 229752 bytes .../charts/tempo-distributed-1.41.1.tgz | Bin 0 -> 110462 bytes .../templates/_helpers.tpl | 32 +++++ .../templates/otel/gateway.yaml | 105 +++++++++++++++ .../templates/otel/logs-sidecar.yaml | 2 +- .../templates/otel/rbac-gateway.yaml | 25 ++++ .../otel/{rbac.yaml => rbac-sidecar.yaml} | 2 + charts/langsmith-observability/values.yaml | 123 +++++++++++++++--- charts/langsmith/templates/_helpers.tpl | 9 ++ .../templates/ace-backend/deployment.yaml | 1 + .../templates/backend/deployment.yaml | 1 + .../templates/clickhouse/service.yaml | 2 +- .../templates/clickhouse/stateful-set.yaml | 1 + .../templates/frontend/deployment.yaml | 1 + .../platform-backend/deployment.yaml | 1 + .../templates/playground/deployment.yaml | 1 + .../templates/postgres/stateful-set.yaml | 12 +- .../langsmith/templates/queue/deployment.yaml | 1 + .../templates/redis/stateful-set.yaml | 12 +- charts/langsmith/values.yaml | 6 +- 22 files changed, 328 insertions(+), 31 deletions(-) create mode 100644 charts/langsmith-observability/charts/mimir-distributed-5.7.0.tgz create mode 100644 charts/langsmith-observability/charts/tempo-distributed-1.41.1.tgz create mode 100644 charts/langsmith-observability/templates/_helpers.tpl create mode 100644 charts/langsmith-observability/templates/otel/gateway.yaml create mode 100644 charts/langsmith-observability/templates/otel/rbac-gateway.yaml rename charts/langsmith-observability/templates/otel/{rbac.yaml => rbac-sidecar.yaml} (92%) diff --git a/charts/langsmith-observability/Chart.lock b/charts/langsmith-observability/Chart.lock index 8e14044e..191a932d 100644 --- a/charts/langsmith-observability/Chart.lock +++ b/charts/langsmith-observability/Chart.lock @@ -8,5 +8,11 @@ dependencies: - name: minio repository: https://charts.bitnami.com/bitnami version: 16.0.10 -digest: sha256:e6b828e8881b4b2d049e49b8aa16f7af697eb6fdf842750820ab2b3c81a88e40 -generated: "2025-06-17T21:27:00.575251-07:00" +- name: mimir-distributed + repository: https://grafana.github.io/helm-charts + version: 5.7.0 +- name: tempo-distributed + repository: https://grafana.github.io/helm-charts + version: 1.41.1 +digest: sha256:04afd5846b32979e71b89b33879de13c9104572ba2c4374b47f975e4f7e8b6d4 +generated: "2025-06-18T14:20:23.094864-07:00" diff --git a/charts/langsmith-observability/Chart.yaml b/charts/langsmith-observability/Chart.yaml index 585b0c57..2ecb325f 100644 --- a/charts/langsmith-observability/Chart.yaml +++ b/charts/langsmith-observability/Chart.yaml @@ -15,8 +15,18 @@ dependencies: - name: loki version: 6.30.1 repository: https://grafana.github.io/helm-charts - condition: loki.enabled + condition: config.logs.enabled - name: minio version: 16.0.10 repository: https://charts.bitnami.com/bitnami condition: minio.enabled + - name: mimir-distributed + version: 5.7.0 + repository: https://grafana.github.io/helm-charts + condition: config.metrics.enabled + alias: mimir + - name: tempo-distributed + version: 1.41.1 + repository: https://grafana.github.io/helm-charts + condition: config.traces.enabled + alias: tempo \ No newline at end of file diff --git a/charts/langsmith-observability/charts/mimir-distributed-5.7.0.tgz b/charts/langsmith-observability/charts/mimir-distributed-5.7.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..781550e787bc152e58359c210c09889cfd34eb0a GIT binary patch literal 229752 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 hzIJa--l@}fS_0$8hSNZ75D*}+f=B=YDc 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 literal 0 HcmV?d00001 diff --git a/charts/langsmith-observability/templates/_helpers.tpl b/charts/langsmith-observability/templates/_helpers.tpl new file mode 100644 index 00000000..1fac3a54 --- /dev/null +++ b/charts/langsmith-observability/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* +Check if any of the three services (redis, postgres, clickhouse) metrics are enabled +Usage: include "langsmith-observability.anyMetricsEnabled" . +*/}} +{{- define "langsmith-observability.databaseMetricsEnabled" -}} +{{- or .Values.opentelemetryCollector.metrics.redis.enabled .Values.opentelemetryCollector.metrics.postgres.enabled (default false .Values.opentelemetryCollector.metrics.clickhouse.enabled) -}} +{{- end -}} + +{{/* +Build a regex pattern for enabled services (redis, postgres, clickhouse) +Usage: include "langsmith-observability.enabledServicesRegex" . +*/}} +{{- define "langsmith-observability.enabledServicesRegex" -}} +{{- $services := list -}} +{{- if .Values.opentelemetryCollector.metrics.redis.enabled -}} + {{- $serviceName := default (printf "%s-redis" .Values.langSmithReleaseName) .Values.opentelemetryCollector.metrics.redis.serviceName -}} + {{- $services = append $services $serviceName -}} +{{- end -}} +{{- if .Values.opentelemetryCollector.metrics.postgres.enabled -}} + {{- $serviceName := default (printf "%s-postgres" .Values.langSmithReleaseName) .Values.opentelemetryCollector.metrics.postgres.serviceName -}} + {{- $services = append $services $serviceName -}} +{{- end -}} +{{- if .Values.opentelemetryCollector.metrics.clickhouse.enabled -}} + {{- $serviceName := default (printf "%s-clickhouse" .Values.langSmithReleaseName) .Values.opentelemetryCollector.metrics.clickhouse.serviceName -}} + {{- $services = append $services $serviceName -}} +{{- end -}} +{{- if $services -}} +({{ join "|" $services }}) +{{- end -}} +{{- end -}} + + diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml new file mode 100644 index 00000000..df064338 --- /dev/null +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -0,0 +1,105 @@ +{{- if or .Values.config.metrics.enabled .Values.config.traces.enabled }} +apiVersion: opentelemetry.io/v1beta1 +kind: OpenTelemetryCollector +metadata: + name: {{ .Values.opentelemetryCollector.name }}-gateway +spec: + mode: deployment + image: {{ .Values.opentelemetryCollector.image.repository }}:{{ .Values.opentelemetryCollector.image.tag }} + + config: + receivers: + {{ if .Values.config.metrics.enabled }} + prometheus: + config: + scrape_configs: + - job_name: langsmith-services + metrics_path: /metrics + kubernetes_sd_configs: + - role: endpoints + namespaces: + names: [{{ .Values.langsmithNamespace }}] + relabel_configs: + # Keeps all services with the name langsmith-.* + - source_labels: [__meta_kubernetes_service_name] + regex: "langsmith-.*" + action: keep + - source_labels: [__meta_kubernetes_endpoint_port_name] + regex: "(backend|platform|playground)" + action: keep + # Promote useful metadata into regular labels + - source_labels: [__meta_kubernetes_service_name] + target_label: k8s_service + - source_labels: [__meta_kubernetes_pod_name] + target_label: k8s_pod + # Replace the default "host:port" as Prom's instance label + - source_labels: [__address__] + target_label: instance + {{- if include "langsmith-observability.databaseMetricsEnabled" . }} + - job_name: database-metrics + metrics_path: /metrics + kubernetes_sd_configs: + - role: endpoints + namespaces: + names: [{{ .Values.langsmithNamespace }}] + relabel_configs: + - source_labels: [__meta_kubernetes_service_name] + regex: {{ include "langsmith-observability.enabledServicesRegex" . }} + action: keep + - source_labels: [__meta_kubernetes_endpoint_port_name] + regex: ".*metrics.*" + action: keep + - source_labels: [__meta_kubernetes_service_name] + target_label: k8s_service + - source_labels: [__meta_kubernetes_pod_name] + target_label: k8s_pod + - source_labels: [__address__] + target_label: instance + {{- end }} + {{ end }} + {{- if .Values.config.traces.enabled }} + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + {{- end }} + + processors: + batch: + send_batch_size: 8192 + timeout: 10s + memory_limiter: + check_interval: 1m + limit_percentage: 90 + spike_limit_percentage: 80 + + exporters: + {{ if .Values.config.metrics.enabled }} + otlphttp/metrics: + endpoint: http://{{ .Release.Name }}-mimir-nginx.{{ .Release.Namespace }}.svc.cluster.local:80/otlp + {{ end }} + {{ if .Values.config.traces.enabled }} + otlphttp/traces: + endpoint: http://langsmith-observability-tempo-distributor-discovery.romain-observability.svc.cluster.local:4318 + {{ end }} + + service: + telemetry: + logs: + level: debug + pipelines: + {{ if .Values.config.metrics.enabled }} + metrics/langsmith: + receivers: [prometheus] + processors: [batch, memory_limiter] + exporters: [otlphttp/metrics] + {{ end }} + {{ if .Values.config.traces.enabled }} + traces/langsmith: + receivers: [otlp] + processors: [batch, memory_limiter] + exporters: [otlphttp/traces] + {{ end }} +{{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml index 7310355f..042c8c18 100644 --- a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml @@ -36,7 +36,7 @@ spec: exporters: otlphttp/logs: - endpoint: http://loki.{{ .Release.Namespace }}.svc.cluster.local:3100/loki/api/v1/push + endpoint: http://{{ .Release.Name }}-loki-gateway.{{ .Release.Namespace }}.svc.cluster.local:80/otlp tls: insecure: false diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml new file mode 100644 index 00000000..50c353cd --- /dev/null +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -0,0 +1,25 @@ +{{- if .Values.config.metrics.enabled }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: get-pod-metrics + namespace: {{ .Values.langsmithNamespace }} +rules: + - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "watch", "list"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: get-pod-metrics-binding + namespace: {{ .Values.langsmithNamespace }} +roleRef: + kind: Role + name: get-pod-metrics + namespace: {{ .Values.langsmithNamespace }} +subjects: + - kind: ServiceAccount + name: {{ .Values.opentelemetryCollector.name }}-gateway-collector + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/rbac.yaml b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml similarity index 92% rename from charts/langsmith-observability/templates/otel/rbac.yaml rename to charts/langsmith-observability/templates/otel/rbac-sidecar.yaml index e3743bc8..22651a4b 100644 --- a/charts/langsmith-observability/templates/otel/rbac.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml @@ -1,3 +1,4 @@ +{{- if .Values.config.logs.enabled }} {{- $namespace := .Values.langsmithNamespace }} apiVersion: rbac.authorization.k8s.io/v1 kind: Role @@ -23,4 +24,5 @@ subjects: - kind: ServiceAccount name: {{ . }} namespace: {{ $namespace }} +{{- end }} {{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index 7b2294c9..0b1cd1cf 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -1,13 +1,14 @@ releaseName: "langsmith-observability" langsmithNamespace: "romain" +langSmithReleaseName: "langsmith" config: logs: enabled: true metrics: - enabled: false + enabled: true traces: - enabled: false + enabled: true grafana: datasources: @@ -19,10 +20,29 @@ grafana: type: loki url: http://{{ .Release.Name }}-loki-gateway isDefault: false + - name: Mimir + uid: prom + type: prometheus + url: http://{{ .Release.Name }}-mimir-nginx/prometheus + - name: Tempo + uid: tempo + type: tempo + url: http://{{ .Release.Name }}-tempo-query-frontend-discovery:3200 + isDefault: false + jsonData: + tracesToLogsV2: + datasourceUid: loki + lokiSearch: + datasourceUid: loki + tracesToMetrics: + datasourceUid: prom + serviceMap: + datasourceUid: prom loki: deploymentMode: Distributed loki: + auth_enabled: false # This just drops tenant based authentication header, and all logs are under tenant "fake" schemaConfig: configs: - from: "2024-04-01" @@ -33,18 +53,17 @@ loki: prefix: loki_index_ period: 24h - # storage_config: - # aws: - # region: us-east-1 - # bucketnames: loki-chunks - # s3forcepathstyle: true + storage_config: + aws: + region: us-east-1 + bucketnames: loki-chunks + s3forcepathstyle: true storage: type: s3 bucketNames: chunks: loki-chunks - ruler: loki-ruler - admin: loki-admin + # In the future, configure a ruler bucket if we want to set rules/alerts on logs? s3: endpoint: langsmith-observability-minio.romain-observability.svc.cluster.local:9000 region: us-east-1 @@ -55,6 +74,7 @@ loki: ingester: chunk_encoding: snappy + max_chunk_age: 10s querier: # Default is 4, if you have enough memory and CPU you can increase, reduce if OOMing max_concurrent: 4 @@ -102,6 +122,33 @@ loki: singleBinary: replicas: 0 +mimir: + minio: + enabled: false + mimir: + structuredConfig: + common: + storage: + backend: s3 + s3: + endpoint: langsmith-observability-minio.romain-observability.svc.cluster.local:9000 + region: us-east-1 + secret_access_key: admin_password + access_key_id: admin + insecure: true + + blocks_storage: + s3: + bucket_name: mimir-blocks + + alertmanager_storage: + s3: + bucket_name: mimir-alertmanager + + ruler_storage: + s3: + bucket_name: mimir-ruler + minio: enabled: true mode: standalone @@ -112,20 +159,15 @@ minio: readinessProbe: enabled: false auth: - rootUser: admin - rootPassword: admin_password - defaultBuckets: "loki-chunks, loki-ruler, loki-admin, mimir-blocks, mimir-ruler, mimir-alertmanager, tempo" + rootUser: "admin" + rootPassword: "admin_password" + defaultBuckets: "loki-chunks, mimir-blocks, mimir-ruler, mimir-alertmanager, tempo" opentelemetryCollector: name: "langsmith-collector" image: repository: otel/opentelemetry-collector-contrib tag: "0.123.0" - - k8sAttributes: - enabled: false - namespace: "romain" - name: "langsmith-backend" serviceAccounts: - "langsmith-ace-backend" @@ -136,4 +178,49 @@ opentelemetryCollector: - "langsmith-playground" - "langsmith-postgres" - "langsmith-queue" - - "langsmith-redis" \ No newline at end of file + - "langsmith-redis" + + metrics: + langsmith: + enabled: true + redis: + enabled: true + serviceName: "" + portName: "" + postgres: + enabled: true + serviceName: "" + portName: "" + clickhouse: + enabled: true + serviceName: "" + portName: "" + +tempo: + storage: + trace: + backend: s3 + s3: + access_key: admin + secret_key: admin_password + bucket: tempo + endpoint: langsmith-observability-minio.romain-observability.svc.cluster.local:9000 + insecure: true + # Specifies which trace protocols to accept by the gateway. + traces: + otlp: + grpc: + enabled: true + http: + enabled: true + zipkin: + enabled: false + jaeger: + thriftHttp: + enabled: false + opencensus: + enabled: false + + metricsGenerator: + enabled: true + diff --git a/charts/langsmith/templates/_helpers.tpl b/charts/langsmith/templates/_helpers.tpl index 41b2af91..79f48888 100644 --- a/charts/langsmith/templates/_helpers.tpl +++ b/charts/langsmith/templates/_helpers.tpl @@ -45,6 +45,15 @@ app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end }} +{{/* +Common labels for the observability stack +*/}} +{{- define "langsmith.observabilityAnnotations" -}} +{{- if .Values.config.observability.collector.enabled }} +sidecar.opentelemetry.io/inject: {{ .Values.config.observability.collector.namespace }}/{{ .Values.config.observability.collector.name }} +{{- end }} +{{- end }} + {{/* Common annotations */}} diff --git a/charts/langsmith/templates/ace-backend/deployment.yaml b/charts/langsmith/templates/ace-backend/deployment.yaml index 610df4b4..5a0f19ba 100644 --- a/charts/langsmith/templates/ace-backend/deployment.yaml +++ b/charts/langsmith/templates/ace-backend/deployment.yaml @@ -31,6 +31,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.aceBackend.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/backend/deployment.yaml b/charts/langsmith/templates/backend/deployment.yaml index 3ae6f1b0..e285daea 100644 --- a/charts/langsmith/templates/backend/deployment.yaml +++ b/charts/langsmith/templates/backend/deployment.yaml @@ -34,6 +34,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.backend.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/clickhouse/service.yaml b/charts/langsmith/templates/clickhouse/service.yaml index db70e289..a13f18a9 100644 --- a/charts/langsmith/templates/clickhouse/service.yaml +++ b/charts/langsmith/templates/clickhouse/service.yaml @@ -30,7 +30,7 @@ spec: targetPort: ch-native protocol: TCP {{- if .Values.clickhouse.metrics.enabled }} - - name: ch-metrics + - name: metrics port: {{ .Values.clickhouse.metrics.port }} targetPort: {{ .Values.clickhouse.metrics.port }} protocol: TCP diff --git a/charts/langsmith/templates/clickhouse/stateful-set.yaml b/charts/langsmith/templates/clickhouse/stateful-set.yaml index 7f5e4752..00285972 100644 --- a/charts/langsmith/templates/clickhouse/stateful-set.yaml +++ b/charts/langsmith/templates/clickhouse/stateful-set.yaml @@ -42,6 +42,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} {{- with .Values.clickhouse.statefulSet.annotations }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/langsmith/templates/frontend/deployment.yaml b/charts/langsmith/templates/frontend/deployment.yaml index 682e5f36..5dc63468 100644 --- a/charts/langsmith/templates/frontend/deployment.yaml +++ b/charts/langsmith/templates/frontend/deployment.yaml @@ -53,6 +53,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.frontend.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/platform-backend/deployment.yaml b/charts/langsmith/templates/platform-backend/deployment.yaml index a0ca37e6..8d71922d 100644 --- a/charts/langsmith/templates/platform-backend/deployment.yaml +++ b/charts/langsmith/templates/platform-backend/deployment.yaml @@ -34,6 +34,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.platformBackend.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/playground/deployment.yaml b/charts/langsmith/templates/playground/deployment.yaml index 98d3d31c..eb782182 100644 --- a/charts/langsmith/templates/playground/deployment.yaml +++ b/charts/langsmith/templates/playground/deployment.yaml @@ -32,6 +32,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.playground.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/postgres/stateful-set.yaml b/charts/langsmith/templates/postgres/stateful-set.yaml index 8886f3a7..cce835f6 100644 --- a/charts/langsmith/templates/postgres/stateful-set.yaml +++ b/charts/langsmith/templates/postgres/stateful-set.yaml @@ -43,9 +43,15 @@ spec: app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.postgres.name }} template: metadata: - {{- with .Values.postgres.statefulSet.annotations }} + {{- $observabilityAnnotations := include "langsmith.observabilityAnnotations" . }} + {{- if or $observabilityAnnotations .Values.postgres.statefulSet.annotations }} annotations: - {{- toYaml . | nindent 8 }} + {{- if $observabilityAnnotations }} + {{- $observabilityAnnotations | nindent 8 }} + {{- end }} + {{- with .Values.postgres.statefulSet.annotations }} + {{- toYaml . | nindent 8 }} + {{- end }} {{- end }} labels: {{- with.Values.postgres.statefulSet.labels }} @@ -113,7 +119,7 @@ spec: {{- toYaml . | nindent 8 }} {{- end }} {{- if .Values.postgres.metrics.enabled }} - - name: postgres-metrics-exporter + - name: {{ .Values.postgres.metrics.containerName }} image: {{ .Values.postgres.metrics.image.repository }}:{{ .Values.postgres.metrics.image.tag }} imagePullPolicy: {{ .Values.postgres.metrics.image.pullPolicy }} ports: diff --git a/charts/langsmith/templates/queue/deployment.yaml b/charts/langsmith/templates/queue/deployment.yaml index f74e502c..56b9d451 100644 --- a/charts/langsmith/templates/queue/deployment.yaml +++ b/charts/langsmith/templates/queue/deployment.yaml @@ -32,6 +32,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.queue.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/redis/stateful-set.yaml b/charts/langsmith/templates/redis/stateful-set.yaml index 139a4118..606f6c28 100644 --- a/charts/langsmith/templates/redis/stateful-set.yaml +++ b/charts/langsmith/templates/redis/stateful-set.yaml @@ -24,9 +24,15 @@ spec: app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.redis.name }} template: metadata: - {{- with .Values.redis.statefulSet.annotations }} + {{- $observabilityAnnotations := include "langsmith.observabilityAnnotations" . }} + {{- if or $observabilityAnnotations .Values.redis.statefulSet.annotations }} annotations: - {{- toYaml . | nindent 8 }} + {{- if $observabilityAnnotations }} + {{- $observabilityAnnotations | nindent 8 }} + {{- end }} + {{- with .Values.redis.statefulSet.annotations }} + {{- toYaml . | nindent 8 }} + {{- end }} {{- end }} labels: {{- with.Values.redis.statefulSet.labels }} @@ -94,7 +100,7 @@ spec: {{- end }} {{- end }} {{- if .Values.redis.metrics.enabled }} - - name: redis-metrics-exporter + - name: {{ .Values.redis.metrics.containerName }} image: {{ .Values.redis.metrics.image.repository }}:{{ .Values.redis.metrics.image.tag }} imagePullPolicy: {{ .Values.redis.metrics.image.pullPolicy }} ports: diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 75bd71e6..22986ec0 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -1319,7 +1319,8 @@ postgres: labels: {} annotations: {} metrics: - enabled: false + enabled: true + containerName: "postgres-metrics-exporter" image: repository: prometheuscommunity/postgres-exporter tag: v0.17.1 @@ -1496,7 +1497,8 @@ redis: labels: {} annotations: {} metrics: - enabled: false + enabled: true + containerName: "redis-metrics-exporter" image: repository: oliver006/redis_exporter tag: v1.74.0 From 64df7a69feedb413dd24d6e01034b11e758723ef Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Wed, 18 Jun 2025 18:03:38 -0700 Subject: [PATCH 10/27] remove tracing endpoint override --- charts/langsmith/README.md | 6 +- .../langsmith/ci/telemetry-config-values.yaml | 89 +++++++++++++++++++ charts/langsmith/templates/_helpers.tpl | 79 +--------------- .../templates/backend/deployment.yaml | 1 - charts/langsmith/templates/config-map.yaml | 7 ++ .../platform-backend/deployment.yaml | 1 - .../templates/playground/deployment.yaml | 1 - .../langsmith/templates/queue/deployment.yaml | 1 - charts/langsmith/values.yaml | 10 +-- 9 files changed, 99 insertions(+), 96 deletions(-) create mode 100644 charts/langsmith/ci/telemetry-config-values.yaml diff --git a/charts/langsmith/README.md b/charts/langsmith/README.md index 4838170e..57e6a084 100644 --- a/charts/langsmith/README.md +++ b/charts/langsmith/README.md @@ -463,7 +463,6 @@ For information on how to use this chart, up-to-date release notes, and other gu | backend.serviceAccount.create | bool | `true` | | | backend.serviceAccount.labels | object | `{}` | | | backend.serviceAccount.name | string | `""` | | -| backend.tracing.endpoint | string | `""` | | ## Clickhouse @@ -491,7 +490,7 @@ For information on how to use this chart, up-to-date release notes, and other gu | clickhouse.external.tlsSecretKey | string | `"clickhouse_tls"` | | | clickhouse.external.user | string | `"default"` | | | clickhouse.external.userSecretKey | string | `"clickhouse_user"` | | -| clickhouse.metrics.enabled | bool | `false` | | +| clickhouse.metrics.enabled | bool | `true` | | | clickhouse.metrics.port | int | `9363` | | | clickhouse.name | string | `"clickhouse"` | | | clickhouse.pdb.annotations | object | `{}` | | @@ -902,7 +901,6 @@ For information on how to use this chart, up-to-date release notes, and other gu | platformBackend.serviceAccount.create | bool | `true` | | | platformBackend.serviceAccount.labels | object | `{}` | | | platformBackend.serviceAccount.name | string | `""` | | -| platformBackend.tracing.endpoint | string | `""` | | ## Playground @@ -978,7 +976,6 @@ For information on how to use this chart, up-to-date release notes, and other gu | playground.serviceAccount.create | bool | `true` | | | playground.serviceAccount.labels | object | `{}` | | | playground.serviceAccount.name | string | `""` | | -| playground.tracing.endpoint | string | `""` | | ## Postgres @@ -1121,7 +1118,6 @@ For information on how to use this chart, up-to-date release notes, and other gu | queue.serviceAccount.create | bool | `true` | | | queue.serviceAccount.labels | object | `{}` | | | queue.serviceAccount.name | string | `""` | | -| queue.tracing.endpoint | string | `""` | | ## Redis diff --git a/charts/langsmith/ci/telemetry-config-values.yaml b/charts/langsmith/ci/telemetry-config-values.yaml new file mode 100644 index 00000000..551ba066 --- /dev/null +++ b/charts/langsmith/ci/telemetry-config-values.yaml @@ -0,0 +1,89 @@ +# Lightweight configuration with telemetry enabled. Only use this if you are running Langsmith in a development environment. +config: + langsmithLicenseKey: "YOUR_LICENSE_KEY" + apiKeySalt: "YOUR_API_KEY_SALT" + authType: "mixed" + basicAuth: + enabled: true + initialOrgAdminEmail: "youremail@corp.dev" + initialOrgAdminPassword: "TestLangSmith123!" + jwtSecret: "YOUR_JWT_SECRET" + + observability: + tracing: + enabled: true + endpoint: "YOUR_COLLECTOR_ENDPOINT" + env: "ls_self_hosted" + exporter: "http" + useTls: true + +# Note, you likely should tweak the values to match something that fits your local development environment. +aceBackend: + deployment: + resources: + requests: + cpu: 100m + memory: 500Mi + +backend: + deployment: + resources: + requests: + cpu: 100m + memory: 500Mi + +frontend: + deployment: + resources: + requests: + cpu: 100m + memory: 500Mi + +platformBackend: + deployment: + resources: + requests: + cpu: 100m + memory: 500Mi + +playground: + deployment: + resources: + requests: + cpu: 100m + memory: 500Mi + +queue: + replicas: 1 + deployment: + resources: + requests: + cpu: 100m + memory: 500Mi + +postgres: + metrics: + enabled: true + statefulSet: + resources: + requests: + cpu: 200m + memory: 500Mi + +redis: + metrics: + enabled: true + statefulSet: + resources: + requests: + cpu: 200m + memory: 500Mi + +clickhouse: + metrics: + enabled: true + statefulSet: + resources: + requests: + cpu: 200m + memory: 500Mi diff --git a/charts/langsmith/templates/_helpers.tpl b/charts/langsmith/templates/_helpers.tpl index 41b2af91..5be9d3be 100644 --- a/charts/langsmith/templates/_helpers.tpl +++ b/charts/langsmith/templates/_helpers.tpl @@ -628,81 +628,4 @@ Creates the image reference used for Langsmith deployments. If registry is speci {{- else -}} {{ $imageConfig.repository }}:{{ $imageConfig.tag | default .Chart.AppVersion }} {{- end -}} -{{- end -}} - -{{/* -Returns the OTEL tracing envrironment variables. -*/}} -{{- define "langsmith.sharedTracingEnvVars" -}} -{{- if .Values.config.observability.tracing.enabled }} -- name: OTEL_TRACING_ENABLED - value: {{ .Values.config.observability.tracing.enabled | quote }} -- name: OTEL_ENVIRONMENT - value: {{ .Values.config.observability.tracing.env | quote }} -- name: OTEL_EXPORTER - value: {{ .Values.config.observability.tracing.exporter | quote }} -- name: OTEL_USE_TLS - value: {{ .Values.config.observability.tracing.useTls | quote }} -{{- end }} -{{- end }} - - -{{/* -Returns the OTEL tracing environment variables for platform-backend. -*/}} -{{- define "langsmith.platformBackendOtelTracingEnvVars" -}} -{{- if .Values.config.observability.tracing.enabled }} -{{- include "langsmith.sharedTracingEnvVars" . | nindent 0 }} -- name: OTLP_ENDPOINT - {{- if .Values.platformBackend.tracing.endpoint }} - value: {{ .Values.platformBackend.tracing.endpoint }} - {{- else }} - value: {{ .Values.config.observability.tracing.endpoint }} - {{- end }} -{{- end }} -{{- end }} - -{{/* -Returns the OTEL tracing environment variables for backend. -*/}} -{{- define "langsmith.backendOtelTracingEnvVars" -}} -{{- if .Values.config.observability.tracing.enabled }} -{{- include "langsmith.sharedTracingEnvVars" . | nindent 0 }} -- name: OTLP_ENDPOINT - {{- if .Values.backend.tracing.endpoint }} - value: {{ .Values.backend.tracing.endpoint }} - {{- else }} - value: {{ .Values.config.observability.tracing.endpoint }} - {{- end }} -{{- end }} -{{- end }} - -{{/* -Returns the OTEL tracing environment variables for playground. -*/}} -{{- define "langsmith.playgroundOtelTracingEnvVars" -}} -{{- if .Values.config.observability.tracing.enabled }} -{{- include "langsmith.sharedTracingEnvVars" . | nindent 0 }} -- name: OTLP_ENDPOINT - {{- if .Values.playground.tracing.endpoint }} - value: {{ .Values.playground.tracing.endpoint }} - {{- else }} - value: {{ .Values.config.observability.tracing.endpoint }} - {{- end }} -{{- end }} -{{- end }} - -{{/* -Returns the OTEL tracing environment variables for queue. -*/}} -{{- define "langsmith.queueOtelTracingEnvVars" -}} -{{- if .Values.config.observability.tracing.enabled }} -{{- include "langsmith.sharedTracingEnvVars" . | nindent 0 }} -- name: OTLP_ENDPOINT - {{- if .Values.queue.tracing.endpoint }} - value: {{ .Values.queue.tracing.endpoint }} - {{- else }} - value: {{ .Values.config.observability.tracing.endpoint }} - {{- end }} -{{- end }} -{{- end }} \ No newline at end of file +{{- end -}} \ No newline at end of file diff --git a/charts/langsmith/templates/backend/deployment.yaml b/charts/langsmith/templates/backend/deployment.yaml index 3ae6f1b0..b6bc4cd4 100644 --- a/charts/langsmith/templates/backend/deployment.yaml +++ b/charts/langsmith/templates/backend/deployment.yaml @@ -7,7 +7,6 @@ {{- end }} {{- end -}} {{- $envVars := concat .Values.commonEnv (include "langsmith.commonEnv" . | fromYamlArray) (include "backendEnvVars" . | fromYamlArray) .Values.backend.deployment.extraEnv -}} -{{- $envVars := concat $envVars (include "langsmith.backendOtelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment diff --git a/charts/langsmith/templates/config-map.yaml b/charts/langsmith/templates/config-map.yaml index 050a2be6..80c5f8a4 100644 --- a/charts/langsmith/templates/config-map.yaml +++ b/charts/langsmith/templates/config-map.yaml @@ -33,3 +33,10 @@ data: SMITH_BACKEND_ENDPOINT: "http://{{ include "langsmith.fullname" . }}-{{.Values.backend.name}}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.backend.service.port }}" HOST_BACKEND_ENDPOINT: "http://{{ include "langsmith.fullname" . }}-{{.Values.hostBackend.name}}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.hostBackend.service.port }}" FF_RUN_STATS_GROUP_BY_ENABLED_ALL: "true" + {{- if .Values.config.observability.tracing.enabled }} + OTEL_TRACING_ENABLED: {{ .Values.config.observability.tracing.enabled }} + OTLP_ENDPOINT: "http://{{ .Values.config.observability.tracing.endpoint }}" + OTEL_ENVIRONMENT: "{{ .Values.config.observability.tracing.env }}" + OTEL_EXPORTER: "{{ .Values.config.observability.tracing.exporter }}" + OTLE_USE_TLS: {{ .Values.config.observability.tracing.useTls }} + {{- end }} diff --git a/charts/langsmith/templates/platform-backend/deployment.yaml b/charts/langsmith/templates/platform-backend/deployment.yaml index a0ca37e6..29434f3a 100644 --- a/charts/langsmith/templates/platform-backend/deployment.yaml +++ b/charts/langsmith/templates/platform-backend/deployment.yaml @@ -7,7 +7,6 @@ {{- end }} {{- end -}} {{- $envVars := concat .Values.commonEnv (include "langsmith.commonEnv" . | fromYamlArray) (include "platformBackendEnvVars" . | fromYamlArray) .Values.platformBackend.deployment.extraEnv -}} -{{- $envVars := concat $envVars (include "langsmith.platformBackendOtelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment diff --git a/charts/langsmith/templates/playground/deployment.yaml b/charts/langsmith/templates/playground/deployment.yaml index 98d3d31c..c59c6c0f 100644 --- a/charts/langsmith/templates/playground/deployment.yaml +++ b/charts/langsmith/templates/playground/deployment.yaml @@ -5,7 +5,6 @@ value: {{ .Values.config.logLevel | quote }} {{- end -}} {{- $envVars := concat (include "playgroundEnvVars" . | fromYamlArray) .Values.playground.deployment.extraEnv -}} -{{- $envVars := concat $envVars (include "langsmith.playgroundOtelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment diff --git a/charts/langsmith/templates/queue/deployment.yaml b/charts/langsmith/templates/queue/deployment.yaml index f74e502c..e5338c5b 100644 --- a/charts/langsmith/templates/queue/deployment.yaml +++ b/charts/langsmith/templates/queue/deployment.yaml @@ -5,7 +5,6 @@ value: "3" {{- end -}} {{- $envVars := concat .Values.commonEnv (include "langsmith.commonEnv" . | fromYamlArray) (include "queueEnvVars" . | fromYamlArray) .Values.queue.deployment.extraEnv -}} -{{- $envVars := concat $envVars (include "langsmith.queueOtelTracingEnvVars" . | fromYamlArray) -}} {{- include "langsmith.detectDuplicates" $envVars -}} apiVersion: apps/v1 kind: Deployment diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 75bd71e6..358911c7 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -446,8 +446,6 @@ backend: name: "" labels: {} annotations: {} - tracing: - endpoint: "" clickhouse: name: "clickhouse" @@ -557,7 +555,7 @@ clickhouse: labels: {} annotations: {} metrics: - enabled: false + enabled: true port: 9363 e2eTest: @@ -1033,8 +1031,6 @@ platformBackend: name: "" labels: {} annotations: {} - tracing: - endpoint: "" operator: name: "operator" @@ -1224,8 +1220,6 @@ playground: name: "" labels: {} annotations: {} - tracing: - endpoint: "" postgres: name: "postgres" @@ -1409,8 +1403,6 @@ queue: name: "" labels: {} annotations: {} - tracing: - endpoint: "" redis: name: "redis" From 21dcc7466bf2e019291254fbd07088b6ff59d8a0 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Wed, 18 Jun 2025 19:49:31 -0700 Subject: [PATCH 11/27] review comments p2 --- charts/langsmith/README.md | 18 ------------ .../langsmith/templates/postgres/service.yaml | 6 ---- .../templates/postgres/stateful-set.yaml | 10 ------- charts/langsmith/templates/redis/service.yaml | 6 ---- .../templates/redis/stateful-set.yaml | 10 ------- charts/langsmith/values.yaml | 29 ------------------- 6 files changed, 79 deletions(-) diff --git a/charts/langsmith/README.md b/charts/langsmith/README.md index 57e6a084..99460a37 100644 --- a/charts/langsmith/README.md +++ b/charts/langsmith/README.md @@ -992,15 +992,6 @@ For information on how to use this chart, up-to-date release notes, and other gu | postgres.external.port | string | `"5432"` | | | postgres.external.schema | string | `"public"` | | | postgres.external.user | string | `"postgres"` | | -| postgres.metrics.containerPort | int | `9187` | | -| postgres.metrics.enabled | bool | `false` | | -| postgres.metrics.image.pullPolicy | string | `"IfNotPresent"` | | -| postgres.metrics.image.repository | string | `"prometheuscommunity/postgres-exporter"` | | -| postgres.metrics.image.tag | string | `"v0.17.1"` | | -| postgres.metrics.resources.limits.cpu | string | `"100m"` | | -| postgres.metrics.resources.limits.memory | string | `"128Mi"` | | -| postgres.metrics.resources.requests.cpu | string | `"100m"` | | -| postgres.metrics.resources.requests.memory | string | `"128Mi"` | | | postgres.name | string | `"postgres"` | | | postgres.pdb.annotations | object | `{}` | | | postgres.pdb.enabled | bool | `false` | | @@ -1128,15 +1119,6 @@ For information on how to use this chart, up-to-date release notes, and other gu | redis.external.connectionUrlSecretKey | string | `"connection_url"` | | | redis.external.enabled | bool | `false` | | | redis.external.existingSecretName | string | `""` | | -| redis.metrics.containerPort | int | `9121` | | -| redis.metrics.enabled | bool | `false` | | -| redis.metrics.image.pullPolicy | string | `"IfNotPresent"` | | -| redis.metrics.image.repository | string | `"oliver006/redis_exporter"` | | -| redis.metrics.image.tag | string | `"v1.74.0"` | | -| redis.metrics.resources.limits.cpu | string | `"100m"` | | -| redis.metrics.resources.limits.memory | string | `"128Mi"` | | -| redis.metrics.resources.requests.cpu | string | `"100m"` | | -| redis.metrics.resources.requests.memory | string | `"128Mi"` | | | redis.name | string | `"redis"` | | | redis.pdb.annotations | object | `{}` | | | redis.pdb.enabled | bool | `false` | | diff --git a/charts/langsmith/templates/postgres/service.yaml b/charts/langsmith/templates/postgres/service.yaml index 5f38d8d0..0f8f8748 100644 --- a/charts/langsmith/templates/postgres/service.yaml +++ b/charts/langsmith/templates/postgres/service.yaml @@ -25,12 +25,6 @@ spec: port: {{ .Values.postgres.service.port }} targetPort: postgres protocol: TCP - {{- if .Values.postgres.metrics.enabled }} - - name: postgres-metrics - port: {{ .Values.postgres.metrics.containerPort }} - targetPort: {{ .Values.postgres.metrics.containerPort }} - protocol: TCP - {{- end }} selector: {{- include "langsmith.selectorLabels" . | nindent 4 }} app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.postgres.name }} diff --git a/charts/langsmith/templates/postgres/stateful-set.yaml b/charts/langsmith/templates/postgres/stateful-set.yaml index 8886f3a7..cf0a0c43 100644 --- a/charts/langsmith/templates/postgres/stateful-set.yaml +++ b/charts/langsmith/templates/postgres/stateful-set.yaml @@ -112,16 +112,6 @@ spec: {{- with .Values.postgres.statefulSet.sidecars }} {{- toYaml . | nindent 8 }} {{- end }} - {{- if .Values.postgres.metrics.enabled }} - - name: postgres-metrics-exporter - image: {{ .Values.postgres.metrics.image.repository }}:{{ .Values.postgres.metrics.image.tag }} - imagePullPolicy: {{ .Values.postgres.metrics.image.pullPolicy }} - ports: - - name: pg-metrics - containerPort: {{ .Values.postgres.metrics.containerPort }} - resources: - {{- toYaml .Values.postgres.metrics.resources | nindent 12 }} - {{- end }} {{- with .Values.postgres.statefulSet.nodeSelector }} nodeSelector: {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/redis/service.yaml b/charts/langsmith/templates/redis/service.yaml index 53e6a5c5..b26a9db0 100644 --- a/charts/langsmith/templates/redis/service.yaml +++ b/charts/langsmith/templates/redis/service.yaml @@ -25,12 +25,6 @@ spec: port: {{ .Values.redis.service.port }} targetPort: redis protocol: TCP - {{- if .Values.redis.metrics.enabled }} - - name: redis-metrics - port: {{ .Values.redis.metrics.containerPort }} - targetPort: {{ .Values.redis.metrics.containerPort }} - protocol: TCP - {{- end }} selector: {{- include "langsmith.selectorLabels" . | nindent 4 }} app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.redis.name }} diff --git a/charts/langsmith/templates/redis/stateful-set.yaml b/charts/langsmith/templates/redis/stateful-set.yaml index 139a4118..26c59035 100644 --- a/charts/langsmith/templates/redis/stateful-set.yaml +++ b/charts/langsmith/templates/redis/stateful-set.yaml @@ -93,16 +93,6 @@ spec: {{- toYaml . | nindent 12 }} {{- end }} {{- end }} - {{- if .Values.redis.metrics.enabled }} - - name: redis-metrics-exporter - image: {{ .Values.redis.metrics.image.repository }}:{{ .Values.redis.metrics.image.tag }} - imagePullPolicy: {{ .Values.redis.metrics.image.pullPolicy }} - ports: - - name: redis-metrics - containerPort: {{ .Values.redis.metrics.containerPort }} - resources: - {{- toYaml .Values.redis.metrics.resources | nindent 12 }} - {{- end }} {{- with .Values.redis.statefulSet.extraContainerConfig }} {{- toYaml . | nindent 10 }} {{- end }} diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 358911c7..b24b8fb9 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -1312,20 +1312,6 @@ postgres: name: "" labels: {} annotations: {} - metrics: - enabled: false - image: - repository: prometheuscommunity/postgres-exporter - tag: v0.17.1 - pullPolicy: IfNotPresent - containerPort: 9187 - resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 100m - memory: 128Mi queue: name: "queue" @@ -1487,21 +1473,6 @@ redis: name: "" labels: {} annotations: {} - metrics: - enabled: false - image: - repository: oliver006/redis_exporter - tag: v1.74.0 - pullPolicy: IfNotPresent - containerPort: 9121 - resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 100m - memory: 128Mi - quickwit: name: quickwit From d205dd44dc6728e24df76e888f0692b9a159798b Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Wed, 18 Jun 2025 19:50:35 -0700 Subject: [PATCH 12/27] lint --- charts/langsmith/ci/telemetry-config-values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/langsmith/ci/telemetry-config-values.yaml b/charts/langsmith/ci/telemetry-config-values.yaml index 551ba066..83423af7 100644 --- a/charts/langsmith/ci/telemetry-config-values.yaml +++ b/charts/langsmith/ci/telemetry-config-values.yaml @@ -8,7 +8,7 @@ config: initialOrgAdminEmail: "youremail@corp.dev" initialOrgAdminPassword: "TestLangSmith123!" jwtSecret: "YOUR_JWT_SECRET" - + observability: tracing: enabled: true From 9d6d3f5575462b3c74e81c0701dd6e1bfa38b411 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Fri, 20 Jun 2025 10:37:56 -0700 Subject: [PATCH 13/27] metrics exporters --- charts/langsmith-observability/Chart.lock | 16 +++- charts/langsmith-observability/Chart.yaml | 28 +++++- .../charts/kube-state-metrics-5.37.0.tgz | Bin 0 -> 15422 bytes .../prometheus-nginx-exporter-1.6.0.tgz | Bin 0 -> 58441 bytes .../prometheus-postgres-exporter-6.10.2.tgz | Bin 0 -> 9687 bytes .../prometheus-redis-exporter-6.11.0.tgz | Bin 0 -> 8913 bytes .../examples/metric-exporters-only.yaml | 24 ++++++ .../templates/otel/gateway.yaml | 14 +-- .../templates/otel/logs-sidecar.yaml | 2 +- .../templates/otel/rbac-gateway.yaml | 2 +- .../templates/otel/rbac-sidecar.yaml | 2 +- charts/langsmith-observability/values.yaml | 81 ++++++++++++------ charts/langsmith/values.yaml | 21 +++-- 13 files changed, 141 insertions(+), 49 deletions(-) create mode 100644 charts/langsmith-observability/charts/kube-state-metrics-5.37.0.tgz create mode 100644 charts/langsmith-observability/charts/prometheus-nginx-exporter-1.6.0.tgz create mode 100644 charts/langsmith-observability/charts/prometheus-postgres-exporter-6.10.2.tgz create mode 100644 charts/langsmith-observability/charts/prometheus-redis-exporter-6.11.0.tgz create mode 100644 charts/langsmith-observability/examples/metric-exporters-only.yaml diff --git a/charts/langsmith-observability/Chart.lock b/charts/langsmith-observability/Chart.lock index 191a932d..b9df41b7 100644 --- a/charts/langsmith-observability/Chart.lock +++ b/charts/langsmith-observability/Chart.lock @@ -1,4 +1,16 @@ dependencies: +- name: prometheus-postgres-exporter + repository: https://prometheus-community.github.io/helm-charts + version: 6.10.2 +- name: prometheus-redis-exporter + repository: https://prometheus-community.github.io/helm-charts + version: 6.11.0 +- name: prometheus-nginx-exporter + repository: https://prometheus-community.github.io/helm-charts + version: 1.6.0 +- name: kube-state-metrics + repository: https://prometheus-community.github.io/helm-charts + version: 5.37.0 - name: grafana repository: https://grafana.github.io/helm-charts version: 9.2.6 @@ -14,5 +26,5 @@ dependencies: - name: tempo-distributed repository: https://grafana.github.io/helm-charts version: 1.41.1 -digest: sha256:04afd5846b32979e71b89b33879de13c9104572ba2c4374b47f975e4f7e8b6d4 -generated: "2025-06-18T14:20:23.094864-07:00" +digest: sha256:0651218d9582068aafcabffbcd9cca92cb61b36ceb46f387e68b8bf2ace30cb4 +generated: "2025-06-20T08:49:15.500046-07:00" diff --git a/charts/langsmith-observability/Chart.yaml b/charts/langsmith-observability/Chart.yaml index 2ecb325f..338ccf68 100644 --- a/charts/langsmith-observability/Chart.yaml +++ b/charts/langsmith-observability/Chart.yaml @@ -8,6 +8,28 @@ type: application version: 0.1.0 appVersion: "0.1.0" dependencies: + # Prometheus Exporters + - name: prometheus-postgres-exporter + version: 6.10.2 + repository: https://prometheus-community.github.io/helm-charts + condition: postgresexporter.enabled + alias: postgresexporter + - name: prometheus-redis-exporter + version: 6.11.0 + repository: https://prometheus-community.github.io/helm-charts + condition: redisexporter.enabled + alias: redisexporter + - name: prometheus-nginx-exporter + version: 1.6.0 + repository: https://prometheus-community.github.io/helm-charts + condition: nginxexporter.enabled + alias: nginxexporter + - name: kube-state-metrics + version: 5.37.0 + repository: https://prometheus-community.github.io/helm-charts + condition: kubestatemetrics.enabled + alias: kubestatemetrics + # LGTM Stack - name: grafana version: 9.2.6 repository: https://grafana.github.io/helm-charts @@ -15,7 +37,7 @@ dependencies: - name: loki version: 6.30.1 repository: https://grafana.github.io/helm-charts - condition: config.logs.enabled + condition: loki.enabled - name: minio version: 16.0.10 repository: https://charts.bitnami.com/bitnami @@ -23,10 +45,10 @@ dependencies: - name: mimir-distributed version: 5.7.0 repository: https://grafana.github.io/helm-charts - condition: config.metrics.enabled + condition: mimir.enabled alias: mimir - name: tempo-distributed version: 1.41.1 repository: https://grafana.github.io/helm-charts - condition: config.traces.enabled + condition: tempo.enabled alias: tempo \ No newline at end of file diff --git a/charts/langsmith-observability/charts/kube-state-metrics-5.37.0.tgz b/charts/langsmith-observability/charts/kube-state-metrics-5.37.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..216e6b24b2404a138bbab8846c498f03480e678d GIT binary patch literal 15422 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 literal 0 HcmV?d00001 diff --git a/charts/langsmith-observability/charts/prometheus-nginx-exporter-1.6.0.tgz b/charts/langsmith-observability/charts/prometheus-nginx-exporter-1.6.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d1b4095be5cef2e8e2e393a6e2fa7fdbd1289724 GIT binary patch literal 58441 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

4za-81 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 S>;DG;0RR6=?q8b#egy!UV%`G) literal 0 HcmV?d00001 diff --git a/charts/langsmith-observability/charts/prometheus-postgres-exporter-6.10.2.tgz b/charts/langsmith-observability/charts/prometheus-postgres-exporter-6.10.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..58358c4922c69322186246e9960934cdc5fbf3e0 GIT binary patch literal 9687 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 Zd>)_2=g;^2{{R30|No5=Lu>%Z004Cq{`&v` literal 0 HcmV?d00001 diff --git a/charts/langsmith-observability/charts/prometheus-redis-exporter-6.11.0.tgz b/charts/langsmith-observability/charts/prometheus-redis-exporter-6.11.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..fbeb406b4b2a833f692257285bbdb6dbc1bbf95f GIT binary patch literal 8913 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 literal 0 HcmV?d00001 diff --git a/charts/langsmith-observability/examples/metric-exporters-only.yaml b/charts/langsmith-observability/examples/metric-exporters-only.yaml new file mode 100644 index 00000000..279feeca --- /dev/null +++ b/charts/langsmith-observability/examples/metric-exporters-only.yaml @@ -0,0 +1,24 @@ +# This configuration is to deploy all of the Prometheus Exporters, but not the LGTM Stack or OTEL collector. +# Use this if you already have a collector and just want to scrape all metrics + +kubestatemetrics: + enabled: true + namespaces: "langsmith" + +postgresexporter: + enabled: true + config: + datasource: + host: langsmith-postgres.langsmith.svc.cluster.local + user: postgres + password: password + database: postgres + port: "5432" + +nginxexporter: + enabled: true + nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:8080/nginx_status" + +redisexporter: + enabled: true + redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml index df064338..df622b72 100644 --- a/charts/langsmith-observability/templates/otel/gateway.yaml +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -1,4 +1,4 @@ -{{- if or .Values.config.metrics.enabled .Values.config.traces.enabled }} +{{- if or .Values.opentelemetryCollector.metrics.enabled .Values.opentelemetryCollector.traces.enabled }} apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: @@ -9,7 +9,7 @@ spec: config: receivers: - {{ if .Values.config.metrics.enabled }} + {{ if .Values.opentelemetryCollector.metrics.enabled }} prometheus: config: scrape_configs: @@ -57,7 +57,7 @@ spec: target_label: instance {{- end }} {{ end }} - {{- if .Values.config.traces.enabled }} + {{- if .Values.opentelemetryCollector.traces.enabled }} otlp: protocols: grpc: @@ -76,11 +76,11 @@ spec: spike_limit_percentage: 80 exporters: - {{ if .Values.config.metrics.enabled }} + {{ if .Values.opentelemetryCollector.metrics.enabled }} otlphttp/metrics: endpoint: http://{{ .Release.Name }}-mimir-nginx.{{ .Release.Namespace }}.svc.cluster.local:80/otlp {{ end }} - {{ if .Values.config.traces.enabled }} + {{ if .Values.opentelemetryCollector.traces.enabled }} otlphttp/traces: endpoint: http://langsmith-observability-tempo-distributor-discovery.romain-observability.svc.cluster.local:4318 {{ end }} @@ -90,13 +90,13 @@ spec: logs: level: debug pipelines: - {{ if .Values.config.metrics.enabled }} + {{ if .Values.opentelemetryCollector.metrics.enabled }} metrics/langsmith: receivers: [prometheus] processors: [batch, memory_limiter] exporters: [otlphttp/metrics] {{ end }} - {{ if .Values.config.traces.enabled }} + {{ if .Values.opentelemetryCollector.traces.enabled }} traces/langsmith: receivers: [otlp] processors: [batch, memory_limiter] diff --git a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml index 042c8c18..9b2b86ef 100644 --- a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml @@ -1,4 +1,4 @@ -{{- if .Values.config.logs.enabled }} +{{- if .Values.opentelemetryCollector.logs.enabled }} apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml index 50c353cd..ef433411 100644 --- a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -1,4 +1,4 @@ -{{- if .Values.config.metrics.enabled }} +{{- if .Values.opentelemetryCollector.metrics.enabled }} apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: diff --git a/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml index 22651a4b..8f63191f 100644 --- a/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml @@ -1,4 +1,4 @@ -{{- if .Values.config.logs.enabled }} +{{- if .Values.opentelemetryCollector.logs.enabled }} {{- $namespace := .Values.langsmithNamespace }} apiVersion: rbac.authorization.k8s.io/v1 kind: Role diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index 0b1cd1cf..d4fd6766 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -1,16 +1,10 @@ -releaseName: "langsmith-observability" langsmithNamespace: "romain" -langSmithReleaseName: "langsmith" -config: - logs: - enabled: true - metrics: - enabled: true - traces: - enabled: true +langSmithReleaseName: "langsmith" +# Values for Grafana: https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml grafana: + enabled: false datasources: datasources.yaml: apiVersion: 1 @@ -39,7 +33,16 @@ grafana: serviceMap: datasourceUid: prom +# Values for Kube State Metrics: https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-state-metrics/values.yaml +kubestatemetrics: + enabled: true + service: + type: ClusterIP + port: 8080 + +# Values for Loki: https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml loki: + enabled: false deploymentMode: Distributed loki: auth_enabled: false # This just drops tenant based authentication header, and all logs are under tenant "fake" @@ -122,7 +125,9 @@ loki: singleBinary: replicas: 0 +# Values for Mimir: https://github.com/grafana/mimir/blob/main/operations/helm/charts/mimir-distributed/values.yaml mimir: + enabled: false minio: enabled: false mimir: @@ -149,8 +154,9 @@ mimir: s3: bucket_name: mimir-ruler +# Values for Minio: https://github.com/bitnami/charts/blob/main/bitnami/minio/values.yaml minio: - enabled: true + enabled: false mode: standalone replicas: 1 persistence: @@ -163,6 +169,15 @@ minio: rootPassword: "admin_password" defaultBuckets: "loki-chunks, mimir-blocks, mimir-ruler, mimir-alertmanager, tempo" +# Values for the Nginx Exporter: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-nginx-exporter/values.yaml +nginxExporter: + enabled: true + service: + type: ClusterIP + port: 9113 + nginxServer: "http://langsmith-frontend.romain.svc.cluster.local:8080/nginx_status" + + opentelemetryCollector: name: "langsmith-collector" image: @@ -179,24 +194,40 @@ opentelemetryCollector: - "langsmith-postgres" - "langsmith-queue" - "langsmith-redis" - + + logs: + enabled: false metrics: - langsmith: - enabled: true - redis: - enabled: true - serviceName: "" - portName: "" - postgres: - enabled: true - serviceName: "" - portName: "" - clickhouse: - enabled: true - serviceName: "" - portName: "" + enabled: false + traces: + enabled: false +# Values for the Postgres Exporter: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-postgres-exporter/values.yaml +postgresexporter: + enabled: true + service: + type: ClusterIP + port: 80 + targetPort: 9187 + config: + datasource: + host: langsmith-postgres.romain.svc.cluster.local + user: postgres + password: password + database: postgres + port: "5432" + +# Values for the Redis Exporter: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-redis-exporter/values.yaml +redisexporter: + enabled: true + service: + type: ClusterIP + port: 9121 + redisAddress: langsmith-redis.romain.svc.cluster.local:6379 + +# Values for Tempo: https://github.com/grafana/helm-charts/blob/main/charts/tempo-distributed/values.yaml tempo: + enabled: false storage: trace: backend: s3 diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 2f6f6366..1cd0954c 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -19,19 +19,19 @@ images: aceBackendImage: repository: "docker.io/langchain/langsmith-ace-backend" pullPolicy: IfNotPresent - tag: "0.10.74" + tag: "0.10.83" backendImage: repository: "docker.io/langchain/langsmith-backend" pullPolicy: IfNotPresent - tag: "0.10.74" + tag: "0.10.83" frontendImage: repository: "docker.io/langchain/langsmith-frontend" pullPolicy: IfNotPresent - tag: "0.10.74" + tag: "0.10.83" hostBackendImage: repository: "docker.io/langchain/hosted-langserve-backend" pullPolicy: IfNotPresent - tag: "0.10.74" + tag: "0.10.83" operatorImage: repository: "docker.io/langchain/langgraph-operator" pullPolicy: IfNotPresent @@ -39,11 +39,11 @@ images: platformBackendImage: repository: "docker.io/langchain/langsmith-go-backend" pullPolicy: IfNotPresent - tag: "0.10.74" + tag: "0.10.83" playgroundImage: repository: "docker.io/langchain/langsmith-playground" pullPolicy: IfNotPresent - tag: "0.10.74" + tag: "0.10.83" postgresImage: repository: "docker.io/postgres" pullPolicy: IfNotPresent @@ -88,7 +88,7 @@ config: # -- Must be 'oauth' for OAuth with PKCE, 'mixed' for basic auth or OAuth without PKCE authType: "" basicAuth: - enabled: false + enabled: true initialOrgAdminEmail: "" # Either set the password and JWT secret in plaintext, or set in the secret specified by existingSecretName above. initialOrgAdminPassword: "" @@ -172,6 +172,10 @@ config: coBrandingEnabled: true observability: + collector: + enabled: false + namespace: "langsmith-observability" + name: "langsmith-observability-collector" tracing: enabled: false endpoint: "" @@ -1404,8 +1408,7 @@ redis: labels: {} annotations: {} podSecurityContext: {} - securityContext: {} - # In a production environment, we strongly recommend an external Redis database. + securityContext: {} resources: limits: cpu: 4000m From 65244b2797a1f2206f0954f336a8c7367d612fd9 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Fri, 20 Jun 2025 16:32:27 -0700 Subject: [PATCH 14/27] lots of progress. S3 access working too --- .../examples/e2e-stack-minio.yaml | 89 +++++++++++++ .../examples/e2e-stack-s3.yaml | 117 ++++++++++++++++++ .../examples/metric-exporters-only.yaml | 18 +-- .../templates/_helpers.tpl | 14 +-- .../templates/otel/gateway.yaml | 28 ++--- .../templates/otel/logs-sidecar.yaml | 6 +- .../templates/otel/rbac-gateway.yaml | 4 +- .../templates/otel/rbac-sidecar.yaml | 4 +- charts/langsmith-observability/values.yaml | 89 ++++++++----- charts/langsmith/templates/_helpers.tpl | 4 +- charts/langsmith/templates/config-map.yaml | 4 +- .../templates/frontend/config-map.yaml | 22 ++++ charts/langsmith/values.yaml | 4 +- 13 files changed, 330 insertions(+), 73 deletions(-) create mode 100644 charts/langsmith-observability/examples/e2e-stack-minio.yaml create mode 100644 charts/langsmith-observability/examples/e2e-stack-s3.yaml diff --git a/charts/langsmith-observability/examples/e2e-stack-minio.yaml b/charts/langsmith-observability/examples/e2e-stack-minio.yaml new file mode 100644 index 00000000..bcebc66d --- /dev/null +++ b/charts/langsmith-observability/examples/e2e-stack-minio.yaml @@ -0,0 +1,89 @@ +# Use this configuration to deploy the full LangSmith observability stack with in-cluster storage. +# You can disable parts as you see fit, such as exporters, or logs/metrics/traces. +# NOTE: This configuration is not recommended for production environments. + +# ======================== OTEL Collector ======================== +otelCollector: + logs: + enabled: true + metrics: + enabled: true + traces: + enabled: true + +# ======================== Minio ======================== +minio: + enabled: true + persistence: + enabled: true + size: 10Gi + auth: + rootUser: "admin" + rootPassword: "admin_password" + +# ======================== LGTM Stack ======================== + +# Telemetry visualization tool +grafana: + enabled: true + +# Logging storage + retrieval +loki: + enabled: true + loki: + storage: + s3: + endpoint: langsmith-observability-minio.langsmith.svc.cluster.local:9000 # Modify to match the correct release and namespace + secret_access_key: admin_password # This must match the rootPassword in the minio chart + access_key_id: admin # This must match the rootUser in the minio chart + +# Metrics storage + retrieval +mimir: + enabled: true + mimir: + structuredConfig: + common: + storage: + s3: + endpoint: langsmith-observability-minio.langsmith.svc.cluster.local:9000 # Modify to match the correct release and namespace + secret_access_key: admin_password # This must match the rootPassword in the minio chart + access_key_id: admin # This must match the rootUser in the minio chart + +# Traces storage + retrieval +tempo: + enabled: true + storage: + trace: + backend: s3 + s3: + endpoint: langsmith-observability-minio.langsmith.svc.cluster.local:9000 # Modify to match the correct release and namespace + secret_access_key: admin_password # This must match the rootPassword in the minio chart + access_key_id: admin # This must match the rootUser in the minio chart + +# ======================== Metrics Exporters ======================== + +kubestatemetrics: + enabled: true + # Change this value to match your LangSmith namespace. + namespaces: "langsmith" + +postgresexporter: + enabled: true + config: + # Change these values to match your Postgres instance. + datasource: + host: langsmith-postgres.langsmith.svc.cluster.local + user: postgres + password: postgres + database: postgres + port: "5432" + +nginxexporter: + enabled: true + # Change this value to match your LangSmith frontend service. + nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" + +redisexporter: + enabled: true + # Change this value to match your Redis instance. + redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 \ No newline at end of file diff --git a/charts/langsmith-observability/examples/e2e-stack-s3.yaml b/charts/langsmith-observability/examples/e2e-stack-s3.yaml new file mode 100644 index 00000000..ac51a7a7 --- /dev/null +++ b/charts/langsmith-observability/examples/e2e-stack-s3.yaml @@ -0,0 +1,117 @@ +# Use this configuration to deploy the full LangSmith observability stack with in-cluster storage. +# You can disable parts as you see fit, such as exporters, or logs/metrics/traces. +# NOTE: This configuration is not recommended for production environments. + +langSmithReleaseName: "langsmith" +langSmithNamespace: "langsmith" + +# ======================== OTEL Collector ======================== +otelCollector: + logs: + enabled: true + metrics: + enabled: true + traces: + enabled: true + +# ======================== LGTM Stack ======================== + +# Telemetry visualization tool +grafana: + enabled: true + +# Logging storage + retrieval +loki: + enabled: true + loki: + storage: + type: s3 + # Modify these values do match your S3 bucket. + bucketNames: + chunks: langsmith-lgtm-stack + ruler: langsmith-lgtm-stack + s3: + endpoint: s3.${REGION}.amazonaws.com + region: ${REGION} + secretAccessKey: ${YOUR_SECRET_ACCESS_KEY} + accessKeyId: ${YOUR_ACCESS_KEY_ID} + insecure: false + s3ForcePathStyle: false + + storage_config: + object_prefix: loki + aws: + region: ${REGION} + bucketnames: ${YOUR_BUCKET} + s3forcepathstyle: false + +# Metrics storage + retrieval +mimir: + enabled: true + mimir: + structuredConfig: + common: + # Modify these values do match your S3 bucket. + storage: + backend: s3 + s3: + endpoint: s3.${REGION}.amazonaws.com + bucket_name: ${YOUR_BUCKET} + region: ${REGION} + secret_access_key: ${YOUR_SECRET_ACCESS_KEY} + access_key_id: ${YOUR_ACCESS_KEY_ID} + insecure: false + s3forcepathstyle: false + + blocks_storage: + storage_prefix: mimirBlocks + + alertmanager_storage: + storage_prefix: mimirAlertmanager + + ruler_storage: + storage_prefix: mimirRuler + +# Traces storage + retrieval +tempo: + enabled: true + storage: + trace: + backend: s3 + s3: + # Modify these values do match your S3 bucket. + access_key: ${YOUR_ACCESS_KEY_ID} + secret_key: ${YOUR_SECRET_ACCESS_KEY} + bucket: ${YOUR_BUCKET} + endpoint: s3.${REGION}.amazonaws.com + insecure: false + prefix: tempo + s3forcepathstyle: false + +# ======================== Metrics Exporters ======================== + +kubestatemetrics: + enabled: true + # Change this value to match your LangSmith namespace. + namespaces: "langsmith" + +postgresexporter: + enabled: true + config: + # Change these values to match your Postgres instance. + datasource: + host: langsmith-postgres.langsmith.svc.cluster.local + user: postgres + password: postgres + database: postgres + port: "5432" + +nginxexporter: + enabled: true + # Change this value to match your LangSmith frontend service. + nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" + +redisexporter: + enabled: true + # Change this value to match your Redis instance. + redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 \ No newline at end of file diff --git a/charts/langsmith-observability/examples/metric-exporters-only.yaml b/charts/langsmith-observability/examples/metric-exporters-only.yaml index 279feeca..2de52b34 100644 --- a/charts/langsmith-observability/examples/metric-exporters-only.yaml +++ b/charts/langsmith-observability/examples/metric-exporters-only.yaml @@ -1,24 +1,28 @@ # This configuration is to deploy all of the Prometheus Exporters, but not the LGTM Stack or OTEL collector. -# Use this if you already have a collector and just want to scrape all metrics +# Use this if you already have a collector and just want to scrape all metrics from LangSmith. kubestatemetrics: enabled: true + # Change this value to match your LangSmith namespace. namespaces: "langsmith" postgresexporter: enabled: true config: + # Change these values to match your Postgres instance. datasource: - host: langsmith-postgres.langsmith.svc.cluster.local - user: postgres - password: password - database: postgres + host: "langsmith-postgres.langsmith.svc.cluster.local" + user: "postgres" + password: "postgres" + database: "postgres" port: "5432" nginxexporter: enabled: true - nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:8080/nginx_status" + # Change this value to match your LangSmith frontend service. + nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" redisexporter: enabled: true - redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 \ No newline at end of file + # Change this value to match your Redis instance. + redisAddress: "langsmith-redis.langsmith.svc.cluster.local:6379" \ No newline at end of file diff --git a/charts/langsmith-observability/templates/_helpers.tpl b/charts/langsmith-observability/templates/_helpers.tpl index 1fac3a54..e2d61e02 100644 --- a/charts/langsmith-observability/templates/_helpers.tpl +++ b/charts/langsmith-observability/templates/_helpers.tpl @@ -3,7 +3,7 @@ Check if any of the three services (redis, postgres, clickhouse) metrics are ena Usage: include "langsmith-observability.anyMetricsEnabled" . */}} {{- define "langsmith-observability.databaseMetricsEnabled" -}} -{{- or .Values.opentelemetryCollector.metrics.redis.enabled .Values.opentelemetryCollector.metrics.postgres.enabled (default false .Values.opentelemetryCollector.metrics.clickhouse.enabled) -}} +{{- or .Values.otelCollector.metrics.redis.enabled .Values.otelCollector.metrics.postgres.enabled (default false .Values.otelCollector.metrics.clickhouse.enabled) -}} {{- end -}} {{/* @@ -12,16 +12,16 @@ Usage: include "langsmith-observability.enabledServicesRegex" . */}} {{- define "langsmith-observability.enabledServicesRegex" -}} {{- $services := list -}} -{{- if .Values.opentelemetryCollector.metrics.redis.enabled -}} - {{- $serviceName := default (printf "%s-redis" .Values.langSmithReleaseName) .Values.opentelemetryCollector.metrics.redis.serviceName -}} +{{- if .Values.otelCollector.metrics.redis.enabled -}} + {{- $serviceName := default (printf "%s-redis" .Values.langSmithReleaseName) .Values.otelCollector.metrics.redis.serviceName -}} {{- $services = append $services $serviceName -}} {{- end -}} -{{- if .Values.opentelemetryCollector.metrics.postgres.enabled -}} - {{- $serviceName := default (printf "%s-postgres" .Values.langSmithReleaseName) .Values.opentelemetryCollector.metrics.postgres.serviceName -}} +{{- if .Values.otelCollector.metrics.postgres.enabled -}} + {{- $serviceName := default (printf "%s-postgres" .Values.langSmithReleaseName) .Values.otelCollector.metrics.postgres.serviceName -}} {{- $services = append $services $serviceName -}} {{- end -}} -{{- if .Values.opentelemetryCollector.metrics.clickhouse.enabled -}} - {{- $serviceName := default (printf "%s-clickhouse" .Values.langSmithReleaseName) .Values.opentelemetryCollector.metrics.clickhouse.serviceName -}} +{{- if .Values.otelCollector.metrics.clickhouse.enabled -}} + {{- $serviceName := default (printf "%s-clickhouse" .Values.langSmithReleaseName) .Values.otelCollector.metrics.clickhouse.serviceName -}} {{- $services = append $services $serviceName -}} {{- end -}} {{- if $services -}} diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml index df622b72..cac28b93 100644 --- a/charts/langsmith-observability/templates/otel/gateway.yaml +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -1,15 +1,15 @@ -{{- if or .Values.opentelemetryCollector.metrics.enabled .Values.opentelemetryCollector.traces.enabled }} +{{- if or .Values.otelCollector.metrics.enabled .Values.otelCollector.traces.enabled }} apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: - name: {{ .Values.opentelemetryCollector.name }}-gateway + name: {{ .Values.otelCollector.name }}-gateway spec: mode: deployment - image: {{ .Values.opentelemetryCollector.image.repository }}:{{ .Values.opentelemetryCollector.image.tag }} + image: {{ .Values.otelCollector.image.repository }}:{{ .Values.otelCollector.image.tag }} config: receivers: - {{ if .Values.opentelemetryCollector.metrics.enabled }} + {{ if .Values.otelCollector.metrics.enabled }} prometheus: config: scrape_configs: @@ -25,7 +25,7 @@ spec: regex: "langsmith-.*" action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] - regex: "(backend|platform|playground)" + regex: "(backend|platform|playground|host-backend|ch-metrics)" action: keep # Promote useful metadata into regular labels - source_labels: [__meta_kubernetes_service_name] @@ -35,19 +35,18 @@ spec: # Replace the default "host:port" as Prom's instance label - source_labels: [__address__] target_label: instance - {{- if include "langsmith-observability.databaseMetricsEnabled" . }} - job_name: database-metrics metrics_path: /metrics kubernetes_sd_configs: - role: endpoints namespaces: - names: [{{ .Values.langsmithNamespace }}] + names: [{{ .Release.Namespace }}] relabel_configs: - source_labels: [__meta_kubernetes_service_name] - regex: {{ include "langsmith-observability.enabledServicesRegex" . }} + regex: "{{ .Values.langSmithReleaseName }}-.*" action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] - regex: ".*metrics.*" + regex: "(http)" action: keep - source_labels: [__meta_kubernetes_service_name] target_label: k8s_service @@ -55,9 +54,8 @@ spec: target_label: k8s_pod - source_labels: [__address__] target_label: instance - {{- end }} {{ end }} - {{- if .Values.opentelemetryCollector.traces.enabled }} + {{- if .Values.otelCollector.traces.enabled }} otlp: protocols: grpc: @@ -76,11 +74,11 @@ spec: spike_limit_percentage: 80 exporters: - {{ if .Values.opentelemetryCollector.metrics.enabled }} + {{ if .Values.otelCollector.metrics.enabled }} otlphttp/metrics: endpoint: http://{{ .Release.Name }}-mimir-nginx.{{ .Release.Namespace }}.svc.cluster.local:80/otlp {{ end }} - {{ if .Values.opentelemetryCollector.traces.enabled }} + {{ if .Values.otelCollector.traces.enabled }} otlphttp/traces: endpoint: http://langsmith-observability-tempo-distributor-discovery.romain-observability.svc.cluster.local:4318 {{ end }} @@ -90,13 +88,13 @@ spec: logs: level: debug pipelines: - {{ if .Values.opentelemetryCollector.metrics.enabled }} + {{ if .Values.otelCollector.metrics.enabled }} metrics/langsmith: receivers: [prometheus] processors: [batch, memory_limiter] exporters: [otlphttp/metrics] {{ end }} - {{ if .Values.opentelemetryCollector.traces.enabled }} + {{ if .Values.otelCollector.traces.enabled }} traces/langsmith: receivers: [otlp] processors: [batch, memory_limiter] diff --git a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml index 9b2b86ef..b8eb54b9 100644 --- a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml @@ -1,11 +1,11 @@ -{{- if .Values.opentelemetryCollector.logs.enabled }} +{{- if .Values.otelCollector.logs.enabled }} apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: - name: {{ .Values.opentelemetryCollector.name }} + name: {{ .Values.otelCollector.name }}-sidecar spec: mode: sidecar - image: {{ .Values.opentelemetryCollector.image.repository }}:{{ .Values.opentelemetryCollector.image.tag }} + image: {{ .Values.otelCollector.image.repository }}:{{ .Values.otelCollector.image.tag }} config: receivers: diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml index ef433411..47d661f7 100644 --- a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -1,4 +1,4 @@ -{{- if .Values.opentelemetryCollector.metrics.enabled }} +{{- if .Values.otelCollector.metrics.enabled }} apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: @@ -20,6 +20,6 @@ roleRef: namespace: {{ .Values.langsmithNamespace }} subjects: - kind: ServiceAccount - name: {{ .Values.opentelemetryCollector.name }}-gateway-collector + name: {{ .Values.otelCollector.name }}-gateway-collector namespace: {{ .Release.Namespace }} {{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml index 8f63191f..4faaee70 100644 --- a/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml @@ -1,4 +1,4 @@ -{{- if .Values.opentelemetryCollector.logs.enabled }} +{{- if .Values.otelCollector.logs.enabled }} {{- $namespace := .Values.langsmithNamespace }} apiVersion: rbac.authorization.k8s.io/v1 kind: Role @@ -20,7 +20,7 @@ roleRef: name: read-pod-logs namespace: {{ $namespace }} subjects: -{{- range .Values.opentelemetryCollector.serviceAccounts }} +{{- range .Values.otelCollector.serviceAccounts }} - kind: ServiceAccount name: {{ . }} namespace: {{ $namespace }} diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index d4fd6766..780530bb 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -1,7 +1,11 @@ +# This should match the namespace of the langsmith release langsmithNamespace: "romain" +# This should match the release name of the langsmith release langSmithReleaseName: "langsmith" +# ======================== Grafana ======================== + # Values for Grafana: https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml grafana: enabled: false @@ -33,12 +37,17 @@ grafana: serviceMap: datasourceUid: prom +# ======================== Kube State Metrics ======================== + # Values for Kube State Metrics: https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-state-metrics/values.yaml kubestatemetrics: - enabled: true + enabled: false service: type: ClusterIP port: 8080 + namespaces: "romain" + +# ======================== Loki ======================== # Values for Loki: https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml loki: @@ -56,24 +65,24 @@ loki: prefix: loki_index_ period: 24h - storage_config: - aws: - region: us-east-1 - bucketnames: loki-chunks - s3forcepathstyle: true - storage: type: s3 bucketNames: - chunks: loki-chunks - # In the future, configure a ruler bucket if we want to set rules/alerts on logs? + chunks: langsmith-lgtm-stack + ruler: langsmith-lgtm-stack s3: - endpoint: langsmith-observability-minio.romain-observability.svc.cluster.local:9000 - region: us-east-1 + endpoint: {{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000 secretAccessKey: admin_password accessKeyId: admin insecure: true - s3ForcePathStyle: true + s3ForcePathStyle: true # Required true for minio + + storage_config: + object_prefix: loki + aws: + region: us-west-2 + bucketnames: langsmith-lgtm-stack + s3forcepathstyle: true # Required true for minio ingester: chunk_encoding: snappy @@ -125,6 +134,8 @@ loki: singleBinary: replicas: 0 +# ======================== Mimir ======================== + # Values for Mimir: https://github.com/grafana/mimir/blob/main/operations/helm/charts/mimir-distributed/values.yaml mimir: enabled: false @@ -136,23 +147,23 @@ mimir: storage: backend: s3 s3: - endpoint: langsmith-observability-minio.romain-observability.svc.cluster.local:9000 - region: us-east-1 + endpoint: {{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000 + bucket_name: langsmith-lgtm-stack secret_access_key: admin_password access_key_id: admin + s3forcepathstyle: true insecure: true blocks_storage: - s3: - bucket_name: mimir-blocks + storage_prefix: mimirBlocks alertmanager_storage: - s3: - bucket_name: mimir-alertmanager + storage_prefix: mimirAlertmanager ruler_storage: - s3: - bucket_name: mimir-ruler + storage_prefix: mimirRuler + +# ======================== Minio ======================== # Values for Minio: https://github.com/bitnami/charts/blob/main/bitnami/minio/values.yaml minio: @@ -167,18 +178,23 @@ minio: auth: rootUser: "admin" rootPassword: "admin_password" - defaultBuckets: "loki-chunks, mimir-blocks, mimir-ruler, mimir-alertmanager, tempo" + defaultBuckets: "langsmith-lgtm-stack" + + +# ======================== Nginx Exporter ======================== # Values for the Nginx Exporter: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-nginx-exporter/values.yaml -nginxExporter: - enabled: true +nginxexporter: + enabled: false service: type: ClusterIP port: 9113 - nginxServer: "http://langsmith-frontend.romain.svc.cluster.local:8080/nginx_status" + nginxServer: "http://langsmith-frontend.romain.svc.cluster.local:80/nginx_status" + +# ======================== OTEL Collector ======================== -opentelemetryCollector: +otelCollector: name: "langsmith-collector" image: repository: otel/opentelemetry-collector-contrib @@ -194,7 +210,6 @@ opentelemetryCollector: - "langsmith-postgres" - "langsmith-queue" - "langsmith-redis" - logs: enabled: false metrics: @@ -202,9 +217,11 @@ opentelemetryCollector: traces: enabled: false +# ======================== Postgres Exporter ======================== + # Values for the Postgres Exporter: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-postgres-exporter/values.yaml postgresexporter: - enabled: true + enabled: false service: type: ClusterIP port: 80 @@ -213,18 +230,25 @@ postgresexporter: datasource: host: langsmith-postgres.romain.svc.cluster.local user: postgres - password: password + password: postgres database: postgres port: "5432" + +# ======================== Redis Exporter ======================== + # Values for the Redis Exporter: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-redis-exporter/values.yaml redisexporter: - enabled: true + enabled: false service: type: ClusterIP port: 9121 + portName: http redisAddress: langsmith-redis.romain.svc.cluster.local:6379 + +# ======================== Tempo ======================== + # Values for Tempo: https://github.com/grafana/helm-charts/blob/main/charts/tempo-distributed/values.yaml tempo: enabled: false @@ -234,9 +258,12 @@ tempo: s3: access_key: admin secret_key: admin_password - bucket: tempo - endpoint: langsmith-observability-minio.romain-observability.svc.cluster.local:9000 + bucket: langsmith-lgtm-stack + endpoint: {{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000 + s3forcepathstyle: true # Required true for minio insecure: true + prefix: tempo + # Specifies which trace protocols to accept by the gateway. traces: otlp: diff --git a/charts/langsmith/templates/_helpers.tpl b/charts/langsmith/templates/_helpers.tpl index 22dcb633..a2d95322 100644 --- a/charts/langsmith/templates/_helpers.tpl +++ b/charts/langsmith/templates/_helpers.tpl @@ -49,8 +49,8 @@ app.kubernetes.io/managed-by: {{ .Release.Service }} Common labels for the observability stack */}} {{- define "langsmith.observabilityAnnotations" -}} -{{- if .Values.config.observability.collector.enabled }} -sidecar.opentelemetry.io/inject: {{ .Values.config.observability.collector.namespace }}/{{ .Values.config.observability.collector.name }} +{{- if .Values.config.observability.sidecarCollector.enabled }} +sidecar.opentelemetry.io/inject: {{ .Values.config.observability.sidecarCollector.namespace }}/{{ .Values.config.observability.sidecarCollector.name }} {{- end }} {{- end }} diff --git a/charts/langsmith/templates/config-map.yaml b/charts/langsmith/templates/config-map.yaml index 80c5f8a4..13ca8e0c 100644 --- a/charts/langsmith/templates/config-map.yaml +++ b/charts/langsmith/templates/config-map.yaml @@ -34,9 +34,9 @@ data: HOST_BACKEND_ENDPOINT: "http://{{ include "langsmith.fullname" . }}-{{.Values.hostBackend.name}}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.hostBackend.service.port }}" FF_RUN_STATS_GROUP_BY_ENABLED_ALL: "true" {{- if .Values.config.observability.tracing.enabled }} - OTEL_TRACING_ENABLED: {{ .Values.config.observability.tracing.enabled }} + OTEL_TRACING_ENABLED: "{{ .Values.config.observability.tracing.enabled }}" OTLP_ENDPOINT: "http://{{ .Values.config.observability.tracing.endpoint }}" OTEL_ENVIRONMENT: "{{ .Values.config.observability.tracing.env }}" OTEL_EXPORTER: "{{ .Values.config.observability.tracing.exporter }}" - OTLE_USE_TLS: {{ .Values.config.observability.tracing.useTls }} + OTLE_USE_TLS: "{{ .Values.config.observability.tracing.useTls }}" {{- end }} diff --git a/charts/langsmith/templates/frontend/config-map.yaml b/charts/langsmith/templates/frontend/config-map.yaml index d422c375..318f0f20 100644 --- a/charts/langsmith/templates/frontend/config-map.yaml +++ b/charts/langsmith/templates/frontend/config-map.yaml @@ -46,6 +46,17 @@ data: return 200; } + location = /nginx_status { + stub_status on; + access_log off; + # Allow access from private IP ranges used in k8s clusters + allow 127.0.0.1; # localhost + allow 10.0.0.0/8; # Standard private network range + allow 172.16.0.0/12; # Standard private network range + allow 192.168.0.0/16; # Standard private network range + deny all; # Deny all other IPs + } + location ~ /{{ .Values.ingress.subdomain }}/api/v1/playground/ { rewrite /{{ .Values.ingress.subdomain }}/api/v1/playground/(.*) /playground/$1 break; proxy_set_header Connection ''; @@ -262,6 +273,17 @@ data: return 200; } + location = /nginx_status { + stub_status on; + access_log off; + # Allow access from private IP ranges used in k8s clusters + allow 127.0.0.1; # localhost + allow 10.0.0.0/8; # Standard private network range + allow 172.16.0.0/12; # Standard private network range + allow 192.168.0.0/16; # Standard private network range + deny all; # Deny all other IPs + } + error_page 500 502 503 504 /50x.html; location = /50x.html { root /tmp/build; diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 1cd0954c..43a2c1e0 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -172,10 +172,10 @@ config: coBrandingEnabled: true observability: - collector: + sidecarCollector: enabled: false namespace: "langsmith-observability" - name: "langsmith-observability-collector" + name: "langsmith-collector-sidecar" tracing: enabled: false endpoint: "" From 4f8a9f1d1c6dc93238fb08e8dd500622e7c2e4d4 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Fri, 20 Jun 2025 18:39:27 -0700 Subject: [PATCH 15/27] more progress, added some dashboards --- .../dashboards/clickhouse_dashboard.json | 11242 ++++++++++++++++ .../examples/dashboards/nginx_dashboard.json | 1030 ++ .../dashboards/postgres_dashboard.json | 3167 +++++ .../examples/dashboards/redis_dashboard.json | 2542 ++++ .../templates/otel/gateway.yaml | 12 +- .../templates/otel/rbac-gateway.yaml | 30 +- charts/langsmith-observability/values.yaml | 8 +- 7 files changed, 18021 insertions(+), 10 deletions(-) create mode 100644 charts/langsmith-observability/examples/dashboards/clickhouse_dashboard.json create mode 100644 charts/langsmith-observability/examples/dashboards/nginx_dashboard.json create mode 100644 charts/langsmith-observability/examples/dashboards/postgres_dashboard.json create mode 100644 charts/langsmith-observability/examples/dashboards/redis_dashboard.json diff --git a/charts/langsmith-observability/examples/dashboards/clickhouse_dashboard.json b/charts/langsmith-observability/examples/dashboards/clickhouse_dashboard.json new file mode 100644 index 00000000..9d1c510b --- /dev/null +++ b/charts/langsmith-observability/examples/dashboards/clickhouse_dashboard.json @@ -0,0 +1,11242 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "7.5.2" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.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" + }, + { + "datasource": "${DS_PROMETHEUS}", + "enable": true, + "expr": "resets(ClickHouseAsyncMetrics_Uptime{instance=~\"$instance\"}[$__rate_interval])", + "hide": false, + "iconColor": "rgba(255, 96, 96, 1)", + "name": "Restarts", + "showIn": 0, + "step": "60s", + "tagKeys": "instance", + "titleFormat": "Restart", + "useValueForTime": false + } + ] + }, + "description": "ClickHouse internal exporter metrics", + "editable": true, + "gnetId": 14192, + "graphTooltip": 1, + "id": null, + "iteration": 1617958425076, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "ClickHouse monitoring docs", + "tooltip": "", + "type": "link", + "url": "https://clickhouse.tech/docs/en/operations/monitoring/" + } + ], + "panels": [ + { + "datasource": "${DS_PROMETHEUS}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "uptime" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 14, + "options": { + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "7.5.2", + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_VersionInteger", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + }, + { + "exemplar": false, + "expr": "ClickHouseMetrics_Revision", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "B" + }, + { + "exemplar": false, + "expr": "ClickHouseAsyncMetrics_NumberOfTables", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "C" + }, + { + "exemplar": false, + "expr": "ClickHouseAsyncMetrics_Uptime", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "D" + }, + { + "exemplar": false, + "expr": "ClickHouseAsyncMetrics_NumberOfDatabases", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "E" + } + ], + "title": "Nodes", + "transformations": [ + { + "id": "seriesToColumns", + "options": { + "byField": "instance" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": true, + "Time 10": true, + "Time 2": true, + "Time 3": true, + "Time 4": true, + "Time 5": true, + "Time 6": true, + "Time 7": true, + "Time 8": true, + "Time 9": true, + "Value #A 2": true, + "Value #B 2": true, + "Value #C 2": true, + "Value #D 2": true, + "Value #E 2": true, + "__name__ 1": true, + "__name__ 10": true, + "__name__ 2": true, + "__name__ 3": true, + "__name__ 4": true, + "__name__ 5": true, + "__name__ 6": true, + "__name__ 7": true, + "__name__ 8": true, + "__name__ 9": true, + "job 1": true, + "job 10": true, + "job 2": true, + "job 3": true, + "job 4": true, + "job 5": true, + "job 6": true, + "job 7": true, + "job 8": true, + "job 9": true + }, + "indexByName": { + "Time 1": 6, + "Time 10": 37, + "Time 2": 9, + "Time 3": 13, + "Time 4": 16, + "Time 5": 20, + "Time 6": 23, + "Time 7": 27, + "Time 8": 30, + "Time 9": 34, + "Value #A 1": 1, + "Value #A 2": 12, + "Value #B 1": 2, + "Value #B 2": 19, + "Value #C 1": 3, + "Value #C 2": 26, + "Value #D 1": 5, + "Value #D 2": 33, + "Value #E 1": 4, + "Value #E 2": 40, + "__name__ 1": 7, + "__name__ 10": 38, + "__name__ 2": 10, + "__name__ 3": 14, + "__name__ 4": 17, + "__name__ 5": 21, + "__name__ 6": 24, + "__name__ 7": 28, + "__name__ 8": 31, + "__name__ 9": 35, + "instance": 0, + "job 1": 8, + "job 10": 39, + "job 2": 11, + "job 3": 15, + "job 4": 18, + "job 5": 22, + "job 6": 25, + "job 7": 29, + "job 8": 32, + "job 9": 36 + }, + "renameByName": { + "Value #A 1": "version", + "Value #B 1": "revision", + "Value #C 1": "tables", + "Value #D 1": "uptime", + "Value #E 1": "databases" + } + } + } + ], + "transparent": true, + "type": "table" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Total amount of memory (bytes) allocated by the server.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 8 + }, + "hiddenSeries": false, + "id": 29, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_MemoryTracking", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "bytes", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of connections to TCP server (clients with native interface), also included server-server distributed query connections. \nNumber of connections to HTTP server", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 8 + }, + "hiddenSeries": false, + "id": 73, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_TCPConnection", + "interval": "", + "legendFormat": "tcp - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "ClickHouseMetrics_HTTPConnection", + "hide": false, + "interval": "", + "legendFormat": "http - {{instance}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Connections", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times the number of query processing threads was lowered due to slow reads.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 13 + }, + "hiddenSeries": false, + "id": 72, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBackoff{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBackoff{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Read backoff", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of reads from a file that were slow. This indicate system overload. Thresholds are controlled by read_backoff_* settings.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 13 + }, + "hiddenSeries": false, + "id": 71, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SlowRead{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SlowRead{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Slow reads", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 12, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Number of queries to be interpreted and potentially executed. Does not include queries that failed to parse or were rejected due to AST size limits, quota limits or limits on the number of simultaneously running queries. May include internal queries initiated by ClickHouse itself. Does not count subqueries.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 19 + }, + "hiddenSeries": false, + "id": 2, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_Query{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_Query{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Queries", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Same as Queries, but only for SELECT queries.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 19 + }, + "hiddenSeries": false, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "SELECT queries", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Same as Queries, but only for INSERT queries.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 27 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_InsertQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_InsertQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "INSERT queries", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Same as Failed queries, but only for SELECT queries.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 27 + }, + "hiddenSeries": false, + "id": 6, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_FailedSelectQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_FailedSelectQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Failed SELECT queries", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of failed queries.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 35 + }, + "hiddenSeries": false, + "id": 5, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_FailedQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_FailedQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Failed queries", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times when memory limit exceeded for query.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 35 + }, + "hiddenSeries": false, + "id": 85, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_QueryMemoryLimitExceeded{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_QueryMemoryLimitExceeded{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Queries memory limit", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of queries that are stopped and waiting due to 'priority' setting.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 43 + }, + "hiddenSeries": false, + "id": 86, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseMetrics_QueryPreempted{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseMetrics_QueryPreempted{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Query preemted", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Same as Failed queries, but only for INSERT queries.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 43 + }, + "hiddenSeries": false, + "id": 7, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_FailedInsertQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_FailedInsertQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Failed INSERT queries", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Avg queries latencies", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 51 + }, + "hiddenSeries": false, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_QueryTimeMicroseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_Query{instance=~\"$instance\"}[$__rate_interval])", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Query latencies (avg)", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "µs", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": 1 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Avg SELECT queries latencies", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 51 + }, + "hiddenSeries": false, + "id": 9, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_SelectQueryTimeMicroseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_SelectQuery{instance=~\"$instance\"}[$__rate_interval])", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "SELECT query latencies (avg)", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "µs", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Avg INSERT queries latencies", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 59 + }, + "hiddenSeries": false, + "id": 10, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_InsertQueryTimeMicroseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_InsertQuery{instance=~\"$instance\"}[$__rate_interval])", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "INSERT query latencies (avg)", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "µs", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Queries", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 64, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Number of rows INSERTed to all tables.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 30 + }, + "hiddenSeries": false, + "id": 62, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_InsertedRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_InsertedRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Inserted rows", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of bytes (uncompressed; for columns as they stored in memory) INSERTed to all tables.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 30 + }, + "hiddenSeries": false, + "id": 65, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_InsertedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_InsertedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Inserted bytes", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times the INSERT of a block to a MergeTree table was throttled due to high number of active data parts for partition.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 38 + }, + "hiddenSeries": false, + "id": 66, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DelayedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DelayedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Delayed inserts", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times the INSERT of a block to a MergeTree table was rejected with 'Too many parts' exception due to high number of active data parts for partition.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 38 + }, + "hiddenSeries": false, + "id": 67, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_RejectedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_RejectedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Rejected inserts", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Total number of milliseconds spent while the INSERT of a block to a MergeTree table was throttled due to high number of active data parts for partition.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 46 + }, + "hiddenSeries": false, + "id": 69, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_DelayedInsertsMilliseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_DelayedInserts{instance=~\"$instance\"}[$__rate_interval])", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Delayed inserts blocks (avg)", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "µs", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": 1 + } + } + ], + "title": "Insert", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 20 + }, + "id": 125, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Number of data parts selected to read from a MergeTree table.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 27 + }, + "hiddenSeries": false, + "id": 126, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedParts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedParts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Parts", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of (non-adjacent) ranges in all data parts selected to read from a MergeTree table.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 27 + }, + "hiddenSeries": false, + "id": 127, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedRanges{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedRanges{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ranges", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of marks (index granules) selected to read from a MergeTree table.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 35 + }, + "hiddenSeries": false, + "id": 128, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedMarks{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedMarks{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Marks", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of rows SELECTed from all tables.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 35 + }, + "hiddenSeries": false, + "id": 129, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Rows", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of bytes (uncompressed; for columns as they stored in memory) SELECTed from all tables.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 43 + }, + "hiddenSeries": false, + "id": 130, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Bytes", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Select", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 17, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Number of times the 'lseek' function was called.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 33 + }, + "hiddenSeries": false, + "id": 20, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_Seek{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_Seek{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "lseek", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "ops", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of files opened", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 33 + }, + "hiddenSeries": false, + "id": 19, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_FileOpen{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_FileOpen{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Open Files", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "ops", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of reads (read/pread) from a file descriptor. Does not include sockets.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 41 + }, + "hiddenSeries": false, + "id": 22, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorRead{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorRead{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Read from FD", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "ops", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of writes (write/pwrite) to a file descriptor. Does not include sockets.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 41 + }, + "hiddenSeries": false, + "id": 23, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWrite{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWrite{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Write to FD", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "ops", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times the read (read/pread) from a file descriptor have failed.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 49 + }, + "hiddenSeries": false, + "id": 24, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Read from FD failed", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "ops", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times the read (read/pread) from a file descriptor have failed.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 49 + }, + "hiddenSeries": false, + "id": 25, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Read from FD failed", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "ops", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of bytes read from file descriptors. If the file is compressed, this will show the compressed data size.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 57 + }, + "hiddenSeries": false, + "id": 21, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Read bytes from FD", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of bytes written to file descriptors. If the file is compressed, this will show compressed data size.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 57 + }, + "hiddenSeries": false, + "id": 26, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWriteBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWriteBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Write bytes to FD", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of bytes (the number of bytes before decompression) read from compressed sources (files, network).", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 65 + }, + "hiddenSeries": false, + "id": 51, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadCompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadCompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Read compressed bytes", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of uncompressed bytes (the number of bytes after decompression) read from compressed sources (files, network).", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 65 + }, + "hiddenSeries": false, + "id": 53, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_CompressedReadBufferBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_CompressedReadBufferBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Read uncompressed bytes", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of compressed blocks (the blocks of data that are compressed independent of each other) read from compressed sources (files, network).", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 73 + }, + "hiddenSeries": false, + "id": 52, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_CompressedReadBufferBlocks{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_CompressedReadBufferBlocks{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Compressed blocks", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "IO", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 56, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Number of Replicated tables that are currently in readonly state due to re-initialization after ZooKeeper session loss or due to startup without ZooKeeper configured.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 31 + }, + "hiddenSeries": false, + "id": 74, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_ReadonlyReplica", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Readonly replica", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times a data part was failed to download from replica of a ReplicatedMergeTree table.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 31 + }, + "hiddenSeries": false, + "id": 58, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartFailedFetches{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedPartFailedFetches{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Replicated part failed fetches", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times a data part was downloaded from replica of a ReplicatedMergeTree table.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 39 + }, + "hiddenSeries": false, + "id": 57, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartFetches{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedPartFetches{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Replicated part fetches", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times we prefer to download already merged part from replica of ReplicatedMergeTree table instead of performing a merge ourself (usually we prefer doing a merge ourself to save network traffic). This happens when we have not all source parts to perform a merge or when the data part is old enough.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 39 + }, + "hiddenSeries": false, + "id": 60, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartFetchesOfMerged{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedPartFetchesOfMerged{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Replicated part fetches or merges", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times data parts of ReplicatedMergeTree tables were successfully merged.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 47 + }, + "hiddenSeries": false, + "id": 59, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartMerges{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedPartMerges{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Replicated part merges", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times a data part that we wanted doesn't exist on any replica (even on replicas that are offline right now). That data parts are definitely lost. This is normal due to asynchronous replication (if quorum inserts were not enabled), when the replica on which the data part was written was failed and when it became online after fail it doesn't contain that data part.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 47 + }, + "hiddenSeries": false, + "id": 61, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedDataLoss{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedDataLoss{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Replicated part data loss", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Replicas", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 76, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Number of launched background merges.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 29 + }, + "hiddenSeries": false, + "id": 77, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_Merge{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_Merge{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Merge", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Rows read for background merges. This is the number of rows before merge.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 29 + }, + "hiddenSeries": false, + "id": 78, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergedRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergedRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Merged rows", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Uncompressed bytes (for columns as they stored in memory) that was read for background merges. This is the number before merge.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 37 + }, + "hiddenSeries": false, + "id": 79, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergedUncompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergedUncompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Merge uncompressed bytes", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Avg merge duration", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 37 + }, + "hiddenSeries": false, + "id": 80, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_MergesTimeMilliseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_Merge{instance=~\"$instance\"}[$__rate_interval])", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Merge duration (avg)", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "µs", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": 1 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Number of rows INSERTed to MergeTree tables.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 45 + }, + "hiddenSeries": false, + "id": 81, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "MergeTree rows", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of blocks INSERTed to MergeTree tables. Each block forms a data part of level zero.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 45 + }, + "hiddenSeries": false, + "id": 82, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterBlocks{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterBlocks{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "MergeTree blocks", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Uncompressed bytes (for columns as they stored in memory) INSERTed to MergeTree tables.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 53 + }, + "hiddenSeries": false, + "id": 83, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterUncompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterUncompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "MergeTree uncompressed bytes", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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 written to filesystem for data INSERTed to MergeTree tables.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 53 + }, + "hiddenSeries": false, + "id": 84, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterCompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterCompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "MergeTree compressed bytes", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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 space reserved for currently running background merges. It is slightly more than the total size of currently merging parts.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 61 + }, + "hiddenSeries": false, + "id": 123, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_DiskSpaceReservedForMerge", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Reserved space", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "bytes", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Merge", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 92, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 26 + }, + "hiddenSeries": false, + "id": 102, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_UncompressedCacheHits{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_UncompressedCacheHits{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Uncompressed Cache Hits", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 26 + }, + "hiddenSeries": false, + "id": 103, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_UncompressedCacheMisses{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_UncompressedCacheMisses{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Uncompressed Cache Misses", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 34 + }, + "hiddenSeries": false, + "id": 104, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MarkCacheHits{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MarkCacheHits{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Mark Cache Hits", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 34 + }, + "hiddenSeries": false, + "id": 105, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MarkCacheMisses{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MarkCacheMisses{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Mark Cache Misses", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Cache", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 25 + }, + "id": 90, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "The part is generating now, it is not in data_parts list.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 27 + }, + "hiddenSeries": false, + "id": 114, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_PartsTemporary", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Temporary", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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 part is in data_parts, but not used for SELECTs.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 27 + }, + "hiddenSeries": false, + "id": 115, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_PartsPreCommitted", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Pre commited", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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 part is in data_parts, but not used for SELECTs.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 35 + }, + "hiddenSeries": false, + "id": 116, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_PartsCommitted", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Commited", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Not active data part, but could be used by only current SELECTs, could be deleted after SELECTs finishes.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 35 + }, + "hiddenSeries": false, + "id": 117, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_PartsOutdated", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Outdated", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Not active data part with identity refcounter, it is deleting right now by a cleaner.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 43 + }, + "hiddenSeries": false, + "id": 118, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_PartsDeleting", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Deleting", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Part was moved to another disk and should be deleted in own destructor.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 43 + }, + "hiddenSeries": false, + "id": 119, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_PartsDeleteOnDestroy", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Delete on destroy", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Wide parts.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 51 + }, + "hiddenSeries": false, + "id": 120, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_PartsWide", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Wide", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Compact parts.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 51 + }, + "hiddenSeries": false, + "id": 122, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_PartsCompact", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Compact", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "In-memory parts.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 59 + }, + "hiddenSeries": false, + "id": 121, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_PartsInMemory", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "In-memory", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Parts", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 94, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Number of connections to remote servers sending data that was INSERTed into Distributed tables. Both synchronous and asynchronous mode.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 25 + }, + "hiddenSeries": false, + "id": 112, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_DistributedSend", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Send", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of pending files to process for asynchronous insertion into Distributed tables. Number of files for every shard is summed.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 25 + }, + "hiddenSeries": false, + "id": 113, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_DistributedFilesToInsert", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Files to insert", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times the INSERT of a block to a Distributed table was throttled due to high number of pending bytes.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 33 + }, + "hiddenSeries": false, + "id": 106, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedDelayedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedDelayedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Distributed delayed inserts", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times the INSERT of a block to a Distributed table was rejected with 'Too many bytes' exception due to high number of pending bytes.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 33 + }, + "hiddenSeries": false, + "id": 107, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedRejectedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedRejectedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Distributed rejected inserts", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Total number of milliseconds spent while the INSERT of a block to a Distributed table was throttled due to high number of pending bytes.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 41 + }, + "hiddenSeries": false, + "id": 108, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_DistributedDelayedInsertsMilliseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_DistributedDelayedInserts{instance=~\"$instance\"}[$__rate_interval])", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Distributed delayed inserts blocks (avg)", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "µs", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": 1 + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Total count when distributed connection fails with retry", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 41 + }, + "hiddenSeries": false, + "id": 109, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedConnectionFailTry{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedConnectionFailTry{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Distributed connection fail try", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Total count when distributed connection fails after all retries finished", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 49 + }, + "hiddenSeries": false, + "id": 110, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedConnectionFailAtAll{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedConnectionFailAtAll{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Distributed connection fail at all", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 49 + }, + "hiddenSeries": false, + "id": 111, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedSyncInsertionTimeoutExceeded{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedSyncInsertionTimeoutExceeded{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Distributed sync insertation timeout", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Distributed", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 88, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Number of active tasks in BackgroundProcessingPool (merges, mutations, or replication queue bookkeeping)", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 28 + }, + "hiddenSeries": false, + "id": 95, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundPoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "BackgroundPool task", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of active tasks in BackgroundFetchesPool", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 28 + }, + "hiddenSeries": false, + "id": 96, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundFetchesPoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "BackgroundFetchesPool task", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of active tasks in BackgroundProcessingPool for moves", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 36 + }, + "hiddenSeries": false, + "id": 97, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundMovePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "BackgroundMovePool task", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of active tasks in BackgroundSchedulePool. This pool is used for periodic ReplicatedMergeTree tasks, like cleaning old data parts, altering data parts, replica re-initialization, etc.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 36 + }, + "hiddenSeries": false, + "id": 98, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundSchedulePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "BackgroundSchedulePool task", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of active tasks in BackgroundBufferFlushSchedulePool. This pool is used for periodic Buffer flushes", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 44 + }, + "hiddenSeries": false, + "id": 99, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundBufferFlushSchedulePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "BackgroundBufferFlushSchedulePool task", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of active tasks in BackgroundDistributedSchedulePool. This pool is used for distributed sends that is done in background.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 44 + }, + "hiddenSeries": false, + "id": 100, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundDistributedSchedulePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "BackgroundDistributedSchedulePool task", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of active tasks in BackgroundProcessingPool for message streaming", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 52 + }, + "hiddenSeries": false, + "id": 101, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundMessageBrokerSchedulePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "BackgroundMessageBrokerSchedulePool task", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Background pool", + "type": "row" + }, + { + "collapsed": true, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 28, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 29 + }, + "hiddenSeries": false, + "id": 30, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperInit{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperInit{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Init", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 29 + }, + "hiddenSeries": false, + "id": 31, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperTransactions{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperTransactions{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Transactions", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 37 + }, + "hiddenSeries": false, + "id": 32, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperList{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperList{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "List", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 37 + }, + "hiddenSeries": false, + "id": 33, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperCreate{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperCreate{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Create", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 45 + }, + "hiddenSeries": false, + "id": 34, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperRemove{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperRemove{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Remove", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 45 + }, + "hiddenSeries": false, + "id": 35, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperExists{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperExists{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Exists", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 53 + }, + "hiddenSeries": false, + "id": 36, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperGet{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperGet{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Get", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 53 + }, + "hiddenSeries": false, + "id": 37, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperSet{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperSet{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Set", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 61 + }, + "hiddenSeries": false, + "id": 38, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperMulti{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperMulti{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Multi", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 61 + }, + "hiddenSeries": false, + "id": 39, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperCheck{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperCheck{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Check", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 69 + }, + "hiddenSeries": false, + "id": 40, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperClose{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperClose{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Close", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 69 + }, + "hiddenSeries": false, + "id": 41, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperWatchResponse{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperWatchResponse{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Watch response", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "reqps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 77 + }, + "hiddenSeries": false, + "id": 42, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperUserExceptions{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperUserExceptions{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "User Exceptions", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 77 + }, + "hiddenSeries": false, + "id": 43, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperHardwareExceptions{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperHardwareExceptions{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Hardware Exceptions", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 85 + }, + "hiddenSeries": false, + "id": 46, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperBytesReceived{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperBytesReceived{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Bytes received", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 85 + }, + "hiddenSeries": false, + "id": 45, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperBytesSent{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperBytesSent{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Bytes sent", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "binBps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of sessions (connections) to ZooKeeper. Should be no more than one, because using more than one connection to ZooKeeper may lead to bugs due to lack of linearizability (stale reads) that ZooKeeper consistency model allows.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 93 + }, + "hiddenSeries": false, + "id": 48, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_ZooKeeperSession", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Sessions", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of ephemeral nodes hold in ZooKeeper.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 93 + }, + "hiddenSeries": false, + "id": 47, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_EphemeralNode", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ephemeral Node", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of watches (event subscriptions) in ZooKeeper.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 101 + }, + "hiddenSeries": false, + "id": 50, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_ZooKeeperWatch", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Watches", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of requests to ZooKeeper in fly.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 101 + }, + "hiddenSeries": false, + "id": 49, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "ClickHouseMetrics_ZooKeeperRequest", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Requests", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "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": "Number of times an error happened while trying to remove ephemeral node. This is not an issue, because our implementation of ZooKeeper library guarantee that the session will expire and the node will be removed.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 109 + }, + "hiddenSeries": false, + "id": 70, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 2, + "maxDataPoints": 200, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.2", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_CannotRemoveEphemeralNode{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_CannotRemoveEphemeralNode{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Remove ephemeral node failed", + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "transparent": true, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:176", + "format": "cps", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:177", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "Zookeeper", + "type": "row" + } + ], + "refresh": "30s", + "schemaVersion": 27, + "style": "dark", + "tags": [ + "ClickHouse", + "DB" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "Prometheus" + }, + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "DataSource", + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "allValue": null, + "current": {}, + "datasource": "${DS_PROMETHEUS}", + "definition": "label_values(ClickHouseAsyncMetrics_Uptime, instance)", + "description": null, + "error": null, + "hide": 0, + "includeAll": true, + "label": "Node", + "multi": true, + "name": "instance", + "options": [], + "query": { + "query": "label_values(ClickHouseAsyncMetrics_Uptime, instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 5, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "selected": false, + "text": "Yes", + "value": "1" + }, + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "Show trends", + "multi": false, + "name": "trends", + "options": [ + { + "selected": true, + "text": "Yes", + "value": "1" + }, + { + "selected": false, + "text": "No", + "value": "null" + } + ], + "query": "Yes : 1, No : null", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "allValue": null, + "current": { + "selected": false, + "text": "No", + "value": "null" + }, + "description": "Be aware of the points limit per timeseries for Grafana. This option may not work for a time range > 24h", + "error": null, + "hide": 0, + "includeAll": false, + "label": "Show peaks", + "multi": false, + "name": "peaks", + "options": [ + { + "selected": false, + "text": "Yes", + "value": "1" + }, + { + "selected": true, + "text": "No", + "value": "null" + } + ], + "query": "Yes : 1, No : null", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-3h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "ClickHouse", + "uid": "thEkJB_Mz", + "version": 40 + } \ No newline at end of file diff --git a/charts/langsmith-observability/examples/dashboards/nginx_dashboard.json b/charts/langsmith-observability/examples/dashboards/nginx_dashboard.json new file mode 100644 index 00000000..ce1c1027 --- /dev/null +++ b/charts/langsmith-observability/examples/dashboards/nginx_dashboard.json @@ -0,0 +1,1030 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS-DNTG", + "label": "Prometheus-dntg", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "6.7.4" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "singlestat", + "name": "Singlestat", + "version": "" + } + ], + "annotations": { + "list": [ + { + "$$hashKey": "object:122", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Official dashboard for NGINX Prometheus exporter\r\n(Nothing Different, Just Primp!)", + "editable": true, + "gnetId": 12767, + "graphTooltip": 0, + "id": null, + "iteration": 1602300844890, + "links": [], + "panels": [ + { + "datasource": "${DS_PROMETHEUS-DNTG}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 28, + "title": "Status", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": true, + "colorPostfix": false, + "colorPrefix": false, + "colorValue": false, + "colors": [ + "#E02F44", + "#FF9830", + "#299c46" + ], + "datasource": "${DS_PROMETHEUS-DNTG}", + "decimals": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 1 + }, + "id": 8, + "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": "instance", + "repeatDirection": "h", + "sparkline": { + "fillColor": "rgba(31, 118, 189, 0.18)", + "full": false, + "lineColor": "rgb(31, 120, 193)", + "show": false + }, + "tableColumn": "", + "targets": [ + { + "expr": "nginx_up{instance=~\"$instance\"}", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "1,1", + "timeFrom": null, + "timeShift": null, + "title": "NGINX Status for $instance", + "type": "singlestat", + "valueFontSize": "100%", + "valueMaps": [ + { + "op": "=", + "text": "Down", + "value": "0" + }, + { + "op": "=", + "text": "Up", + "value": "1" + } + ], + "valueName": "current" + }, + { + "collapsed": false, + "datasource": "${DS_PROMETHEUS-DNTG}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 4, + "panels": [], + "title": "Metrics", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS-DNTG}", + "decimals": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 8 + }, + "hiddenSeries": false, + "id": 10, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(nginx_connections_accepted{instance=~\"$instance\"}[5m])", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + }, + { + "expr": "sum(irate(nginx_connections_accepted[5m]))", + "interval": "", + "legendFormat": "total accepted", + "refId": "D" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Accepted Connections", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": 1, + "format": "short", + "label": "Connections (rate)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS-DNTG}", + "decimals": null, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 8 + }, + "hiddenSeries": false, + "id": 19, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(nginx_connections_handled{instance=~\"$instance\"}[5m])", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}} handled", + "refId": "B" + }, + { + "expr": "sum(irate(nginx_connections_handled[5m]))", + "interval": "", + "legendFormat": "total handled", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Processed Connections", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": 1, + "format": "short", + "label": "Connections (rate)", + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": "", + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS-DNTG}", + "decimals": 0, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 14, + "w": 6, + "x": 0, + "y": 18 + }, + "hiddenSeries": false, + "id": 12, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "nginx_connections_active{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + }, + { + "expr": "sum(nginx_connections_active{instance=~\"$instance\"})", + "interval": "", + "legendFormat": "total", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Active Connections", + "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": "Connections", + "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-DNTG}", + "decimals": 0, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 14, + "w": 6, + "x": 6, + "y": 18 + }, + "hiddenSeries": false, + "id": 22, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "nginx_connections_reading{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "B" + }, + { + "expr": "sum(nginx_connections_reading{instance=~\"$instance\"})", + "interval": "", + "legendFormat": "total", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Reading Connections", + "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": "Connections", + "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-DNTG}", + "decimals": 0, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 14, + "w": 6, + "x": 12, + "y": 18 + }, + "hiddenSeries": false, + "id": 21, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "nginx_connections_waiting{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "C" + }, + { + "expr": "sum(nginx_connections_waiting{instance=~\"$instance\"})", + "interval": "", + "legendFormat": "total", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Waiting Connections", + "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": "Connections", + "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-DNTG}", + "decimals": 0, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 14, + "w": 6, + "x": 18, + "y": 18 + }, + "hiddenSeries": false, + "id": 20, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "nginx_connections_writing{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "D" + }, + { + "expr": "sum(nginx_connections_writing{instance=~\"$instance\"})", + "interval": "", + "legendFormat": "total", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Writing Connections", + "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": "Connections", + "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-DNTG}", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 32 + }, + "hiddenSeries": false, + "id": 15, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "hideZero": false, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(nginx_http_requests_total{instance=~\"$instance\"}[2m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}} qps", + "refId": "A" + }, + { + "expr": "sum(irate(nginx_http_requests_total[5m]))", + "interval": "", + "legendFormat": "total qps", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "QPS", + "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": 22, + "style": "dark", + "tags": [ + "nginx", + "prometheus", + "nginx prometheus exporter" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "default", + "value": "default" + }, + "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-DNTG}", + "definition": "label_values(nginx_up, instance)", + "hide": 0, + "includeAll": true, + "index": -1, + "label": "", + "multi": true, + "name": "instance", + "options": [], + "query": "label_values(nginx_up, instance)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "NGINX", + "uid": "MsjffzSZz", + "variables": { + "list": [] + }, + "version": 2 + } \ No newline at end of file diff --git a/charts/langsmith-observability/examples/dashboards/postgres_dashboard.json b/charts/langsmith-observability/examples/dashboards/postgres_dashboard.json new file mode 100644 index 00000000..6a07073e --- /dev/null +++ b/charts/langsmith-observability/examples/dashboards/postgres_dashboard.json @@ -0,0 +1,3167 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "DS_PROMETHEUS", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "6.3.5" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "singlestat", + "name": "Singlestat", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "This dashboard works with postgres_exporter for prometheus", + "editable": true, + "gnetId": 9628, + "graphTooltip": 0, + "id": null, + "iteration": 1568751813814, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 34, + "panels": [], + "title": "General Counters, CPU, Memory and File Descriptor Stats", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": true, + "colors": [ + "#299c46", + "#7eb26d", + "#d44a3a" + ], + "datasource": "${DS_PROMETHEUS}", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 0, + "y": 1 + }, + "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, + "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": "pg_static{release=\"$release\", instance=\"$instance\"}", + "format": "time_series", + "instant": true, + "intervalFactor": 1, + "legendFormat": "{{short_version}}", + "refId": "A" + } + ], + "thresholds": "", + "title": "Version", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "name" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "${DS_PROMETHEUS}", + "description": "start time of the process", + "format": "dateTimeFromNow", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 4, + "y": 1 + }, + "id": 28, + "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": "110%", + "prefix": "", + "prefixFontSize": "110%", + "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": "pg_postmaster_start_time_seconds{release=\"$release\", instance=\"$instance\"} * 1000", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Start Time", + "type": "singlestat", + "valueFontSize": "70%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "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}", + "format": "decbytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 8, + "y": 1 + }, + "height": "200px", + "id": 10, + "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(pg_stat_database_tup_fetched{datname=~\"$datname\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "refId": "A", + "step": 4 + } + ], + "thresholds": "", + "title": "Current fetch data", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "format": "short", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 12, + "y": 1 + }, + "height": "200px", + "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(pg_stat_database_tup_inserted{release=\"$release\", datname=~\"$datname\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "refId": "A", + "step": 4 + } + ], + "thresholds": "", + "title": "Current insert data", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "format": "short", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 16, + "y": 1 + }, + "height": "200px", + "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(pg_stat_database_tup_updated{datname=~\"$datname\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "refId": "A", + "step": 4 + } + ], + "thresholds": "", + "title": "Current update data", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 1 + }, + "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, + "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": "pg_settings_max_connections{release=\"$release\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Max Connections", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "description": "Average user and system CPU time spent in seconds.", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 3 + }, + "id": 22, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "avg(rate(process_cpu_seconds_total{release=\"$release\", instance=\"$instance\"}[5m]) * 1000)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "CPU Time", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Average CPU Usage", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "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": "Virtual and Resident memory size in bytes, averages over 5 min interval", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 3 + }, + "id": 24, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "avg(rate(process_resident_memory_bytes{release=\"$release\", instance=\"$instance\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Resident Mem", + "refId": "A" + }, + { + "expr": "avg(rate(process_virtual_memory_bytes{release=\"$release\", instance=\"$instance\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Virtual Mem", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Average Memory Usage", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "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}", + "description": "Number of open file descriptors", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 3 + }, + "id": 26, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "process_open_fds{release=\"$release\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Open FD", + "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": [ + { + "decimals": null, + "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 + } + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 32, + "panels": [], + "title": "Settings", + "type": "row" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "${DS_PROMETHEUS}", + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 11 + }, + "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, + "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": "pg_settings_shared_buffers_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Shared Buffers", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 3, + "y": 11 + }, + "id": 42, + "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": "pg_settings_effective_cache_size_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Effective Cache", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 6, + "y": 11 + }, + "id": 44, + "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": "pg_settings_maintenance_work_mem_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Maintenance Work Mem", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 9, + "y": 11 + }, + "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, + "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": "pg_settings_work_mem_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": "", + "title": "Work Mem", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "decimals": 1, + "format": "bytes", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 11 + }, + "id": 48, + "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": "pg_settings_max_wal_size_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Max WAL Size", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 15, + "y": 11 + }, + "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": "pg_settings_random_page_cost{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Random Page Cost", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 18, + "y": 11 + }, + "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, + "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": "pg_settings_seq_page_cost{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Seq Page Cost", + "type": "singlestat", + "valueFontSize": "80%", + "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}", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 11 + }, + "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": "pg_settings_max_worker_processes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Max Worker Processes", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "avg" + }, + { + "cacheTimeout": null, + "colorBackground": false, + "colorValue": false, + "colors": [ + "#299c46", + "rgba(237, 129, 40, 0.89)", + "#d44a3a" + ], + "datasource": "${DS_PROMETHEUS}", + "format": "none", + "gauge": { + "maxValue": 100, + "minValue": 0, + "show": false, + "thresholdLabels": false, + "thresholdMarkers": true + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 22, + "y": 11 + }, + "id": 56, + "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": "pg_settings_max_parallel_workers{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "thresholds": "", + "title": "Max Parallel Workers", + "type": "singlestat", + "valueFontSize": "80%", + "valueMaps": [ + { + "op": "=", + "text": "N/A", + "value": "null" + } + ], + "valueName": "current" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 30, + "panels": [], + "title": "Database Stats", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 15 + }, + "id": 1, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "links": [], + "nullPointMode": "connected", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 3, + "points": true, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "pg_stat_activity_count{datname=~\"$datname\", instance=~\"$instance\", state=\"active\"} !=0", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{datname}}, s: {{state}}", + "refId": "A", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Active sessions", + "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": 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}", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 15 + }, + "id": 60, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(pg_stat_database_xact_commit{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}} commits", + "refId": "A" + }, + { + "expr": "irate(pg_stat_database_xact_rollback{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}} rollbacks", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Transactions", + "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}", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 15 + }, + "id": 8, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sideWidth": null, + "sort": "current", + "sortDesc": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "pg_stat_database_tup_updated{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Update data", + "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}", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 22 + }, + "id": 5, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "pg_stat_database_tup_fetched{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Fetch data (SELECT)", + "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}", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 22 + }, + "id": 6, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "pg_stat_database_tup_inserted{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Insert data", + "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": 0, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 22 + }, + "id": 3, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "hideEmpty": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "pg_locks_count{datname=~\"$datname\", instance=~\"$instance\", mode=~\"$mode\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}},{{mode}}", + "refId": "A", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Lock tables", + "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": "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}", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 29 + }, + "id": 14, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sort": "total", + "sortDesc": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "pg_stat_database_tup_returned{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Return data", + "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}", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 29 + }, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": false, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "pg_stat_activity_count{datname=~\"$datname\", instance=~\"$instance\", state=~\"idle|idle in transaction|idle in transaction (aborted)\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}, s: {{state}}", + "refId": "A", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Idle sessions", + "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": "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}", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 29 + }, + "id": 7, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "pg_stat_database_tup_deleted{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Delete data", + "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": 2, + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 36 + }, + "id": 62, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "pg_stat_database_blks_hit{instance=\"$instance\", datname=~\"$datname\"} / (pg_stat_database_blks_read{instance=\"$instance\", datname=~\"$datname\"} + pg_stat_database_blks_hit{instance=\"$instance\", datname=~\"$datname\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ datname }}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Cache Hit Rate", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": 4, + "format": "percentunit", + "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}", + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 36 + }, + "id": 64, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(pg_stat_bgwriter_buffers_backend_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "buffers_backend", + "refId": "A" + }, + { + "expr": "irate(pg_stat_bgwriter_buffers_alloc_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "buffers_alloc", + "refId": "B" + }, + { + "expr": "irate(pg_stat_bgwriter_buffers_backend_fsync_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "backend_fsync", + "refId": "C" + }, + { + "expr": "irate(pg_stat_bgwriter_buffers_checkpoint_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "buffers_checkpoint", + "refId": "D" + }, + { + "expr": "irate(pg_stat_bgwriter_buffers_clean_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "buffers_clean", + "refId": "E" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Buffers (bgwriter)", + "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": 0, + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 36 + }, + "id": 66, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(pg_stat_database_conflicts{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}} conflicts", + "refId": "B" + }, + { + "expr": "irate(pg_stat_database_deadlocks{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}} deadlocks", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Conflicts/Deadlocks", + "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": "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": "Total amount of data written to temporary files by queries in this database. All temporary files are counted, regardless of why the temporary file was created, and regardless of the log_temp_files setting.", + "fill": 1, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 43 + }, + "id": 68, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": true, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(pg_stat_database_temp_bytes{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Temp File (Bytes)", + "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": "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}", + "fill": 1, + "gridPos": { + "h": 7, + "w": 16, + "x": 8, + "y": 43 + }, + "id": 70, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(pg_stat_bgwriter_checkpoint_write_time_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "write_time - Total amount of time that has been spent in the portion of checkpoint processing where files are written to disk.", + "refId": "B" + }, + { + "expr": "irate(pg_stat_bgwriter_checkpoint_sync_time_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "sync_time - Total amount of time that has been spent in the portion of checkpoint processing where files are synchronized to disk.", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeShift": null, + "title": "Checkpoint Stats", + "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 + } + } + ], + "refresh": "10s", + "schemaVersion": 19, + "style": "dark", + "tags": [ + "postgres", + "db", + "stats" + ], + "templating": { + "list": [ + { + "hide": 0, + "label": "datasource", + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "auto": true, + "auto_count": 200, + "auto_min": "1s", + "current": { + "text": "auto", + "value": "$__auto_interval_interval" + }, + "hide": 0, + "label": "Interval", + "name": "interval", + "options": [ + { + "selected": true, + "text": "auto", + "value": "$__auto_interval_interval" + }, + { + "selected": false, + "text": "1s", + "value": "1s" + }, + { + "selected": false, + "text": "5s", + "value": "5s" + }, + { + "selected": false, + "text": "1m", + "value": "1m" + }, + { + "selected": false, + "text": "5m", + "value": "5m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + }, + { + "selected": false, + "text": "6h", + "value": "6h" + }, + { + "selected": false, + "text": "1d", + "value": "1d" + } + ], + "query": "1s,5s,1m,5m,1h,6h,1d", + "refresh": 2, + "skipUrlSync": false, + "type": "interval" + }, + { + "allValue": null, + "current": {}, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "hide": 0, + "includeAll": false, + "label": "Namespace", + "multi": false, + "name": "namespace", + "options": [], + "query": "query_result(pg_exporter_last_scrape_duration_seconds)", + "refresh": 2, + "regex": "/.*kubernetes_namespace=\"([^\"]+).*/", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "hide": 0, + "includeAll": false, + "label": "Release", + "multi": false, + "name": "release", + "options": [], + "query": "query_result(pg_exporter_last_scrape_duration_seconds{kubernetes_namespace=\"$namespace\"})", + "refresh": 2, + "regex": "/.*release=\"([^\"]+)/", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "hide": 0, + "includeAll": false, + "label": "Instance", + "multi": false, + "name": "instance", + "options": [], + "query": "query_result(pg_up{release=\"$release\"})", + "refresh": 1, + "regex": "/.*instance=\"([^\"]+).*/", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Database", + "multi": true, + "name": "datname", + "options": [], + "query": "label_values(datname)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "${DS_PROMETHEUS}", + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Lock table", + "multi": true, + "name": "mode", + "options": [], + "query": "label_values({mode=~\"accessexclusivelock|accesssharelock|exclusivelock|rowexclusivelock|rowsharelock|sharelock|sharerowexclusivelock|shareupdateexclusivelock\"}, mode)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-6h", + "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": "PostgreSQL Database", + "uid": "000000039", + "version": 1 +} \ No newline at end of file diff --git a/charts/langsmith-observability/examples/dashboards/redis_dashboard.json b/charts/langsmith-observability/examples/dashboards/redis_dashboard.json new file mode 100644 index 00000000..9d4f8a16 --- /dev/null +++ b/charts/langsmith-observability/examples/dashboards/redis_dashboard.json @@ -0,0 +1,2542 @@ +{ + "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": "redis_exporter for redis", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "semi-dark-green" + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 0 + }, + "id": 2, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "increase(redis_commands_processed_total{instance=\"$instance\"}[3m])/180", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Ops/sec[3m]", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 3, + "y": 0 + }, + "id": 6, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto", + "text": {} + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_net_input_bytes_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Input", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_net_output_bytes_total{instance=\"$instance\"}[5m])", + "hide": false, + "interval": "", + "legendFormat": "Output", + "refId": "B" + } + ], + "title": "Network", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "links": [], + "mappings": [ + { + "options": { + "match": "null+nan", + "result": { + "index": 0, + "text": "nil" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 3, + "x": 8, + "y": 0 + }, + "id": 41, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "100 * rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m]) / (rate(redis_keyspace_misses_total{instance=\"$instance\"}[5m]) + rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m])) ", + "interval": "", + "legendFormat": "Hit", + "refId": "A" + } + ], + "title": "Key Hit Rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100000000, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 11, + "y": 0 + }, + "id": 9, + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 16, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_bytes{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Used Memory ", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_peak_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Peak", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_lua_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Lua", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_dataset_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Dataset", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_overhead_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Overhead", + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_rss_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Rss", + "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "windows_cs_physical_memory_bytes{instance=\"$host:9182\"} or node_memory_MemTotal_bytes{targets=\"$host:9100\"}", + "hide": false, + "interval": "", + "legendFormat": "Node Mem Total", + "refId": "G" + } + ], + "title": "Memory", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 0 + }, + "id": 11, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_uptime_in_seconds{instance=\"$instance\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "UpTime", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 22, + "y": 0 + }, + "id": 16, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_instance_info{instance=\"$instance\"}", + "interval": "", + "legendFormat": "{{role}}", + "refId": "A" + } + ], + "title": "Role", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 3 + }, + "id": 3, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_connected_clients{instance=\"$instance\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "connected clients", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 3 + }, + "id": 12, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_instance_info{instance=\"$instance\"}", + "interval": "", + "legendFormat": "{{redis_version}}", + "refId": "A" + } + ], + "title": "Redis Version", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "index": 0, + "text": "Stopped" + }, + "1": { + "index": 1, + "text": "Running" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 22, + "y": 3 + }, + "id": 15, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_up{instance=\"$instance\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "State", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 6 + }, + "id": 4, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "sum(redis_db_keys{instance=\"$instance\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Number of keys", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 3, + "y": 6 + }, + "id": 7, + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 16, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_expired_keys_total{instance=\"$instance\"}[3m])", + "interval": "", + "legendFormat": "expired keys", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_evicted_keys_total{instance=\"$instance\"}[3m])", + "hide": false, + "interval": "", + "legendFormat": "evicted keys", + "refId": "B" + } + ], + "title": "keys", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 9, + "x": 11, + "y": 6 + }, + "id": 10, + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 16, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_keyspace_hits_total{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Hits", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_keyspace_misses_total{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Misses", + "refId": "B" + } + ], + "title": "keys", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 20, + "y": 6 + }, + "id": 14, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_instance_info{instance=\"$instance\"}", + "interval": "", + "legendFormat": "{{maxmemory_policy}}", + "refId": "A" + } + ], + "title": "Maxmemory Policy", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 9 + }, + "id": 36, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "100 * (rate(redis_cpu_sys_children_seconds_total{instance=\"$instance\"}[5m]) + rate(redis_cpu_sys_seconds_total{instance=\"$instance\"}[5m]))", + "interval": "", + "legendFormat": "System", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "100 * (rate(redis_cpu_user_children_seconds_total{instance=\"$instance\"}[5m]) + rate(redis_cpu_user_seconds_total{instance=\"$instance\"}[5m]))", + "interval": "", + "legendFormat": "User", + "refId": "B" + } + ], + "title": "CPU Utilization", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 9 + }, + "id": 18, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "topk(5, irate(redis_commands_total{instance=\"$instance\"} [5m]))", + "interval": "", + "legendFormat": "{{cmd}}", + "refId": "A" + } + ], + "title": "IOPS", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 9 + }, + "id": 38, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_net_input_bytes_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Inbound", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_net_output_bytes_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Outbound", + "refId": "B" + } + ], + "title": "Network Throughput", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 9 + }, + "id": 40, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_connections_received_total{instance=\"$instance\"}[5m]) ", + "interval": "", + "legendFormat": "Inbound", + "refId": "A" + } + ], + "title": "Conns/sec", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 16 + }, + "id": 28, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_db_keys{instance=\"$instance\"}", + "interval": "", + "legendFormat": "{{db}}", + "refId": "A" + } + ], + "title": "Keys / DB", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 16 + }, + "id": 30, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_db_avg_ttl_seconds{instance='$instance'}", + "interval": "", + "legendFormat": "{{db}}", + "refId": "A" + } + ], + "title": "Average TTL", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 16 + }, + "id": 32, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_expired_keys_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Expired", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "rate(redis_evicted_keys_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Evicted", + "refId": "B" + } + ], + "title": "Expired / Evicted keys", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 16 + }, + "id": 34, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "100 * rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m]) / (rate(redis_keyspace_misses_total{instance=\"$instance\"}[5m]) + rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m])) ", + "interval": "", + "legendFormat": "Hit", + "refId": "A" + } + ], + "title": "Hit Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 23 + }, + "id": 20, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_connected_clients{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Clients", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_config_maxclients{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Max Clients", + "refId": "B" + } + ], + "title": "Connections usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 23 + }, + "id": 26, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_blocked_clients{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Blocked", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_rejected_connections_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Rejected", + "refId": "B" + } + ], + "title": "Blocked and Rejected clients", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 23 + }, + "id": 22, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(rate(redis_commands_duration_seconds_total{instance=\"$instance\"}[5m])) / sum(rate(redis_commands_processed_total{instance=\"$instance\"}[5m]))", + "interval": "", + "legendFormat": "Response Time", + "refId": "A" + } + ], + "title": "Response time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 23 + }, + "id": 24, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_slowlog_length{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Response Time", + "refId": "A" + } + ], + "title": "Slowlog increment", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "1m", + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "database-metrics", + "value": "database-metrics" + }, + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "definition": "label_values(redis_up, job)", + "includeAll": false, + "label": "Cluster", + "name": "cluster", + "options": [], + "query": { + "query": "label_values(redis_up, job)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "10.0.12.210:9121", + "value": "10.0.12.210:9121" + }, + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "definition": "label_values({job=\"$cluster\"},instance)", + "includeAll": false, + "label": "Instance", + "name": "instance", + "options": [], + "query": { + "query": "label_values({job=\"$cluster\"},instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "", + "value": "" + }, + "definition": "label_values({instance=~\"$instance\"},instance)", + "includeAll": false, + "label": "Host", + "name": "host", + "options": [], + "query": { + "query": "label_values({instance=~\"$instance\"},instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "/(.*):.*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Redis Overview", + "uid": "R7HGKm27k", + "version": 2 + } \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml index cac28b93..1bc1b011 100644 --- a/charts/langsmith-observability/templates/otel/gateway.yaml +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -13,6 +13,7 @@ spec: prometheus: config: scrape_configs: + # Fetches all the metrics from the langsmith namespace (LS services + CH) - job_name: langsmith-services metrics_path: /metrics kubernetes_sd_configs: @@ -25,7 +26,7 @@ spec: regex: "langsmith-.*" action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] - regex: "(backend|platform|playground|host-backend|ch-metrics)" + regex: "(backend|platform|playground|host-backend|metrics)" action: keep # Promote useful metadata into regular labels - source_labels: [__meta_kubernetes_service_name] @@ -35,6 +36,7 @@ spec: # Replace the default "host:port" as Prom's instance label - source_labels: [__address__] target_label: instance + # Fetches all the metrics from the metrics exporters in Langsmith-Observability namespace - job_name: database-metrics metrics_path: /metrics kubernetes_sd_configs: @@ -72,6 +74,12 @@ spec: check_interval: 1m limit_percentage: 90 spike_limit_percentage: 80 + filter/drop_go_metrics: + metrics: + exclude: + match_type: regexp + metric_names: + - "go_.*" exporters: {{ if .Values.otelCollector.metrics.enabled }} @@ -91,7 +99,7 @@ spec: {{ if .Values.otelCollector.metrics.enabled }} metrics/langsmith: receivers: [prometheus] - processors: [batch, memory_limiter] + processors: [filter/drop_go_metrics, batch, memory_limiter] exporters: [otlphttp/metrics] {{ end }} {{ if .Values.otelCollector.traces.enabled }} diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml index 47d661f7..beb964e8 100644 --- a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -1,6 +1,6 @@ {{- if .Values.otelCollector.metrics.enabled }} apiVersion: rbac.authorization.k8s.io/v1 -kind: Role +kind: Role # Role for the main Langsmith namespace metadata: name: get-pod-metrics namespace: {{ .Values.langsmithNamespace }} @@ -10,10 +10,34 @@ rules: verbs: ["get", "watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding +kind: Role # Role for the observability namespace metadata: - name: get-pod-metrics-binding + name: get-pod-metrics + namespace: {{ .Release.Namespace }} +rules: + - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "watch", "list"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding # RolBinding for the main Langsmith namespace +metadata: + name: get-pod-metrics-binding-langsmith namespace: {{ .Values.langsmithNamespace }} +roleRef: + kind: Role + name: get-pod-metrics + namespace: {{ .Release.Namespace }} +subjects: + - kind: ServiceAccount + name: {{ .Values.otelCollector.name }}-gateway-collector + namespace: {{ .Release.Namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding # RolBinding for the observability namespace +metadata: + name: get-pod-metrics-binding-langsmith-observability + namespace: {{ .Release.Namespace }} roleRef: kind: Role name: get-pod-metrics diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index 780530bb..ee8b8cc3 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -71,7 +71,7 @@ loki: chunks: langsmith-lgtm-stack ruler: langsmith-lgtm-stack s3: - endpoint: {{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000 + endpoint: "{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000" secretAccessKey: admin_password accessKeyId: admin insecure: true @@ -86,7 +86,6 @@ loki: ingester: chunk_encoding: snappy - max_chunk_age: 10s querier: # Default is 4, if you have enough memory and CPU you can increase, reduce if OOMing max_concurrent: 4 @@ -147,11 +146,10 @@ mimir: storage: backend: s3 s3: - endpoint: {{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000 + endpoint: "{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000" bucket_name: langsmith-lgtm-stack secret_access_key: admin_password access_key_id: admin - s3forcepathstyle: true insecure: true blocks_storage: @@ -259,7 +257,7 @@ tempo: access_key: admin secret_key: admin_password bucket: langsmith-lgtm-stack - endpoint: {{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000 + endpoint: "{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000" s3forcepathstyle: true # Required true for minio insecure: true prefix: tempo From aa117d8c41521c79c5c21876807ebbca13deea81 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Mon, 23 Jun 2025 15:53:02 -0700 Subject: [PATCH 16/27] tested end to end with minio and external S3 --- .../dashboards/clickhouse.json | 11521 ++++++++++++++++ .../dashboards/kube-state-metrics.json | 4497 ++++++ .../dashboards/langsmith-services.json | 2095 +++ .../dashboards/nginx.json | 965 ++ .../dashboards/postgres.json | 3079 +++++ .../dashboards/redis.json | 2956 ++++ .../dashboards/clickhouse_dashboard.json | 11242 --------------- .../examples/dashboards/nginx_dashboard.json | 1030 -- .../dashboards/postgres_dashboard.json | 3167 ----- .../examples/dashboards/redis_dashboard.json | 2542 ---- .../examples/e2e-stack-minio.yaml | 80 +- .../examples/e2e-stack-s3.yaml | 95 +- .../examples/metric-exporters-only.yaml | 3 + .../grafana/grafana-dashboards-configmap.yaml | 21 + .../templates/otel/gateway.yaml | 4 +- .../templates/otel/logs-sidecar.yaml | 2 +- .../templates/otel/rbac-gateway.yaml | 4 +- charts/langsmith-observability/values.yaml | 43 +- .../langsmith/examples/telemetry_config.yaml | 18 + charts/langsmith/templates/_helpers.tpl | 2 +- charts/langsmith/templates/config-map.yaml | 2 +- charts/langsmith/values.yaml | 7 +- 22 files changed, 25279 insertions(+), 18096 deletions(-) create mode 100644 charts/langsmith-observability/dashboards/clickhouse.json create mode 100644 charts/langsmith-observability/dashboards/kube-state-metrics.json create mode 100644 charts/langsmith-observability/dashboards/langsmith-services.json create mode 100644 charts/langsmith-observability/dashboards/nginx.json create mode 100644 charts/langsmith-observability/dashboards/postgres.json create mode 100644 charts/langsmith-observability/dashboards/redis.json delete mode 100644 charts/langsmith-observability/examples/dashboards/clickhouse_dashboard.json delete mode 100644 charts/langsmith-observability/examples/dashboards/nginx_dashboard.json delete mode 100644 charts/langsmith-observability/examples/dashboards/postgres_dashboard.json delete mode 100644 charts/langsmith-observability/examples/dashboards/redis_dashboard.json create mode 100644 charts/langsmith-observability/templates/grafana/grafana-dashboards-configmap.yaml create mode 100644 charts/langsmith/examples/telemetry_config.yaml diff --git a/charts/langsmith-observability/dashboards/clickhouse.json b/charts/langsmith-observability/dashboards/clickhouse.json new file mode 100644 index 00000000..222b4c8a --- /dev/null +++ b/charts/langsmith-observability/dashboards/clickhouse.json @@ -0,0 +1,11521 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "enable": false, + "expr": "resets(ClickHouseAsyncMetrics_Uptime{instance=~\"$instance\"}[$__rate_interval])", + "hide": false, + "iconColor": "rgba(255, 96, 96, 1)", + "name": "Restarts", + "showIn": 0, + "step": "60s", + "tagKeys": "instance", + "titleFormat": "Restart", + "useValueForTime": false + } + ] + }, + "description": "ClickHouse internal exporter metrics", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 12, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": false, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "ClickHouse monitoring docs", + "tooltip": "", + "type": "link", + "url": "https://clickhouse.tech/docs/en/operations/monitoring/" + } + ], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "uptime" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 14, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_VersionInteger", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_Revision", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseAsyncMetrics_NumberOfTables", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseAsyncMetrics_Uptime", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseAsyncMetrics_NumberOfDatabases", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "E" + } + ], + "title": "Nodes", + "transformations": [ + { + "id": "seriesToColumns", + "options": { + "byField": "instance" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": true, + "Time 10": true, + "Time 2": true, + "Time 3": true, + "Time 4": true, + "Time 5": true, + "Time 6": true, + "Time 7": true, + "Time 8": true, + "Time 9": true, + "Value #A 2": true, + "Value #B 2": true, + "Value #C 2": true, + "Value #D 2": true, + "Value #E 2": true, + "__name__ 1": true, + "__name__ 10": true, + "__name__ 2": true, + "__name__ 3": true, + "__name__ 4": true, + "__name__ 5": true, + "__name__ 6": true, + "__name__ 7": true, + "__name__ 8": true, + "__name__ 9": true, + "job 1": true, + "job 10": true, + "job 2": true, + "job 3": true, + "job 4": true, + "job 5": true, + "job 6": true, + "job 7": true, + "job 8": true, + "job 9": true + }, + "indexByName": { + "Time 1": 6, + "Time 10": 37, + "Time 2": 9, + "Time 3": 13, + "Time 4": 16, + "Time 5": 20, + "Time 6": 23, + "Time 7": 27, + "Time 8": 30, + "Time 9": 34, + "Value #A 1": 1, + "Value #A 2": 12, + "Value #B 1": 2, + "Value #B 2": 19, + "Value #C 1": 3, + "Value #C 2": 26, + "Value #D 1": 5, + "Value #D 2": 33, + "Value #E 1": 4, + "Value #E 2": 40, + "__name__ 1": 7, + "__name__ 10": 38, + "__name__ 2": 10, + "__name__ 3": 14, + "__name__ 4": 17, + "__name__ 5": 21, + "__name__ 6": 24, + "__name__ 7": 28, + "__name__ 8": 31, + "__name__ 9": 35, + "instance": 0, + "job 1": 8, + "job 10": 39, + "job 2": 11, + "job 3": 15, + "job 4": 18, + "job 5": 22, + "job 6": 25, + "job 7": 29, + "job 8": 32, + "job 9": 36 + }, + "renameByName": { + "Value #A 1": "version", + "Value #B 1": "revision", + "Value #C 1": "tables", + "Value #D 1": "uptime", + "Value #E 1": "databases" + } + } + } + ], + "transparent": true, + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Total amount of memory (bytes) allocated by the server.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 29, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_MemoryTracking", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Memory", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of connections to TCP server (clients with native interface), also included server-server distributed query connections. \nNumber of connections to HTTP server", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 73, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_TCPConnection", + "interval": "", + "legendFormat": "tcp - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_HTTPConnection", + "hide": false, + "interval": "", + "legendFormat": "http - {{instance}}", + "refId": "B" + } + ], + "title": "Connections", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times the number of query processing threads was lowered due to slow reads.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 13 + }, + "id": 72, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBackoff{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBackoff{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Read backoff", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of reads from a file that were slow. This indicate system overload. Thresholds are controlled by read_backoff_* settings.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 13 + }, + "id": 71, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SlowRead{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SlowRead{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Slow reads", + "transparent": true, + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 12, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of queries to be interpreted and potentially executed. Does not include queries that failed to parse or were rejected due to AST size limits, quota limits or limits on the number of simultaneously running queries. May include internal queries initiated by ClickHouse itself. Does not count subqueries.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 19 + }, + "id": 2, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_Query{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_Query{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Queries", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Same as Queries, but only for SELECT queries.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 19 + }, + "id": 3, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "title": "SELECT queries", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Same as Queries, but only for INSERT queries.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 251 + }, + "id": 4, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_InsertQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_InsertQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "title": "INSERT queries", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Same as Failed queries, but only for SELECT queries.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 251 + }, + "id": 6, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_FailedSelectQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_FailedSelectQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "title": "Failed SELECT queries", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of failed queries.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 259 + }, + "id": 5, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_FailedQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_FailedQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "title": "Failed queries", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times when memory limit exceeded for query.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 259 + }, + "id": 85, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_QueryMemoryLimitExceeded{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_QueryMemoryLimitExceeded{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "title": "Queries memory limit", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of queries that are stopped and waiting due to 'priority' setting.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 267 + }, + "id": 86, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseMetrics_QueryPreempted{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseMetrics_QueryPreempted{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "title": "Query preemted", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Same as Failed queries, but only for INSERT queries.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "peaks - 10.0.12.168:9363" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 267 + }, + "id": 7, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_FailedInsertQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_FailedInsertQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "B" + } + ], + "title": "Failed INSERT queries", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Avg queries latencies", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "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": 0, + "y": 275 + }, + "id": 8, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_QueryTimeMicroseconds{instance=~\"$instance\"}[$__range]) / increase(ClickHouseProfileEvents_Query{instance=~\"$instance\"}[$__range])", + "interval": "", + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Query latencies (avg)", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Avg SELECT queries latencies", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "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": 275 + }, + "id": 9, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_SelectQueryTimeMicroseconds{instance=~\"$instance\"}[$__range]) / increase(ClickHouseProfileEvents_SelectQuery{instance=~\"$instance\"}[$__range])", + "interval": "", + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "SELECT query latencies (avg)", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Avg INSERT queries latencies", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "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": 283 + }, + "id": 10, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_InsertQueryTimeMicroseconds{instance=~\"$instance\"}[$__range]) / increase(ClickHouseProfileEvents_InsertQuery{instance=~\"$instance\"}[$__range])", + "interval": "", + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "INSERT query latencies (avg)", + "transparent": true, + "type": "timeseries" + } + ], + "title": "Queries", + "type": "row" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 64, + "panels": [], + "title": "Insert", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of rows INSERTed to all tables.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 62, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_InsertedRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_InsertedRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Inserted rows", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of bytes (uncompressed; for columns as they stored in memory) INSERTed to all tables.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 20 + }, + "id": 65, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_InsertedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_InsertedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Inserted bytes", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times the INSERT of a block to a MergeTree table was throttled due to high number of active data parts for partition.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 66, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DelayedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DelayedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Delayed inserts", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times the INSERT of a block to a MergeTree table was rejected with 'Too many parts' exception due to high number of active data parts for partition.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 28 + }, + "id": 67, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_RejectedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_RejectedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Rejected inserts", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Total number of milliseconds spent while the INSERT of a block to a MergeTree table was throttled due to high number of active data parts for partition.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "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": 0, + "y": 36 + }, + "id": 69, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_DelayedInsertsMilliseconds{instance=~\"$instance\"}[$__range]) / increase(ClickHouseProfileEvents_DelayedInserts{instance=~\"$instance\"}[$__range])", + "interval": "", + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Delayed inserts blocks (avg)", + "transparent": true, + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 44 + }, + "id": 125, + "panels": [], + "title": "Select", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of data parts selected to read from a MergeTree table.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 45 + }, + "id": 126, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedParts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedParts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Parts", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of (non-adjacent) ranges in all data parts selected to read from a MergeTree table.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 45 + }, + "id": 127, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedRanges{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedRanges{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Ranges", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of marks (index granules) selected to read from a MergeTree table.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 53 + }, + "id": 128, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedMarks{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedMarks{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Marks", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of rows SELECTed from all tables.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 53 + }, + "id": 129, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Rows", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of bytes (uncompressed; for columns as they stored in memory) SELECTed from all tables.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 61 + }, + "id": 130, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_SelectedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Bytes", + "transparent": true, + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 69 + }, + "id": 17, + "panels": [], + "title": "IO", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times the 'lseek' function was called.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 70 + }, + "id": 20, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_Seek{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_Seek{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "lseek", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of files opened", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 70 + }, + "id": 19, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_FileOpen{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_FileOpen{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Open Files", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of reads (read/pread) from a file descriptor. Does not include sockets.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 78 + }, + "id": 22, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorRead{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorRead{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Read from FD", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of writes (write/pwrite) to a file descriptor. Does not include sockets.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 78 + }, + "id": 23, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWrite{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWrite{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Write to FD", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times the read (read/pread) from a file descriptor have failed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 86 + }, + "id": 24, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Read from FD failed", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times the read (read/pread) from a file descriptor have failed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 86 + }, + "id": 25, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Read from FD failed", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of bytes read from file descriptors. If the file is compressed, this will show the compressed data size.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 94 + }, + "id": 21, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Read bytes from FD", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of bytes written to file descriptors. If the file is compressed, this will show compressed data size.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 94 + }, + "id": 26, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWriteBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWriteBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Write bytes to FD", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of bytes (the number of bytes before decompression) read from compressed sources (files, network).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 102 + }, + "id": 51, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadCompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReadCompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Read compressed bytes", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of uncompressed bytes (the number of bytes after decompression) read from compressed sources (files, network).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 102 + }, + "id": 53, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_CompressedReadBufferBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_CompressedReadBufferBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Read uncompressed bytes", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of compressed blocks (the blocks of data that are compressed independent of each other) read from compressed sources (files, network).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 110 + }, + "id": 52, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_CompressedReadBufferBlocks{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_CompressedReadBufferBlocks{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Compressed blocks", + "transparent": true, + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 118 + }, + "id": 92, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 119 + }, + "id": 102, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_UncompressedCacheHits{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_UncompressedCacheHits{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Uncompressed Cache Hits", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 119 + }, + "id": 103, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_UncompressedCacheMisses{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_UncompressedCacheMisses{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Uncompressed Cache Misses", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 199 + }, + "id": 104, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MarkCacheHits{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MarkCacheHits{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Mark Cache Hits", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 199 + }, + "id": 105, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MarkCacheMisses{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MarkCacheMisses{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Mark Cache Misses", + "transparent": true, + "type": "timeseries" + } + ], + "title": "Cache", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 119 + }, + "id": 76, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of launched background merges.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 120 + }, + "id": 77, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_Merge{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_Merge{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Merge", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Rows read for background merges. This is the number of rows before merge.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 120 + }, + "id": 78, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergedRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergedRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Merged rows", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Uncompressed bytes (for columns as they stored in memory) that was read for background merges. This is the number before merge.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 200 + }, + "id": 79, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergedUncompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergedUncompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Merge uncompressed bytes", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Avg merge duration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "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": 200 + }, + "id": 80, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_MergesTimeMilliseconds{instance=~\"$instance\"}[$__range]) / increase(ClickHouseProfileEvents_Merge{instance=~\"$instance\"}[$__range])", + "interval": "", + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "Merge duration (avg)", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of rows INSERTed to MergeTree tables.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 208 + }, + "id": 81, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "MergeTree rows", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of blocks INSERTed to MergeTree tables. Each block forms a data part of level zero.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 208 + }, + "id": 82, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterBlocks{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterBlocks{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "MergeTree blocks", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Uncompressed bytes (for columns as they stored in memory) INSERTed to MergeTree tables.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 216 + }, + "id": 83, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterUncompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterUncompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "MergeTree uncompressed bytes", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Bytes written to filesystem for data INSERTed to MergeTree tables.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 216 + }, + "id": 84, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterCompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterCompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "MergeTree compressed bytes", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Disk space reserved for currently running background merges. It is slightly more than the total size of currently merging parts.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 224 + }, + "id": 123, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_DiskSpaceReservedForMerge", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Reserved space", + "transparent": true, + "type": "timeseries" + } + ], + "title": "Merge", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 120 + }, + "id": 90, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "The part is generating now, it is not in data_parts list.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 121 + }, + "id": 114, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_PartsTemporary", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Temporary", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "The part is in data_parts, but not used for SELECTs.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 121 + }, + "id": 115, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_PartsPreCommitted", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Pre commited", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "The part is in data_parts, but not used for SELECTs.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 161 + }, + "id": 116, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_PartsCommitted", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Commited", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Not active data part, but could be used by only current SELECTs, could be deleted after SELECTs finishes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 161 + }, + "id": 117, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_PartsOutdated", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Outdated", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Not active data part with identity refcounter, it is deleting right now by a cleaner.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 169 + }, + "id": 118, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_PartsDeleting", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Deleting", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Part was moved to another disk and should be deleted in own destructor.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 169 + }, + "id": 119, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_PartsDeleteOnDestroy", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Delete on destroy", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Wide parts.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 177 + }, + "id": 120, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_PartsWide", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Wide", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Compact parts.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 177 + }, + "id": 122, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_PartsCompact", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Compact", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "In-memory parts.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 185 + }, + "id": 121, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "ClickHouseMetrics_PartsInMemory", + "interval": "", + "legendFormat": "{{instance}}", + "range": true, + "refId": "A" + } + ], + "title": "In-memory", + "transparent": true, + "type": "timeseries" + } + ], + "title": "Parts", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 121 + }, + "id": 88, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of active tasks in BackgroundProcessingPool (merges, mutations, or replication queue bookkeeping)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 122 + }, + "id": 95, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundPoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "BackgroundPool task", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of active tasks in BackgroundFetchesPool", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 122 + }, + "id": 96, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundFetchesPoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "BackgroundFetchesPool task", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of active tasks in BackgroundProcessingPool for moves", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 130 + }, + "id": 97, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundMovePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "BackgroundMovePool task", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of active tasks in BackgroundSchedulePool. This pool is used for periodic ReplicatedMergeTree tasks, like cleaning old data parts, altering data parts, replica re-initialization, etc.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 130 + }, + "id": 98, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundSchedulePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "BackgroundSchedulePool task", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of active tasks in BackgroundBufferFlushSchedulePool. This pool is used for periodic Buffer flushes", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 138 + }, + "id": 99, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundBufferFlushSchedulePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "BackgroundBufferFlushSchedulePool task", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of active tasks in BackgroundDistributedSchedulePool. This pool is used for distributed sends that is done in background.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 138 + }, + "id": 100, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundDistributedSchedulePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "BackgroundDistributedSchedulePool task", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of active tasks in BackgroundProcessingPool for message streaming", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 146 + }, + "id": 101, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_BackgroundMessageBrokerSchedulePoolTask", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "BackgroundMessageBrokerSchedulePool task", + "transparent": true, + "type": "timeseries" + } + ], + "title": "Background pool", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 122 + }, + "id": 56, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of Replicated tables that are currently in readonly state due to re-initialization after ZooKeeper session loss or due to startup without ZooKeeper configured.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1104 + }, + "id": 74, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_ReadonlyReplica", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Readonly replica", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times a data part was failed to download from replica of a ReplicatedMergeTree table.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1104 + }, + "id": 58, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartFailedFetches{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedPartFailedFetches{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Replicated part failed fetches", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times a data part was downloaded from replica of a ReplicatedMergeTree table.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1152 + }, + "id": 57, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartFetches{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedPartFetches{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Replicated part fetches", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times we prefer to download already merged part from replica of ReplicatedMergeTree table instead of performing a merge ourself (usually we prefer doing a merge ourself to save network traffic). This happens when we have not all source parts to perform a merge or when the data part is old enough.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1152 + }, + "id": 60, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartFetchesOfMerged{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedPartFetchesOfMerged{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Replicated part fetches or merges", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times data parts of ReplicatedMergeTree tables were successfully merged.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1160 + }, + "id": 59, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartMerges{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedPartMerges{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Replicated part merges", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times a data part that we wanted doesn't exist on any replica (even on replicas that are offline right now). That data parts are definitely lost. This is normal due to asynchronous replication (if quorum inserts were not enabled), when the replica on which the data part was written was failed and when it became online after fail it doesn't contain that data part.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1160 + }, + "id": 61, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedDataLoss{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ReplicatedDataLoss{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Replicated part data loss", + "transparent": true, + "type": "timeseries" + } + ], + "title": "Replicas", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 123 + }, + "id": 28, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1861 + }, + "id": 30, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperInit{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperInit{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Init", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1861 + }, + "id": 31, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperTransactions{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperTransactions{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Transactions", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1869 + }, + "id": 32, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperList{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperList{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "List", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1869 + }, + "id": 33, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperCreate{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperCreate{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Create", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1877 + }, + "id": 34, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperRemove{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperRemove{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Remove", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1877 + }, + "id": 35, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperExists{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperExists{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Exists", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1885 + }, + "id": 36, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperGet{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperGet{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Get", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1885 + }, + "id": 37, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperSet{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperSet{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Set", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1893 + }, + "id": 38, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperMulti{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperMulti{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Multi", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1893 + }, + "id": 39, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperCheck{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperCheck{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Check", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1901 + }, + "id": 40, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperClose{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperClose{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Close", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1901 + }, + "id": 41, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperWatchResponse{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperWatchResponse{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Watch response", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1909 + }, + "id": 42, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperUserExceptions{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperUserExceptions{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "User Exceptions", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1909 + }, + "id": 43, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperHardwareExceptions{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperHardwareExceptions{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Hardware Exceptions", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1917 + }, + "id": 46, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperBytesReceived{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperBytesReceived{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Bytes received", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1917 + }, + "id": 45, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperBytesSent{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_ZooKeeperBytesSent{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Bytes sent", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of sessions (connections) to ZooKeeper. Should be no more than one, because using more than one connection to ZooKeeper may lead to bugs due to lack of linearizability (stale reads) that ZooKeeper consistency model allows.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1925 + }, + "id": 48, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_ZooKeeperSession", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Sessions", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of ephemeral nodes hold in ZooKeeper.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1925 + }, + "id": 47, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_EphemeralNode", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Ephemeral Node", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of watches (event subscriptions) in ZooKeeper.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1933 + }, + "id": 50, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_ZooKeeperWatch", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Watches", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of requests to ZooKeeper in fly.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1933 + }, + "id": 49, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_ZooKeeperRequest", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Requests", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times an error happened while trying to remove ephemeral node. This is not an issue, because our implementation of ZooKeeper library guarantee that the session will expire and the node will be removed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1941 + }, + "id": 70, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_CannotRemoveEphemeralNode{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_CannotRemoveEphemeralNode{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Remove ephemeral node failed", + "transparent": true, + "type": "timeseries" + } + ], + "title": "Zookeeper", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 124 + }, + "id": 94, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of connections to remote servers sending data that was INSERTed into Distributed tables. Both synchronous and asynchronous mode.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1499 + }, + "id": 112, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_DistributedSend", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Send", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of pending files to process for asynchronous insertion into Distributed tables. Number of files for every shard is summed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1499 + }, + "id": 113, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "ClickHouseMetrics_DistributedFilesToInsert", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Files to insert", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times the INSERT of a block to a Distributed table was throttled due to high number of pending bytes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1507 + }, + "id": 106, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedDelayedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedDelayedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Distributed delayed inserts", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of times the INSERT of a block to a Distributed table was rejected with 'Too many bytes' exception due to high number of pending bytes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1507 + }, + "id": 107, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedRejectedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedRejectedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Distributed rejected inserts", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Total number of milliseconds spent while the INSERT of a block to a Distributed table was throttled due to high number of pending bytes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "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": 0, + "y": 1515 + }, + "id": 108, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "increase(ClickHouseProfileEvents_DistributedDelayedInsertsMilliseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_DistributedDelayedInserts{instance=~\"$instance\"}[$__rate_interval])", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Distributed delayed inserts blocks (avg)", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Total count when distributed connection fails with retry", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1515 + }, + "id": 109, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedConnectionFailTry{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedConnectionFailTry{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Distributed connection fail try", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Total count when distributed connection fails after all retries finished", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1523 + }, + "id": 110, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedConnectionFailAtAll{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedConnectionFailAtAll{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Distributed connection fail at all", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1523 + }, + "id": 111, + "maxDataPoints": 200, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedSyncInsertionTimeoutExceeded{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", + "interval": "", + "legendFormat": "peaks - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": false, + "expr": "rate(ClickHouseProfileEvents_DistributedSyncInsertionTimeoutExceeded{instance=~\"$instance\"}[$__rate_interval]) * $trends", + "hide": false, + "interval": "", + "legendFormat": "trend - {{instance}}", + "refId": "C" + } + ], + "title": "Distributed sync insertation timeout", + "transparent": true, + "type": "timeseries" + } + ], + "title": "Distributed", + "type": "row" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 41, + "tags": [ + "ClickHouse", + "DB" + ], + "templating": { + "list": [ + { + "current": { + "text": "Mimir", + "value": "prom" + }, + "includeAll": false, + "label": "DataSource", + "name": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "prom", + "definition": "label_values(ClickHouseAsyncMetrics_Uptime, instance)", + "includeAll": true, + "label": "Node", + "multi": true, + "name": "instance", + "options": [], + "query": { + "query": "label_values(ClickHouseAsyncMetrics_Uptime, instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "sort": 5, + "type": "query" + }, + { + "current": { + "text": "1", + "value": "1" + }, + "includeAll": false, + "label": "Show trends", + "name": "trends", + "options": [ + { + "selected": true, + "text": "Yes", + "value": "1" + }, + { + "selected": false, + "text": "No", + "value": "null" + } + ], + "query": "Yes : 1, No : null", + "type": "custom" + }, + { + "current": { + "text": "1", + "value": "1" + }, + "description": "Be aware of the points limit per timeseries for Grafana. This option may not work for a time range > 24h", + "includeAll": false, + "label": "Show peaks", + "name": "peaks", + "options": [ + { + "selected": true, + "text": "Yes", + "value": "1" + }, + { + "selected": false, + "text": "No", + "value": "null" + } + ], + "query": "Yes : 1, No : null", + "type": "custom" + } + ] + }, + "time": { + "from": "now-3h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "ClickHouse", + "uid": "thEkJB_Mz", + "version": 3 +} \ No newline at end of file diff --git a/charts/langsmith-observability/dashboards/kube-state-metrics.json b/charts/langsmith-observability/dashboards/kube-state-metrics.json new file mode 100644 index 00000000..cb5108f1 --- /dev/null +++ b/charts/langsmith-observability/dashboards/kube-state-metrics.json @@ -0,0 +1,4497 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 9, + "links": [ + { + "asDropdown": true, + "icon": "external link", + "includeVars": true, + "keepTime": false, + "tags": [ + "kubernetes-app" + ], + "title": "Dashboards", + "type": "dashboards" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 58, + "panels": [], + "title": "Cluster", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 93, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Max", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "sum(kube_namespace_labels{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Namespaces", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_pod_container_status_running{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Running Containers", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_pod_status_phase{phase=\"Running\", cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Running Pods", + "refId": "O" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_service_info{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Services", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_endpoint_info{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Endpoints", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_ingress_info{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Ingresses", + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_deployment_labels{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Deployments", + "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_statefulset_labels{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Statefulsets", + "refId": "G" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_daemonset_labels{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Daemonsets", + "refId": "H" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_persistentvolumeclaim_info{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Persistent Volume Claims", + "refId": "I" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_hpa_labels{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Horizontal Pod Autoscalers", + "refId": "J" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_configmap_info{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Configmaps", + "refId": "K" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_secret_info{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Secrets", + "refId": "L" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(kube_networkpolicy_labels{cluster=\"$cluster\"})", + "interval": "", + "legendFormat": "Network Policies", + "refId": "M" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "count(count by (node) (kube_node_info{cluster=\"$cluster\"}))", + "hide": false, + "interval": "", + "legendFormat": "Nodes", + "refId": "N" + } + ], + "title": "Kubernetes Resource Count", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 97, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Max", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": true, + "expr": "sum(kube_pod_status_qos_class{cluster=\"$cluster\"}) by (qos_class)", + "interval": "", + "legendFormat": "{{ qos_class }} pods", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum(kube_pod_info{cluster=\"$cluster\"})", + "hide": false, + "legendFormat": "Total pods", + "range": true, + "refId": "B" + } + ], + "title": "Kubernetes Pods QoS classes", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46" + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "#d44a3a", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 8, + "x": 0, + "y": 9 + }, + "id": 4, + "maxDataPoints": 100, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_info{cluster=~\"$cluster\",node=~\"$node\"}) / sum(kube_node_status_allocatable{cluster=~\"$cluster\",resource=\"pods\",node=~\"$node\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Cluster Pod Requested", + "type": "gauge" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46" + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "#d44a3a", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 8, + "x": 8, + "y": 9 + }, + "id": 6, + "maxDataPoints": 100, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_container_resource_requests{cluster=~\"$cluster\",resource=\"memory\",node=~\"$node\"}) / sum(kube_node_status_allocatable{node=~\"$node\",cluster=~\"$cluster\",resource=\"memory\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Cluster Memory Requested", + "type": "gauge" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46" + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "#d44a3a", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 8, + "x": 16, + "y": 9 + }, + "id": 5, + "maxDataPoints": 100, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_container_resource_requests{cluster=~\"$cluster\",resource=\"cpu\",node=~\"$node\"})/ sum(kube_node_status_allocatable{node=~\"$node\",cluster=~\"$cluster\",resource=\"cpu\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Cluster CPU Requested", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 98, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Max", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": true, + "expr": "sum(kube_pod_status_reason{cluster=\"$cluster\"}) by (reason)", + "interval": "", + "legendFormat": "{{ reason }}", + "range": true, + "refId": "A" + } + ], + "title": "Kubernetes Pods Status Reason", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Pods", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 20 + }, + "id": 9, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_node_status_allocatable{cluster=~\"$cluster\",resource=\"pods\",node=~\"$node\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Allocatable", + "range": true, + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_pod_info{node=~\"$node\",cluster=~\"$cluster\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Requested", + "range": true, + "refId": "C" + } + ], + "title": "Cluster Pod Capacity", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Cores", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 20 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_node_status_capacity{node=~\"$node\",cluster=~\"$cluster\",resource=\"cpu\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Allocatable", + "range": true, + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_node_status_allocatable{node=~\"$node\",cluster=~\"$cluster\",resource=\"cpu\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Capacity", + "range": true, + "refId": "B" + }, + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_pod_container_resource_requests{cluster=~\"$cluster\",resource=\"cpu\",node=~\"$node\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Requested", + "range": true, + "refId": "C" + }, + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_pod_container_resource_limits{cluster=~\"$cluster\",resource=\"cpu\",node=~\"$node\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Limited", + "range": true, + "refId": "D" + } + ], + "title": "Cluster CPU Capacity", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bits" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 20 + }, + "id": 11, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_node_status_allocatable{node=~\"$node\",cluster=~\"$cluster\",resource=\"memory\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Allocatable", + "range": true, + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_node_status_capacity{node=~\"$node\",cluster=~\"$cluster\",resource=\"memory\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Capacity", + "range": true, + "refId": "B" + }, + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_pod_container_resource_requests{cluster=~\"$cluster\",resource=\"memory\",node=~\"$node\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Requested", + "range": true, + "refId": "C" + }, + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_pod_container_resource_limits{cluster=~\"$cluster\",resource=\"memory\",node=~\"$node\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Limited", + "range": true, + "refId": "D" + } + ], + "title": "Cluster Mem Capacity", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 25 + }, + "id": 22, + "panels": [], + "title": "Node", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 0, + "y": 26 + }, + "id": 24, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_node_info{cluster=~\"$cluster\"})", + "format": "time_series", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Number Of Nodes", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46" + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 1 + }, + { + "color": "#d44a3a" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 4, + "y": 26 + }, + "id": 26, + "maxDataPoints": 100, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_node_spec_unschedulable{cluster=~\"$cluster\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Nodes Unavailable", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "noValue": "No Nodes: Not Ready", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 26 + }, + "id": 78, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "kube_node_status_condition{condition=\"Ready\", status=\"false\"}==1", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{node}}", + "range": true, + "refId": "A" + } + ], + "title": "Not Ready - Node's", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "noValue": "No Nodes Under Pressure", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 26 + }, + "id": 51, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "kube_node_status_condition{condition=\"DiskPressure\",cluster=~\"$cluster\",status=\"true\"}==1", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{node}} {{condition}}", + "refId": "A" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "kube_node_status_condition{condition=\"MemoryPressure\",node=~\"$node\",cluster=~\"$cluster\",status=\"true\"}==1", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{node}} {{condition}}", + "refId": "B" + }, + { + "datasource": { + "uid": "$datasource" + }, + "expr": "kube_node_status_condition{condition=~\"PIDPressure\",node=~\"$node\",cluster=~\"$cluster\",status=\"true\"}==1", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{node}} {{condition}}", + "refId": "C" + } + ], + "title": "Node Pressure", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 34 + }, + "id": 14, + "panels": [], + "title": "Deployments", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "color-text" + }, + "filterable": true, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 20, + "x": 0, + "y": 35 + }, + "id": 16, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "kube_deployment_status_replicas{namespace=~\"$namespace\",cluster=~\"$cluster\"}", + "format": "time_series", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ deployment }}", + "refId": "A" + } + ], + "title": "Deployment Replicas - Up To Date", + "transformations": [ + { + "id": "seriesToRows", + "options": { + "reducers": [] + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 20, + "y": 35 + }, + "id": 18, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_deployment_status_replicas{namespace=~\"$namespace\",cluster=~\"$cluster\"})", + "format": "time_series", + "intervalFactor": 1, + "range": true, + "refId": "A" + } + ], + "title": "Deployment Replicas", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 20, + "y": 38 + }, + "id": 19, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_deployment_status_replicas_updated{namespace=~\"$namespace\",cluster=~\"$cluster\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Deployment Replicas - Updated", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 20, + "y": 41 + }, + "id": 20, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_deployment_status_replicas_unavailable{namespace=~\"$namespace\",cluster=~\"$cluster\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Deployment Replicas - Unavailable", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 44 + }, + "id": 71, + "panels": [], + "title": "Statefuleset", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "color-text" + }, + "filterable": true, + "inspect": false, + "minWidth": 100 + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 18, + "x": 0, + "y": 45 + }, + "id": 75, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "kube_statefulset_status_replicas_ready{namespace=~\"$namespace\",cluster=~\"$cluster\"}", + "format": "time_series", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ statefulset}}", + "refId": "A" + } + ], + "title": "Statefulset Replicas - Up To Date", + "transformations": [ + { + "id": "seriesToRows", + "options": { + "reducers": [] + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 45 + }, + "id": 42, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_pod_container_resource_requests{namespace=~\"$namespace\" ,cluster=~\"$cluster\", resource=\"memory\"})", + "format": "time_series", + "intervalFactor": 1, + "range": true, + "refId": "A" + } + ], + "title": "Memory Requested By Containers", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green" + }, + { + "color": "semi-dark-red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 18, + "x": 0, + "y": 52 + }, + "id": 73, + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 66, + "minVizHeight": 1, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "valueMode": "color" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "kube_statefulset_status_replicas_ready{namespace=~\"$namespace\",cluster=~\"$cluster\"}/kube_statefulset_status_replicas{namespace=~\"$namespace\",cluster=~\"$cluster\"}*100", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "legendFormat": "{{statefulset}}", + "refId": "A" + } + ], + "title": "Statefulset replicas", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "vCPU" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 52 + }, + "id": 99, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_pod_container_resource_requests{namespace=~\"$namespace\" ,cluster=~\"$cluster\", resource=\"cpu\"})", + "format": "time_series", + "intervalFactor": 1, + "range": true, + "refId": "A" + } + ], + "title": "CPU Requested By Containers", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 59 + }, + "id": 28, + "panels": [], + "title": "Pods", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "", + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 60 + }, + "id": 68, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "changes(kube_pod_container_status_restarts_total{namespace=~\"$namespace\", cluster=~\"$cluster\"}[30m])>0", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A", + "useBackend": false + } + ], + "title": "Pod's Restart in 30 min", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [] + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "noValue": "No Pods Evicted", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 60 + }, + "id": 77, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "kube_pod_status_reason{cluster=~\"$cluster\",namespace=~\"$namespace\", reason=\"Evicted\"}==1", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{pod}}", + "refId": "A" + } + ], + "title": "Evicted", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#629e51", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 12, + "x": 12, + "y": 60 + }, + "id": 30, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_status_phase{cluster=~\"$cluster\",namespace=~\"$namespace\", phase=\"Running\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Pods Running", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#629e51", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 63 + }, + "id": 33, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_status_phase{cluster=~\"$cluster\",namespace=~\"$namespace\", phase=\"Succeeded\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Pods Succeeded", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#629e51", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 63 + }, + "id": 32, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_status_phase{cluster=~\"$cluster\",namespace=~\"$namespace\", phase=\"Failed\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Pods Failed", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#629e51", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 66 + }, + "id": 31, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_status_phase{cluster=~\"$cluster\",namespace=~\"$namespace\", phase=\"Pending\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Pods Pending", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#629e51", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 66 + }, + "id": 34, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_status_phase{cluster=~\"$cluster\",namespace=~\"$namespace\", phase=\"Unknown\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Pods Unknown", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 69 + }, + "id": 36, + "panels": [], + "title": "Containers", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 70 + }, + "id": 38, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_container_status_running{namespace=~\"$namespace\",cluster=~\"$cluster\"})", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Containers Running", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 70 + }, + "id": 39, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_container_status_waiting{namespace=~\"$namespace\",cluster=~\"$cluster\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Containers Waiting", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 70 + }, + "id": 40, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_pod_container_status_terminated{namespace=~\"$namespace\",cluster=~\"$cluster\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Containers Terminated", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 70 + }, + "id": 41, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(changes(kube_pod_container_status_restarts_total{namespace=~\"$namespace\",cluster=~\"$cluster\"}[30m]))", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Containers Restarts (Last 30 Minutes)", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 73 + }, + "id": 80, + "panels": [], + "title": "HPA", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 74 + }, + "id": 82, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "kube_horizontalpodautoscaler_status_current_replicas{cluster=~\"$cluster\",namespace=~\"$namespace\"}", + "instant": false, + "interval": "", + "legendFormat": "current_{{hpa}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "kube_horizontalpodautoscaler_spec_max_replicas{cluster=~\"$cluster\",namespace=~\"$namespace\"}", + "instant": false, + "interval": "", + "legendFormat": "max_{{hpa}}", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "kube_horizontalpodautoscaler_spec_min_replicas{cluster=~\"$cluster\",namespace=~\"$namespace\"}", + "instant": false, + "interval": "", + "legendFormat": "min_{{hpa}}", + "refId": "C" + } + ], + "title": "HPA", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 74 + }, + "id": 89, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum(kube_horizontalpodautoscaler_status_current_replicas{hpa=~\".*\"})", + "instant": false, + "interval": "", + "legendFormat": "kube_hpa_status_current_replicas", + "refId": "A" + } + ], + "title": "Total HPA Current", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 81 + }, + "id": 90, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "kube_horizontalpodautoscaler_status_current_replicas{hpa=~\".*\"} == kube_horizontalpodautoscaler_spec_max_replicas{hpa=~\".*\"}", + "instant": false, + "interval": "", + "legendFormat": "{{hpa}}", + "refId": "A" + } + ], + "title": "current==max", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 81 + }, + "id": 92, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "kube_horizontalpodautoscaler_status_current_replicas{hpa=~\".*\"} == kube_horizontalpodautoscaler_spec_min_replicas{hpa=~\".*\"}", + "instant": false, + "interval": "", + "legendFormat": "{{hpa}}", + "refId": "B" + } + ], + "title": "current==min", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 89 + }, + "id": 45, + "panels": [], + "title": "Jobs", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 0, + "y": 90 + }, + "id": 47, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "sum(kube_job_status_succeeded{namespace=~\"$namespace\",cluster=~\"$cluster\"})", + "format": "time_series", + "intervalFactor": 1, + "range": true, + "refId": "A" + } + ], + "title": "Jobs Succeeded", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "noValue": "No data", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "displayName", + "value": "Time" + }, + { + "id": "unit", + "value": "time: YYYY-MM-DD HH:mm:ss" + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "displayName", + "value": "Job" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value" + }, + "properties": [ + { + "id": "displayName", + "value": "Day" + }, + { + "id": "unit", + "value": "none" + }, + { + "id": "decimals", + "value": 4 + }, + { + "id": "custom.align" + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 8, + "y": 90 + }, + "id": 62, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "(time()-kube_job_status_completion_time{namespace=~\"$namespace\",cluster=~\"$cluster\"})/60/60/24>1", + "format": "time_series", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{job_name}}", + "refId": "A" + } + ], + "title": "Job last success time from now", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [] + } + } + ], + "type": "table" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "noValue": "No Jobs Failed", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "displayName", + "value": "Time" + }, + { + "id": "unit", + "value": "time: YYYY-MM-DD HH:mm:ss" + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "displayName", + "value": "Job" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value" + }, + "properties": [ + { + "id": "displayName", + "value": "Failed Pod number" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "custom.align" + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 16, + "y": 90 + }, + "id": 76, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "kube_job_status_failed{namespace=~\"$namespace\",cluster=~\"$cluster\"}>1", + "format": "time_series", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{job_name}}", + "refId": "A" + } + ], + "title": "Job failed", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [] + } + } + ], + "type": "table" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 0, + "y": 93 + }, + "id": 48, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_job_status_active{namespace=~\"$namespace\",cluster=~\"$cluster\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Jobs Active", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 0, + "y": 96 + }, + "id": 49, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_job_status_failed{namespace=~\"$namespace\",cluster=~\"$cluster\"})", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Jobs Failed", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 99 + }, + "id": 64, + "panels": [], + "title": "PVC", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 0, + "y": 100 + }, + "id": 66, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_persistentvolumeclaim_status_phase{phase=\"Bound\"}==1)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{persistentvolumeclaim=}}", + "refId": "A" + } + ], + "title": "PVC - Bound", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "color-text" + }, + "filterable": true, + "inspect": false + }, + "decimals": 2, + "displayName": "", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "displayName", + "value": "Time" + }, + { + "id": "unit", + "value": "time: YYYY-MM-DD HH:mm:ss" + }, + { + "id": "custom.align" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 20, + "x": 4, + "y": 100 + }, + "id": 67, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "kube_persistentvolumeclaim_resource_requests_storage_bytes/1024/1024/1024", + "format": "time_series", + "instant": true, + "intervalFactor": 1, + "legendFormat": "{{persistentvolumeclaim}}", + "refId": "A" + } + ], + "title": "PVC", + "transformations": [ + { + "id": "seriesToRows", + "options": { + "reducers": [] + } + } + ], + "type": "table" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 0, + "y": 104 + }, + "id": 69, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "expr": "sum(kube_persistentvolumeclaim_status_phase{phase!=\"Bound\"}==1)", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{persistentvolumeclaim=}}", + "refId": "A" + } + ], + "title": "PVC - Not Bound", + "type": "stat" + } + ], + "preload": false, + "refresh": "10s", + "schemaVersion": 41, + "tags": [ + "kubestatemetrics", + "kubernetes" + ], + "templating": { + "list": [ + { + "current": { + "text": "", + "value": "" + }, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "definition": "label_values(kube_node_info, cluster)", + "includeAll": false, + "label": "Cluster", + "name": "cluster", + "options": [], + "query": "label_values(kube_node_info, cluster)", + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "definition": "label_values(kube_node_info{cluster=~\"$cluster\"}, node)", + "includeAll": true, + "label": "Node", + "name": "node", + "options": [], + "query": "label_values(kube_node_info{cluster=~\"$cluster\"}, node)", + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "romain", + "value": "romain" + }, + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "definition": "", + "includeAll": true, + "label": "Namespace", + "name": "namespace", + "options": [], + "query": "label_values(kube_namespace_created{cluster=~\"$cluster\"}, namespace)", + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "prom", + "value": "prom" + }, + "hide": 2, + "name": "datasource", + "query": "prom", + "skipUrlSync": true, + "type": "constant" + }, + { + "current": { + "text": "30s", + "value": "30s" + }, + "includeAll": false, + "label": "Resolution", + "name": "resolution", + "options": [ + { + "selected": false, + "text": "1s", + "value": "1s" + }, + { + "selected": false, + "text": "15s", + "value": "15s" + }, + { + "selected": true, + "text": "30s", + "value": "30s" + }, + { + "selected": false, + "text": "1m", + "value": "1m" + }, + { + "selected": false, + "text": "3m", + "value": "3m" + }, + { + "selected": false, + "text": "5m", + "value": "5m" + } + ], + "query": "1s, 15s, 30s, 1m, 3m, 5m", + "type": "custom" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "browser", + "title": "Kube State Metrics", + "uid": "a1f127e0-4a1b-4e45-917c-ca3d34ad2b03", + "version": 2 +} \ No newline at end of file diff --git a/charts/langsmith-observability/dashboards/langsmith-services.json b/charts/langsmith-observability/dashboards/langsmith-services.json new file mode 100644 index 00000000..9e58fe9c --- /dev/null +++ b/charts/langsmith-observability/dashboards/langsmith-services.json @@ -0,0 +1,2095 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 10, + "links": [], + "panels": [ + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 28, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 1 + }, + "id": 26, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.50,\n sum by (le)(rate(langsmith_feedback_upsert_latency_seconds_bucket[5m]))\n)", + "hide": false, + "instant": false, + "legendFormat": "p50", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le)(rate(langsmith_feedback_upsert_latency_seconds_bucket[5m]))\n)", + "legendFormat": "p95", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.99,\n sum by (le)(rate(langsmith_feedback_upsert_latency_seconds_bucket[5m]))\n)", + "hide": false, + "instant": false, + "legendFormat": "p99", + "range": true, + "refId": "B" + } + ], + "title": "Feedback Upsert Latency", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 6, + "y": 1 + }, + "id": 29, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.50,\n sum by (le, hit)(rate(smith_prefetch_traces_time_bucket[5m]))\n)", + "legendFormat": "p50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, hit)(rate(smith_prefetch_traces_time_bucket[5m]))\n)", + "hide": false, + "legendFormat": "p95", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.99,\n sum by (le, hit)(rate(smith_prefetch_traces_time_bucket[5m]))\n)", + "hide": false, + "legendFormat": "p99", + "range": true, + "refId": "C" + } + ], + "title": "Run PreFetch Latency", + "type": "timeseries" + }, + { + "datasource": { + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 16, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 30, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "none", + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 0 + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (type)(rate(langsmith_runs_batch_count_sum[5m]))", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Runs Batch Size", + "type": "barchart" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 9 + }, + "id": 25, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.50,\n sum by (le, hit)(rate(smith_prefetch_traces_time_bucket[5m]))\n)", + "legendFormat": "p50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, hit)(rate(smith_prefetch_traces_time_bucket[5m]))\n)", + "hide": false, + "legendFormat": "p95", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.99,\n sum by (le, hit)(rate(smith_prefetch_traces_time_bucket[5m]))\n)", + "hide": false, + "legendFormat": "p99", + "range": true, + "refId": "C" + } + ], + "title": "Trace Fetching Latency", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 6, + "y": 9 + }, + "id": 31, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.50,\n sum by (le, hit)(rate(langsmith_feedback_alerts_check_latency_seconds_bucket[5m]))\n)", + "legendFormat": "p50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, hit)(rate(langsmith_feedback_alerts_check_latency_seconds_bucket[5m]))\n)", + "hide": false, + "legendFormat": "p95", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.99,\n sum by (le, hit)(rate(langsmith_feedback_alerts_check_latency_seconds_bucket[5m]))\n)", + "hide": false, + "legendFormat": "p99", + "range": true, + "refId": "C" + } + ], + "title": "Latency of checking Alerts for Batch of Feedback", + "type": "timeseries" + } + ], + "title": "Backend Operations", + "type": "row" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 14, + "panels": [], + "title": "Platform Backend Requests", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.50, sum by (le) (rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"platform-backend\"}[5m])))", + "legendFormat": "p50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.90, sum by (le) (rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"platform-backend\"}[5m])))", + "hide": false, + "instant": false, + "legendFormat": "p90", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum by (le) (rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"platform-backend\"}[5m])))", + "hide": false, + "instant": false, + "legendFormat": "p99", + "range": true, + "refId": "C" + } + ], + "title": "Request Latency", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 0, + "y": 13 + }, + "id": 19, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "topk(10, histogram_quantile(0.50, sum by (path,le)(rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"platform-backend\"}[5m]))))", + "legendFormat": "{{k8s_service}}", + "range": true, + "refId": "A" + } + ], + "title": "P50 Endpoint Latency", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 8, + "y": 13 + }, + "id": 20, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "topk(10, histogram_quantile(0.50, sum by (path,le)(rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"platform-backend\"}[5m]))))", + "legendFormat": "{{k8s_service}}", + "range": true, + "refId": "A" + } + ], + "title": "P50 Endpoint Latency", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 16, + "y": 13 + }, + "id": 21, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "topk(10, histogram_quantile(0.50, sum by (path,le)(rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"platform-backend\"}[5m]))))", + "legendFormat": "{{k8s_service}}", + "range": true, + "refId": "A" + } + ], + "title": "P50 Endpoint Latency", + "type": "gauge" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 25 + }, + "id": 13, + "panels": [], + "title": "Backend Requests", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 15, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.50, sum by (le) (rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"backend\"}[5m])))", + "legendFormat": "p50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.90, sum by (le) (rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"backend\"}[5m])))", + "hide": false, + "instant": false, + "legendFormat": "p90", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum by (le) (rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"backend\"}[5m])))", + "hide": false, + "instant": false, + "legendFormat": "p99", + "range": true, + "refId": "C" + } + ], + "title": "Request Latency", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 0, + "y": 37 + }, + "id": 16, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "topk(10, histogram_quantile(0.50, sum by (path,le)(rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"backend\"}[5m]))))", + "legendFormat": "{{k8s_service}}", + "range": true, + "refId": "A" + } + ], + "title": "P50 Endpoint Latency", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 8, + "y": 37 + }, + "id": 11, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "topk(10, histogram_quantile(0.90, sum by (path,le)(rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"backend\"}[5m]))))", + "legendFormat": "{{k8s_service}}", + "range": true, + "refId": "A" + } + ], + "title": "P90 Endpoint Latency", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 16, + "y": 37 + }, + "id": 17, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "topk(10, histogram_quantile(0.99, sum by (path,le)(rate(langsmith_http_requests_latency_seconds_bucket{app_name=\"backend\"}[5m]))))", + "legendFormat": "{{k8s_service}}", + "range": true, + "refId": "A" + } + ], + "title": "P99 Endpoint Latency", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 49 + }, + "id": 22, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum(rate(langsmith_pg_pool_used_sum[2m])) / sum(rate(langsmith_pg_pool_used_count[2m]))", + "legendFormat": "{{label_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Postgres Pool Avg Connections Use", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 49 + }, + "id": 23, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum(rate(langsmith_pg_pool_idle_sum[2m])) / sum(rate(langsmith_pg_pool_idle_count[2m]))", + "legendFormat": "{{label_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Postgres Pool Avg Connections Idle", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 57 + }, + "id": 3, + "panels": [], + "title": "HTTP Requests", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 58 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum by (k8s_service) (\n rate(langsmith_http_requests_total[2m])\n)", + "legendFormat": "{{k8s_service}}", + "range": true, + "refId": "A" + } + ], + "title": "Total Requests by Service", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 58 + }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum by (k8s_pod) (langsmith_http_requests_in_progress)", + "legendFormat": "{{k8s_service}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests in Progress by Pod", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 67 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum by (k8s_pod) (\n rate(langsmith_http_requests_total[2m])\n)", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Total Requests by Pod", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 68 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum by (k8s_service) (langsmith_http_requests_in_progress)", + "legendFormat": "{{k8s_service}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests in Progress by Service", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 77 + }, + "id": 9, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum by (k8s_service) (rate(langsmith_http_requests_size_bytes_sum[2m]))", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Request Size per service", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 77 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "expr": "sum by (k8s_pod) (rate(langsmith_http_requests_size_bytes_sum[2m]))", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Request Size per Pod", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [ + "LangSmith" + ], + "templating": { + "list": [ + { + "current": { + "text": "", + "value": "" + }, + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "definition": "", + "name": "query0", + "options": [], + "query": "", + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "LangSmith Services Dashboard", + "uid": "03829c9a-0d8d-4f20-ae08-a4079572a6b3", + "version": 7 +} \ No newline at end of file diff --git a/charts/langsmith-observability/dashboards/nginx.json b/charts/langsmith-observability/dashboards/nginx.json new file mode 100644 index 00000000..d9c87b9a --- /dev/null +++ b/charts/langsmith-observability/dashboards/nginx.json @@ -0,0 +1,965 @@ +{ + "annotations": { + "list": [ + { + "$$hashKey": "object:122", + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 4, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 28, + "panels": [], + "title": "Status", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 8, + "maxDataPoints": 100, + "options": {}, + "repeat": "instance", + "repeatDirection": "h", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "nginx_up{instance=~\"$instance\"}", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "NGINX Status for $instance", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 4, + "panels": [], + "title": "Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Connections (rate)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 1, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 5 + }, + "id": 10, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(nginx_connections_accepted{instance=~\"$instance\"}[5m])", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(irate(nginx_connections_accepted[5m]))", + "interval": "", + "legendFormat": "total accepted", + "refId": "D" + } + ], + "title": "Accepted Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Connections (rate)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 1, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 5 + }, + "id": 19, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(nginx_connections_handled{instance=~\"$instance\"}[5m])", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}} handled", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(irate(nginx_connections_handled[5m]))", + "interval": "", + "legendFormat": "total handled", + "refId": "C" + } + ], + "title": "Processed Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Connections", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 6, + "x": 0, + "y": 15 + }, + "id": 12, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "nginx_connections_active{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(nginx_connections_active{instance=~\"$instance\"})", + "interval": "", + "legendFormat": "total", + "refId": "B" + } + ], + "title": "Active Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Connections", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 6, + "x": 6, + "y": 15 + }, + "id": 22, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "nginx_connections_reading{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(nginx_connections_reading{instance=~\"$instance\"})", + "interval": "", + "legendFormat": "total", + "refId": "A" + } + ], + "title": "Reading Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Connections", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 6, + "x": 12, + "y": 15 + }, + "id": 21, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "nginx_connections_waiting{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(nginx_connections_waiting{instance=~\"$instance\"})", + "interval": "", + "legendFormat": "total", + "refId": "A" + } + ], + "title": "Waiting Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Connections", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 6, + "x": 18, + "y": 15 + }, + "id": 20, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "nginx_connections_writing{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(nginx_connections_writing{instance=~\"$instance\"})", + "interval": "", + "legendFormat": "total", + "refId": "A" + } + ], + "title": "Writing Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 29 + }, + "id": 15, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(nginx_http_requests_total{instance=~\"$instance\"}[2m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}} qps", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(irate(nginx_http_requests_total[5m]))", + "interval": "", + "legendFormat": "total qps", + "refId": "B" + } + ], + "title": "QPS", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "5s", + "schemaVersion": 41, + "tags": [ + "nginx", + "prometheus" + ], + "templating": { + "list": [ + { + "current": { + "text": "Mimir", + "value": "prom" + }, + "includeAll": false, + "label": "datasource", + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "prom", + "definition": "label_values(nginx_up, instance)", + "includeAll": true, + "multi": true, + "name": "instance", + "options": [], + "query": "label_values(nginx_up, instance)", + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "NGINX", + "uid": "MsjffzSZz", + "version": 2 +} \ No newline at end of file diff --git a/charts/langsmith-observability/dashboards/postgres.json b/charts/langsmith-observability/dashboards/postgres.json new file mode 100644 index 00000000..e10c518d --- /dev/null +++ b/charts/langsmith-observability/dashboards/postgres.json @@ -0,0 +1,3079 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 1, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 34, + "panels": [], + "title": "General Counters, CPU, Memory and File Descriptor Stats", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 36, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_static{release=\"$release\", instance=\"$instance\"}", + "format": "time_series", + "instant": true, + "intervalFactor": 1, + "legendFormat": "{{short_version}}", + "refId": "A" + } + ], + "title": "Version", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "start time of the process", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "dateTimeFromNow" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 4, + "y": 1 + }, + "id": 28, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_postmaster_start_time_seconds{release=\"$release\", instance=\"$instance\"} * 1000", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Start Time", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 8, + "y": 1 + }, + "id": 10, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "SUM(pg_stat_database_tup_fetched{datname=~\"$datname\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "refId": "A", + "step": 4 + } + ], + "title": "Current fetch data", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 12, + "y": 1 + }, + "id": 11, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "SUM(pg_stat_database_tup_inserted{release=\"$release\", datname=~\"$datname\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "refId": "A", + "step": 4 + } + ], + "title": "Current insert data", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 16, + "y": 1 + }, + "id": 12, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "SUM(pg_stat_database_tup_updated{datname=~\"$datname\", instance=~\"$instance\"})", + "format": "time_series", + "intervalFactor": 2, + "refId": "A", + "step": 4 + } + ], + "title": "Current update data", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 1 + }, + "id": 38, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_max_connections{release=\"$release\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Max Connections", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Average user and system CPU time spent in seconds.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 3 + }, + "id": 22, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "avg(rate(process_cpu_seconds_total{release=\"$release\", instance=\"$instance\"}[5m]) * 1000)", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "CPU Time", + "refId": "A" + } + ], + "title": "Average CPU Usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Virtual and Resident memory size in bytes, averages over 5 min interval", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 3 + }, + "id": 24, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "avg(rate(process_resident_memory_bytes{release=\"$release\", instance=\"$instance\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Resident Mem", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "avg(rate(process_virtual_memory_bytes{release=\"$release\", instance=\"$instance\"}[5m]))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Virtual Mem", + "refId": "B" + } + ], + "title": "Average Memory Usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Number of open file descriptors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 3 + }, + "id": 26, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "process_open_fds{release=\"$release\", instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "Open FD", + "refId": "A" + } + ], + "title": "Open File Descriptors", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 32, + "panels": [], + "title": "Settings", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 11 + }, + "id": 40, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_shared_buffers_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Shared Buffers", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 3, + "y": 11 + }, + "id": 42, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_effective_cache_size_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Effective Cache", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 6, + "y": 11 + }, + "id": 44, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_maintenance_work_mem_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Maintenance Work Mem", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 9, + "y": 11 + }, + "id": 46, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_work_mem_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "Work Mem", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 11 + }, + "id": 48, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_max_wal_size_bytes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Max WAL Size", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 15, + "y": 11 + }, + "id": 50, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_random_page_cost{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Random Page Cost", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 18, + "y": 11 + }, + "id": 52, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_seq_page_cost{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Seq Page Cost", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 11 + }, + "id": 54, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_max_worker_processes{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Max Worker Processes", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 22, + "y": 11 + }, + "id": 56, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_settings_max_parallel_workers{instance=\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "refId": "A" + } + ], + "title": "Max Parallel Workers", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 30, + "panels": [], + "title": "Database Stats", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "points", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 8, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "always", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 15 + }, + "id": 1, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_stat_activity_count{datname=~\"$datname\", instance=~\"$instance\", state=\"active\"} !=0", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{datname}}, s: {{state}}", + "refId": "A", + "step": 2 + } + ], + "title": "Active sessions", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 15 + }, + "id": 60, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_database_xact_commit{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}} commits", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_database_xact_rollback{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}} rollbacks", + "refId": "B" + } + ], + "title": "Transactions", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 15 + }, + "id": 8, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_stat_database_tup_updated{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "title": "Update data", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 22 + }, + "id": 5, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_stat_database_tup_fetched{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "title": "Fetch data (SELECT)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 22 + }, + "id": 6, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_stat_database_tup_inserted{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "title": "Insert data", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 22 + }, + "id": 3, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_locks_count{datname=~\"$datname\", instance=~\"$instance\", mode=~\"$mode\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}},{{mode}}", + "refId": "A", + "step": 2 + } + ], + "title": "Lock tables", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 29 + }, + "id": 14, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_stat_database_tup_returned{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "title": "Return data", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 29 + }, + "id": 4, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_stat_activity_count{datname=~\"$datname\", instance=~\"$instance\", state=~\"idle|idle in transaction|idle in transaction (aborted)\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}, s: {{state}}", + "refId": "A", + "step": 2 + } + ], + "title": "Idle sessions", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 29 + }, + "id": 7, + "options": { + "dataLinks": [], + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_stat_database_tup_deleted{datname=~\"$datname\", instance=~\"$instance\"} != 0", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{datname}}", + "refId": "A", + "step": 2 + } + ], + "title": "Delete data", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 36 + }, + "id": 62, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "pg_stat_database_blks_hit{instance=\"$instance\", datname=~\"$datname\"} / (pg_stat_database_blks_read{instance=\"$instance\", datname=~\"$datname\"} + pg_stat_database_blks_hit{instance=\"$instance\", datname=~\"$datname\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{ datname }}", + "refId": "A" + } + ], + "title": "Cache Hit Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 8, + "y": 36 + }, + "id": 64, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_bgwriter_buffers_backend_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "buffers_backend", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_bgwriter_buffers_alloc_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "buffers_alloc", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_bgwriter_buffers_backend_fsync_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "backend_fsync", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_bgwriter_buffers_checkpoint_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "buffers_checkpoint", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_bgwriter_buffers_clean_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "buffers_clean", + "refId": "E" + } + ], + "title": "Buffers (bgwriter)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 36 + }, + "id": 66, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_database_conflicts{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}} conflicts", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_database_deadlocks{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}} deadlocks", + "refId": "A" + } + ], + "title": "Conflicts/Deadlocks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "Total amount of data written to temporary files by queries in this database. All temporary files are counted, regardless of why the temporary file was created, and regardless of the log_temp_files setting.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 0, + "y": 43 + }, + "id": 68, + "options": {}, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_database_temp_bytes{instance=\"$instance\", datname=~\"$datname\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{datname}}", + "refId": "A" + } + ], + "title": "Temp File (Bytes)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 16, + "x": 8, + "y": 43 + }, + "id": 70, + "options": {}, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_bgwriter_checkpoint_write_time_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "write_time - Total amount of time that has been spent in the portion of checkpoint processing where files are written to disk.", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "irate(pg_stat_bgwriter_checkpoint_sync_time_total{instance=\"$instance\"}[5m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "sync_time - Total amount of time that has been spent in the portion of checkpoint processing where files are synchronized to disk.", + "refId": "A" + } + ], + "title": "Checkpoint Stats", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "10s", + "schemaVersion": 41, + "tags": [ + "postgres", + "db", + "stats" + ], + "templating": { + "list": [ + { + "current": { + "text": "Mimir", + "value": "prom" + }, + "label": "datasource", + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "auto": true, + "auto_count": 200, + "auto_min": "1s", + "current": { + "text": "$__auto", + "value": "$__auto" + }, + "label": "Interval", + "name": "interval", + "options": [ + { + "selected": false, + "text": "1s", + "value": "1s" + }, + { + "selected": false, + "text": "5s", + "value": "5s" + }, + { + "selected": false, + "text": "1m", + "value": "1m" + }, + { + "selected": false, + "text": "5m", + "value": "5m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + }, + { + "selected": false, + "text": "6h", + "value": "6h" + }, + { + "selected": false, + "text": "1d", + "value": "1d" + } + ], + "query": "1s,5s,1m,5m,1h,6h,1d", + "refresh": 2, + "type": "interval" + }, + { + "current": { + "text": "", + "value": "" + }, + "datasource": "prom", + "definition": "", + "includeAll": false, + "label": "Namespace", + "name": "namespace", + "options": [], + "query": "query_result(pg_exporter_last_scrape_duration_seconds)", + "refresh": 2, + "regex": "/.*kubernetes_namespace=\"([^\"]+).*/", + "sort": 1, + "type": "query" + }, + { + "current": { + "text": "", + "value": "" + }, + "datasource": "prom", + "definition": "", + "includeAll": false, + "label": "Release", + "name": "release", + "options": [], + "query": "query_result(pg_exporter_last_scrape_duration_seconds{kubernetes_namespace=\"$namespace\"})", + "refresh": 2, + "regex": "/.*release=\"([^\"]+)/", + "sort": 1, + "type": "query" + }, + { + "current": { + "text": "10.0.3.16:9187", + "value": "10.0.3.16:9187" + }, + "datasource": "prom", + "definition": "", + "includeAll": false, + "label": "Instance", + "name": "instance", + "options": [], + "query": "query_result(pg_up{release=\"$release\"})", + "refresh": 1, + "regex": "/.*instance=\"([^\"]+).*/", + "sort": 1, + "type": "query" + }, + { + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "prom", + "definition": "", + "includeAll": true, + "label": "Database", + "multi": true, + "name": "datname", + "options": [], + "query": "label_values(datname)", + "refresh": 1, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "prom", + "definition": "", + "includeAll": true, + "label": "Lock table", + "multi": true, + "name": "mode", + "options": [], + "query": "label_values({mode=~\"accessexclusivelock|accesssharelock|exclusivelock|rowexclusivelock|rowsharelock|sharelock|sharerowexclusivelock|shareupdateexclusivelock\"}, mode)", + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Postgres Dashboard", + "uid": "000000039", + "version": 2 +} \ No newline at end of file diff --git a/charts/langsmith-observability/dashboards/redis.json b/charts/langsmith-observability/dashboards/redis.json new file mode 100644 index 00000000..6417e22b --- /dev/null +++ b/charts/langsmith-observability/dashboards/redis.json @@ -0,0 +1,2956 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "semi-dark-green" + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 0 + }, + "id": 2, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "increase(redis_commands_processed_total{instance=\"$instance\"}[3m])/180", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Ops/sec[3m]", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 3, + "y": 0 + }, + "id": 6, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto", + "text": {} + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_net_input_bytes_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Input", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_net_output_bytes_total{instance=\"$instance\"}[5m])", + "hide": false, + "interval": "", + "legendFormat": "Output", + "refId": "B" + } + ], + "title": "Network", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "links": [], + "mappings": [ + { + "options": { + "match": "null+nan", + "result": { + "index": 0, + "text": "nil" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 3, + "x": 8, + "y": 0 + }, + "id": 41, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "100 * rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m]) / (rate(redis_keyspace_misses_total{instance=\"$instance\"}[5m]) + rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m])) ", + "interval": "", + "legendFormat": "Hit", + "refId": "A" + } + ], + "title": "Key Hit Rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100000000, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 11, + "y": 0 + }, + "id": 9, + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 16, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_bytes{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Used Memory ", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_peak_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Peak", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_lua_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Lua", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_dataset_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Dataset", + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_overhead_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Overhead", + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_memory_used_rss_bytes{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Used Memory Rss", + "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "windows_cs_physical_memory_bytes{instance=\"$host:9182\"} or node_memory_MemTotal_bytes{targets=\"$host:9100\"}", + "hide": false, + "interval": "", + "legendFormat": "Node Mem Total", + "refId": "G" + } + ], + "title": "Memory", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 0 + }, + "id": 11, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_uptime_in_seconds{instance=\"$instance\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "UpTime", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 22, + "y": 0 + }, + "id": 16, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_instance_info{instance=\"$instance\"}", + "interval": "", + "legendFormat": "{{role}}", + "refId": "A" + } + ], + "title": "Role", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 3 + }, + "id": 3, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_connected_clients{instance=\"$instance\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "connected clients", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 3 + }, + "id": 12, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_instance_info{instance=\"$instance\"}", + "interval": "", + "legendFormat": "{{redis_version}}", + "refId": "A" + } + ], + "title": "Redis Version", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "index": 0, + "text": "Stopped" + }, + "1": { + "index": 1, + "text": "Running" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 22, + "y": 3 + }, + "id": 15, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "value", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_up{instance=\"$instance\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "State", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 6 + }, + "id": 4, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "sum(redis_db_keys{instance=\"$instance\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Number of keys", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 8, + "x": 3, + "y": 6 + }, + "id": 7, + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 16, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_expired_keys_total{instance=\"$instance\"}[3m])", + "interval": "", + "legendFormat": "expired keys", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_evicted_keys_total{instance=\"$instance\"}[3m])", + "hide": false, + "interval": "", + "legendFormat": "evicted keys", + "refId": "B" + } + ], + "title": "keys", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 9, + "x": 11, + "y": 6 + }, + "id": 10, + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 16, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_keyspace_hits_total{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Hits", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_keyspace_misses_total{instance=\"$instance\"}", + "hide": false, + "interval": "", + "legendFormat": "Misses", + "refId": "B" + } + ], + "title": "keys", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 20, + "y": 6 + }, + "id": 14, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "text": {}, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_instance_info{instance=\"$instance\"}", + "interval": "", + "legendFormat": "{{maxmemory_policy}}", + "refId": "A" + } + ], + "title": "Maxmemory Policy", + "transformations": [ + { + "id": "seriesToColumns", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "10.12.1.237:9121": true, + "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true + }, + "indexByName": {}, + "renameByName": { + "10.12.1.239:6379": "" + } + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 9 + }, + "id": 36, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "100 * (rate(redis_cpu_sys_children_seconds_total{instance=\"$instance\"}[5m]) + rate(redis_cpu_sys_seconds_total{instance=\"$instance\"}[5m]))", + "interval": "", + "legendFormat": "System", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "100 * (rate(redis_cpu_user_children_seconds_total{instance=\"$instance\"}[5m]) + rate(redis_cpu_user_seconds_total{instance=\"$instance\"}[5m]))", + "interval": "", + "legendFormat": "User", + "refId": "B" + } + ], + "title": "CPU Utilization", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "iops" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 9 + }, + "id": 18, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "topk(5, irate(redis_commands_total{instance=\"$instance\"} [5m]))", + "interval": "", + "legendFormat": "{{cmd}}", + "refId": "A" + } + ], + "title": "IOPS", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 9 + }, + "id": 38, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_net_input_bytes_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Inbound", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_net_output_bytes_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Outbound", + "refId": "B" + } + ], + "title": "Network Throughput", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 9 + }, + "id": 40, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_connections_received_total{instance=\"$instance\"}[5m]) ", + "interval": "", + "legendFormat": "Inbound", + "refId": "A" + } + ], + "title": "Conns/sec", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 16 + }, + "id": 28, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_db_keys{instance=\"$instance\"}", + "interval": "", + "legendFormat": "{{db}}", + "refId": "A" + } + ], + "title": "Keys / DB", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 16 + }, + "id": 30, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_db_avg_ttl_seconds{instance='$instance'}", + "interval": "", + "legendFormat": "{{db}}", + "refId": "A" + } + ], + "title": "Average TTL", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 16 + }, + "id": 32, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_expired_keys_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Expired", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "rate(redis_evicted_keys_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Evicted", + "refId": "B" + } + ], + "title": "Expired / Evicted keys", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 16 + }, + "id": 34, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "100 * rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m]) / (rate(redis_keyspace_misses_total{instance=\"$instance\"}[5m]) + rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m])) ", + "interval": "", + "legendFormat": "Hit", + "refId": "A" + } + ], + "title": "Hit Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 23 + }, + "id": 20, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_connected_clients{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Clients", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_config_maxclients{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Max Clients", + "refId": "B" + } + ], + "title": "Connections usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 23 + }, + "id": 26, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "redis_blocked_clients{instance=\"$instance\"}", + "interval": "", + "legendFormat": "Blocked", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "rate(redis_rejected_connections_total{instance=\"$instance\"}[5m])", + "interval": "", + "legendFormat": "Rejected", + "refId": "B" + } + ], + "title": "Blocked and Rejected clients", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 23 + }, + "id": 22, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "expr": "sum(rate(redis_commands_duration_seconds_total{instance=\"$instance\"}[5m])) / sum(rate(redis_commands_processed_total{instance=\"$instance\"}[5m]))", + "interval": "", + "legendFormat": "Response Time", + "refId": "A" + } + ], + "title": "Response time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 23 + }, + "id": 42, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "exemplar": true, + "expr": "100 * rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m]) / (rate(redis_keyspace_misses_total{instance=\"$instance\"}[5m]) + rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m])) ", + "interval": "", + "legendFormat": "Hit", + "refId": "A" + } + ], + "title": "Hit Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 11, + "x": 0, + "y": 30 + }, + "id": 46, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(redis_commands_processed_total[5m])", + "instant": false, + "interval": "", + "legendFormat": "{{cmd}}", + "range": true, + "refId": "A" + } + ], + "title": "Total Commands", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 13, + "x": 11, + "y": 30 + }, + "id": 24, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(redis_commands_total[5m])", + "instant": false, + "interval": "", + "legendFormat": "{{cmd}}", + "range": true, + "refId": "A" + } + ], + "title": "Total By Command", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 11, + "x": 0, + "y": 42 + }, + "id": 45, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(redis_commands_rejected_calls_total[5m])", + "instant": false, + "interval": "", + "legendFormat": "{{cmd}}", + "range": true, + "refId": "A" + } + ], + "title": "Failed Commands Total", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 13, + "x": 11, + "y": 42 + }, + "id": 47, + "options": { + "alertThreshold": true, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.1+security-01", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(redis_commands_latencies_usec_sum[5m]) / rate(redis_commands_latencies_usec_count[5m])", + "instant": false, + "interval": "", + "legendFormat": "{{cmd}}", + "range": true, + "refId": "A" + } + ], + "title": "Latency Per Command", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "1m", + "schemaVersion": 41, + "tags": [ + "redis", + "db" + ], + "templating": { + "list": [ + { + "current": { + "text": "database-metrics", + "value": "database-metrics" + }, + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "definition": "label_values(redis_up, job)", + "includeAll": false, + "label": "Cluster", + "name": "cluster", + "options": [], + "query": { + "query": "label_values(redis_up, job)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "10.0.12.210:9121", + "value": "10.0.12.210:9121" + }, + "datasource": { + "type": "prometheus", + "uid": "prom" + }, + "definition": "label_values({job=\"$cluster\"},instance)", + "includeAll": false, + "label": "Instance", + "name": "instance", + "options": [], + "query": { + "query": "label_values({job=\"$cluster\"},instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "", + "value": "" + }, + "definition": "label_values({instance=~\"$instance\"},instance)", + "includeAll": false, + "label": "Host", + "name": "host", + "options": [], + "query": { + "query": "label_values({instance=~\"$instance\"},instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "/(.*):.*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Redis Overview", + "uid": "R7HGKm27k", + "version": 4 +} \ No newline at end of file diff --git a/charts/langsmith-observability/examples/dashboards/clickhouse_dashboard.json b/charts/langsmith-observability/examples/dashboards/clickhouse_dashboard.json deleted file mode 100644 index 9d1c510b..00000000 --- a/charts/langsmith-observability/examples/dashboards/clickhouse_dashboard.json +++ /dev/null @@ -1,11242 +0,0 @@ -{ - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "7.5.2" - }, - { - "type": "panel", - "id": "graph", - "name": "Graph", - "version": "" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "1.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" - }, - { - "datasource": "${DS_PROMETHEUS}", - "enable": true, - "expr": "resets(ClickHouseAsyncMetrics_Uptime{instance=~\"$instance\"}[$__rate_interval])", - "hide": false, - "iconColor": "rgba(255, 96, 96, 1)", - "name": "Restarts", - "showIn": 0, - "step": "60s", - "tagKeys": "instance", - "titleFormat": "Restart", - "useValueForTime": false - } - ] - }, - "description": "ClickHouse internal exporter metrics", - "editable": true, - "gnetId": 14192, - "graphTooltip": 1, - "id": null, - "iteration": 1617958425076, - "links": [ - { - "asDropdown": false, - "icon": "external link", - "includeVars": false, - "keepTime": false, - "tags": [], - "targetBlank": true, - "title": "ClickHouse monitoring docs", - "tooltip": "", - "type": "link", - "url": "https://clickhouse.tech/docs/en/operations/monitoring/" - } - ], - "panels": [ - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": null, - "filterable": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "uptime" - }, - "properties": [ - { - "id": "unit", - "value": "s" - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 14, - "options": { - "frameIndex": 1, - "showHeader": true - }, - "pluginVersion": "7.5.2", - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_VersionInteger", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - }, - { - "exemplar": false, - "expr": "ClickHouseMetrics_Revision", - "format": "table", - "hide": false, - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "B" - }, - { - "exemplar": false, - "expr": "ClickHouseAsyncMetrics_NumberOfTables", - "format": "table", - "hide": false, - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "C" - }, - { - "exemplar": false, - "expr": "ClickHouseAsyncMetrics_Uptime", - "format": "table", - "hide": false, - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "D" - }, - { - "exemplar": false, - "expr": "ClickHouseAsyncMetrics_NumberOfDatabases", - "format": "table", - "hide": false, - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "E" - } - ], - "title": "Nodes", - "transformations": [ - { - "id": "seriesToColumns", - "options": { - "byField": "instance" - } - }, - { - "id": "organize", - "options": { - "excludeByName": { - "Time 1": true, - "Time 10": true, - "Time 2": true, - "Time 3": true, - "Time 4": true, - "Time 5": true, - "Time 6": true, - "Time 7": true, - "Time 8": true, - "Time 9": true, - "Value #A 2": true, - "Value #B 2": true, - "Value #C 2": true, - "Value #D 2": true, - "Value #E 2": true, - "__name__ 1": true, - "__name__ 10": true, - "__name__ 2": true, - "__name__ 3": true, - "__name__ 4": true, - "__name__ 5": true, - "__name__ 6": true, - "__name__ 7": true, - "__name__ 8": true, - "__name__ 9": true, - "job 1": true, - "job 10": true, - "job 2": true, - "job 3": true, - "job 4": true, - "job 5": true, - "job 6": true, - "job 7": true, - "job 8": true, - "job 9": true - }, - "indexByName": { - "Time 1": 6, - "Time 10": 37, - "Time 2": 9, - "Time 3": 13, - "Time 4": 16, - "Time 5": 20, - "Time 6": 23, - "Time 7": 27, - "Time 8": 30, - "Time 9": 34, - "Value #A 1": 1, - "Value #A 2": 12, - "Value #B 1": 2, - "Value #B 2": 19, - "Value #C 1": 3, - "Value #C 2": 26, - "Value #D 1": 5, - "Value #D 2": 33, - "Value #E 1": 4, - "Value #E 2": 40, - "__name__ 1": 7, - "__name__ 10": 38, - "__name__ 2": 10, - "__name__ 3": 14, - "__name__ 4": 17, - "__name__ 5": 21, - "__name__ 6": 24, - "__name__ 7": 28, - "__name__ 8": 31, - "__name__ 9": 35, - "instance": 0, - "job 1": 8, - "job 10": 39, - "job 2": 11, - "job 3": 15, - "job 4": 18, - "job 5": 22, - "job 6": 25, - "job 7": 29, - "job 8": 32, - "job 9": 36 - }, - "renameByName": { - "Value #A 1": "version", - "Value #B 1": "revision", - "Value #C 1": "tables", - "Value #D 1": "uptime", - "Value #E 1": "databases" - } - } - } - ], - "transparent": true, - "type": "table" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Total amount of memory (bytes) allocated by the server.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 5, - "w": 12, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 29, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_MemoryTracking", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Memory", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "bytes", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of connections to TCP server (clients with native interface), also included server-server distributed query connections. \nNumber of connections to HTTP server", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 5, - "w": 12, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "id": 73, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_TCPConnection", - "interval": "", - "legendFormat": "tcp - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "ClickHouseMetrics_HTTPConnection", - "hide": false, - "interval": "", - "legendFormat": "http - {{instance}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Connections", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times the number of query processing threads was lowered due to slow reads.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 5, - "w": 12, - "x": 0, - "y": 13 - }, - "hiddenSeries": false, - "id": 72, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBackoff{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReadBackoff{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Read backoff", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of reads from a file that were slow. This indicate system overload. Thresholds are controlled by read_backoff_* settings.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 5, - "w": 12, - "x": 12, - "y": 13 - }, - "hiddenSeries": false, - "id": 71, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_SlowRead{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_SlowRead{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Slow reads", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 18 - }, - "id": 12, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Number of queries to be interpreted and potentially executed. Does not include queries that failed to parse or were rejected due to AST size limits, quota limits or limits on the number of simultaneously running queries. May include internal queries initiated by ClickHouse itself. Does not count subqueries.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 19 - }, - "hiddenSeries": false, - "id": 2, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_Query{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_Query{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Queries", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Same as Queries, but only for SELECT queries.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 19 - }, - "hiddenSeries": false, - "id": 3, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_SelectQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "SELECT queries", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Same as Queries, but only for INSERT queries.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 27 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_InsertQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_InsertQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "INSERT queries", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Same as Failed queries, but only for SELECT queries.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 27 - }, - "hiddenSeries": false, - "id": 6, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_FailedSelectQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_FailedSelectQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Failed SELECT queries", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of failed queries.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 35 - }, - "hiddenSeries": false, - "id": 5, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_FailedQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_FailedQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Failed queries", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times when memory limit exceeded for query.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 35 - }, - "hiddenSeries": false, - "id": 85, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_QueryMemoryLimitExceeded{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_QueryMemoryLimitExceeded{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Queries memory limit", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of queries that are stopped and waiting due to 'priority' setting.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 43 - }, - "hiddenSeries": false, - "id": 86, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseMetrics_QueryPreempted{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseMetrics_QueryPreempted{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Query preemted", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Same as Failed queries, but only for INSERT queries.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 43 - }, - "hiddenSeries": false, - "id": 7, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_FailedInsertQuery{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_FailedInsertQuery{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Failed INSERT queries", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Avg queries latencies", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 51 - }, - "hiddenSeries": false, - "id": 8, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "increase(ClickHouseProfileEvents_QueryTimeMicroseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_Query{instance=~\"$instance\"}[$__rate_interval])", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Query latencies (avg)", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": 1 - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Avg SELECT queries latencies", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 51 - }, - "hiddenSeries": false, - "id": 9, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "increase(ClickHouseProfileEvents_SelectQueryTimeMicroseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_SelectQuery{instance=~\"$instance\"}[$__rate_interval])", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "SELECT query latencies (avg)", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Avg INSERT queries latencies", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 59 - }, - "hiddenSeries": false, - "id": 10, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "increase(ClickHouseProfileEvents_InsertQueryTimeMicroseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_InsertQuery{instance=~\"$instance\"}[$__rate_interval])", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "INSERT query latencies (avg)", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Queries", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 19 - }, - "id": 64, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Number of rows INSERTed to all tables.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 30 - }, - "hiddenSeries": false, - "id": 62, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_InsertedRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_InsertedRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Inserted rows", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of bytes (uncompressed; for columns as they stored in memory) INSERTed to all tables.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 30 - }, - "hiddenSeries": false, - "id": 65, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_InsertedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_InsertedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Inserted bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times the INSERT of a block to a MergeTree table was throttled due to high number of active data parts for partition.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 38 - }, - "hiddenSeries": false, - "id": 66, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_DelayedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_DelayedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Delayed inserts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times the INSERT of a block to a MergeTree table was rejected with 'Too many parts' exception due to high number of active data parts for partition.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 38 - }, - "hiddenSeries": false, - "id": 67, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_RejectedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_RejectedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Rejected inserts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Total number of milliseconds spent while the INSERT of a block to a MergeTree table was throttled due to high number of active data parts for partition.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 46 - }, - "hiddenSeries": false, - "id": 69, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "increase(ClickHouseProfileEvents_DelayedInsertsMilliseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_DelayedInserts{instance=~\"$instance\"}[$__rate_interval])", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Delayed inserts blocks (avg)", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": 1 - } - } - ], - "title": "Insert", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 20 - }, - "id": 125, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Number of data parts selected to read from a MergeTree table.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 27 - }, - "hiddenSeries": false, - "id": 126, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedParts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_SelectedParts{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Parts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of (non-adjacent) ranges in all data parts selected to read from a MergeTree table.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 27 - }, - "hiddenSeries": false, - "id": 127, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedRanges{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_SelectedRanges{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ranges", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of marks (index granules) selected to read from a MergeTree table.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 35 - }, - "hiddenSeries": false, - "id": 128, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedMarks{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_SelectedMarks{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Marks", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of rows SELECTed from all tables.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 35 - }, - "hiddenSeries": false, - "id": 129, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_SelectedRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Rows", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of bytes (uncompressed; for columns as they stored in memory) SELECTed from all tables.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 43 - }, - "hiddenSeries": false, - "id": 130, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_SelectedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_SelectedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Select", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 21 - }, - "id": 17, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Number of times the 'lseek' function was called.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 33 - }, - "hiddenSeries": false, - "id": 20, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_Seek{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_Seek{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "lseek", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "ops", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of files opened", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 33 - }, - "hiddenSeries": false, - "id": 19, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_FileOpen{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_FileOpen{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Open Files", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "ops", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of reads (read/pread) from a file descriptor. Does not include sockets.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 41 - }, - "hiddenSeries": false, - "id": 22, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorRead{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorRead{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Read from FD", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "ops", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of writes (write/pwrite) to a file descriptor. Does not include sockets.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 41 - }, - "hiddenSeries": false, - "id": 23, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWrite{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWrite{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Write to FD", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "ops", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times the read (read/pread) from a file descriptor have failed.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 49 - }, - "hiddenSeries": false, - "id": 24, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Read from FD failed", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "ops", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times the read (read/pread) from a file descriptor have failed.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 49 - }, - "hiddenSeries": false, - "id": 25, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadFailed{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Read from FD failed", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "ops", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of bytes read from file descriptors. If the file is compressed, this will show the compressed data size.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 57 - }, - "hiddenSeries": false, - "id": 21, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReadBufferFromFileDescriptorReadBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Read bytes from FD", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of bytes written to file descriptors. If the file is compressed, this will show compressed data size.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 57 - }, - "hiddenSeries": false, - "id": 26, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWriteBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_WriteBufferFromFileDescriptorWriteBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Write bytes to FD", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of bytes (the number of bytes before decompression) read from compressed sources (files, network).", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 65 - }, - "hiddenSeries": false, - "id": 51, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReadCompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReadCompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Read compressed bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of uncompressed bytes (the number of bytes after decompression) read from compressed sources (files, network).", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 65 - }, - "hiddenSeries": false, - "id": 53, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_CompressedReadBufferBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_CompressedReadBufferBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Read uncompressed bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of compressed blocks (the blocks of data that are compressed independent of each other) read from compressed sources (files, network).", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 73 - }, - "hiddenSeries": false, - "id": 52, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_CompressedReadBufferBlocks{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_CompressedReadBufferBlocks{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Compressed blocks", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "IO", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 22 - }, - "id": 56, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Number of Replicated tables that are currently in readonly state due to re-initialization after ZooKeeper session loss or due to startup without ZooKeeper configured.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 31 - }, - "hiddenSeries": false, - "id": 74, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_ReadonlyReplica", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Readonly replica", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times a data part was failed to download from replica of a ReplicatedMergeTree table.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 31 - }, - "hiddenSeries": false, - "id": 58, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartFailedFetches{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReplicatedPartFailedFetches{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Replicated part failed fetches", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times a data part was downloaded from replica of a ReplicatedMergeTree table.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 39 - }, - "hiddenSeries": false, - "id": 57, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartFetches{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReplicatedPartFetches{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Replicated part fetches", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times we prefer to download already merged part from replica of ReplicatedMergeTree table instead of performing a merge ourself (usually we prefer doing a merge ourself to save network traffic). This happens when we have not all source parts to perform a merge or when the data part is old enough.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 39 - }, - "hiddenSeries": false, - "id": 60, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartFetchesOfMerged{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReplicatedPartFetchesOfMerged{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Replicated part fetches or merges", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times data parts of ReplicatedMergeTree tables were successfully merged.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 47 - }, - "hiddenSeries": false, - "id": 59, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedPartMerges{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReplicatedPartMerges{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Replicated part merges", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times a data part that we wanted doesn't exist on any replica (even on replicas that are offline right now). That data parts are definitely lost. This is normal due to asynchronous replication (if quorum inserts were not enabled), when the replica on which the data part was written was failed and when it became online after fail it doesn't contain that data part.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 47 - }, - "hiddenSeries": false, - "id": 61, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ReplicatedDataLoss{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ReplicatedDataLoss{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Replicated part data loss", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Replicas", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 23 - }, - "id": 76, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Number of launched background merges.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 29 - }, - "hiddenSeries": false, - "id": 77, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_Merge{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_Merge{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Merge", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Rows read for background merges. This is the number of rows before merge.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 29 - }, - "hiddenSeries": false, - "id": 78, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergedRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_MergedRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Merged rows", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Uncompressed bytes (for columns as they stored in memory) that was read for background merges. This is the number before merge.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 37 - }, - "hiddenSeries": false, - "id": 79, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergedUncompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_MergedUncompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Merge uncompressed bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Avg merge duration", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 37 - }, - "hiddenSeries": false, - "id": 80, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "increase(ClickHouseProfileEvents_MergesTimeMilliseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_Merge{instance=~\"$instance\"}[$__rate_interval])", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Merge duration (avg)", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": 1 - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Number of rows INSERTed to MergeTree tables.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 45 - }, - "hiddenSeries": false, - "id": 81, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterRows{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterRows{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "MergeTree rows", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of blocks INSERTed to MergeTree tables. Each block forms a data part of level zero.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 45 - }, - "hiddenSeries": false, - "id": 82, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterBlocks{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterBlocks{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "MergeTree blocks", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Uncompressed bytes (for columns as they stored in memory) INSERTed to MergeTree tables.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 53 - }, - "hiddenSeries": false, - "id": 83, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterUncompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterUncompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "MergeTree uncompressed bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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 written to filesystem for data INSERTed to MergeTree tables.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 53 - }, - "hiddenSeries": false, - "id": 84, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_MergeTreeDataWriterCompressedBytes{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_MergeTreeDataWriterCompressedBytes{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "MergeTree compressed bytes", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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 space reserved for currently running background merges. It is slightly more than the total size of currently merging parts.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 61 - }, - "hiddenSeries": false, - "id": 123, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_DiskSpaceReservedForMerge", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Reserved space", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "bytes", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Merge", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 24 - }, - "id": 92, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 26 - }, - "hiddenSeries": false, - "id": 102, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_UncompressedCacheHits{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_UncompressedCacheHits{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Uncompressed Cache Hits", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 26 - }, - "hiddenSeries": false, - "id": 103, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_UncompressedCacheMisses{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_UncompressedCacheMisses{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Uncompressed Cache Misses", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 34 - }, - "hiddenSeries": false, - "id": 104, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_MarkCacheHits{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_MarkCacheHits{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Mark Cache Hits", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 34 - }, - "hiddenSeries": false, - "id": 105, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_MarkCacheMisses{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_MarkCacheMisses{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Mark Cache Misses", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Cache", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 25 - }, - "id": 90, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "The part is generating now, it is not in data_parts list.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 27 - }, - "hiddenSeries": false, - "id": 114, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_PartsTemporary", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Temporary", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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 part is in data_parts, but not used for SELECTs.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 27 - }, - "hiddenSeries": false, - "id": 115, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_PartsPreCommitted", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Pre commited", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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 part is in data_parts, but not used for SELECTs.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 35 - }, - "hiddenSeries": false, - "id": 116, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_PartsCommitted", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Commited", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Not active data part, but could be used by only current SELECTs, could be deleted after SELECTs finishes.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 35 - }, - "hiddenSeries": false, - "id": 117, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_PartsOutdated", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Outdated", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Not active data part with identity refcounter, it is deleting right now by a cleaner.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 43 - }, - "hiddenSeries": false, - "id": 118, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_PartsDeleting", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Deleting", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Part was moved to another disk and should be deleted in own destructor.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 43 - }, - "hiddenSeries": false, - "id": 119, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_PartsDeleteOnDestroy", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Delete on destroy", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Wide parts.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 51 - }, - "hiddenSeries": false, - "id": 120, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_PartsWide", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Wide", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Compact parts.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 51 - }, - "hiddenSeries": false, - "id": 122, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_PartsCompact", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Compact", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "In-memory parts.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 59 - }, - "hiddenSeries": false, - "id": 121, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_PartsInMemory", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "In-memory", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Parts", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 26 - }, - "id": 94, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Number of connections to remote servers sending data that was INSERTed into Distributed tables. Both synchronous and asynchronous mode.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 25 - }, - "hiddenSeries": false, - "id": 112, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_DistributedSend", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Send", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of pending files to process for asynchronous insertion into Distributed tables. Number of files for every shard is summed.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 25 - }, - "hiddenSeries": false, - "id": 113, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_DistributedFilesToInsert", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Files to insert", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times the INSERT of a block to a Distributed table was throttled due to high number of pending bytes.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 33 - }, - "hiddenSeries": false, - "id": 106, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedDelayedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_DistributedDelayedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Distributed delayed inserts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times the INSERT of a block to a Distributed table was rejected with 'Too many bytes' exception due to high number of pending bytes.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 33 - }, - "hiddenSeries": false, - "id": 107, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedRejectedInserts{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_DistributedRejectedInserts{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Distributed rejected inserts", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Total number of milliseconds spent while the INSERT of a block to a Distributed table was throttled due to high number of pending bytes.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 41 - }, - "hiddenSeries": false, - "id": 108, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null as zero", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "increase(ClickHouseProfileEvents_DistributedDelayedInsertsMilliseconds{instance=~\"$instance\"}[$__rate_interval]) / increase(ClickHouseProfileEvents_DistributedDelayedInserts{instance=~\"$instance\"}[$__rate_interval])", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Distributed delayed inserts blocks (avg)", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "µs", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": 1 - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Total count when distributed connection fails with retry", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 41 - }, - "hiddenSeries": false, - "id": 109, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedConnectionFailTry{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_DistributedConnectionFailTry{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Distributed connection fail try", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Total count when distributed connection fails after all retries finished", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 49 - }, - "hiddenSeries": false, - "id": 110, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedConnectionFailAtAll{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_DistributedConnectionFailAtAll{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Distributed connection fail at all", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 49 - }, - "hiddenSeries": false, - "id": 111, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_DistributedSyncInsertionTimeoutExceeded{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_DistributedSyncInsertionTimeoutExceeded{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Distributed sync insertation timeout", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Distributed", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 27 - }, - "id": 88, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Number of active tasks in BackgroundProcessingPool (merges, mutations, or replication queue bookkeeping)", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 28 - }, - "hiddenSeries": false, - "id": 95, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_BackgroundPoolTask", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "BackgroundPool task", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of active tasks in BackgroundFetchesPool", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 28 - }, - "hiddenSeries": false, - "id": 96, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_BackgroundFetchesPoolTask", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "BackgroundFetchesPool task", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of active tasks in BackgroundProcessingPool for moves", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 36 - }, - "hiddenSeries": false, - "id": 97, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_BackgroundMovePoolTask", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "BackgroundMovePool task", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of active tasks in BackgroundSchedulePool. This pool is used for periodic ReplicatedMergeTree tasks, like cleaning old data parts, altering data parts, replica re-initialization, etc.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 36 - }, - "hiddenSeries": false, - "id": 98, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_BackgroundSchedulePoolTask", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "BackgroundSchedulePool task", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of active tasks in BackgroundBufferFlushSchedulePool. This pool is used for periodic Buffer flushes", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 44 - }, - "hiddenSeries": false, - "id": 99, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_BackgroundBufferFlushSchedulePoolTask", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "BackgroundBufferFlushSchedulePool task", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of active tasks in BackgroundDistributedSchedulePool. This pool is used for distributed sends that is done in background.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 44 - }, - "hiddenSeries": false, - "id": 100, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_BackgroundDistributedSchedulePoolTask", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "BackgroundDistributedSchedulePool task", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of active tasks in BackgroundProcessingPool for message streaming", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 52 - }, - "hiddenSeries": false, - "id": 101, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_BackgroundMessageBrokerSchedulePoolTask", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "BackgroundMessageBrokerSchedulePool task", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Background pool", - "type": "row" - }, - { - "collapsed": true, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 28 - }, - "id": 28, - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 29 - }, - "hiddenSeries": false, - "id": 30, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperInit{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperInit{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Init", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 29 - }, - "hiddenSeries": false, - "id": 31, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperTransactions{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperTransactions{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Transactions", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 37 - }, - "hiddenSeries": false, - "id": 32, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperList{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperList{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "List", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 37 - }, - "hiddenSeries": false, - "id": 33, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperCreate{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperCreate{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Create", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 45 - }, - "hiddenSeries": false, - "id": 34, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperRemove{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperRemove{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Remove", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 45 - }, - "hiddenSeries": false, - "id": 35, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperExists{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperExists{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Exists", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 53 - }, - "hiddenSeries": false, - "id": 36, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperGet{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperGet{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Get", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 53 - }, - "hiddenSeries": false, - "id": 37, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperSet{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperSet{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Set", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 61 - }, - "hiddenSeries": false, - "id": 38, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperMulti{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperMulti{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Multi", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 61 - }, - "hiddenSeries": false, - "id": 39, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperCheck{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperCheck{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Check", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 69 - }, - "hiddenSeries": false, - "id": 40, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperClose{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperClose{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Close", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 69 - }, - "hiddenSeries": false, - "id": 41, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperWatchResponse{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperWatchResponse{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Watch response", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "reqps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 77 - }, - "hiddenSeries": false, - "id": 42, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperUserExceptions{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperUserExceptions{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "User Exceptions", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 77 - }, - "hiddenSeries": false, - "id": 43, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperHardwareExceptions{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperHardwareExceptions{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Hardware Exceptions", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 85 - }, - "hiddenSeries": false, - "id": 46, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperBytesReceived{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperBytesReceived{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Bytes received", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 85 - }, - "hiddenSeries": false, - "id": 45, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_ZooKeeperBytesSent{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_ZooKeeperBytesSent{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Bytes sent", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "binBps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of sessions (connections) to ZooKeeper. Should be no more than one, because using more than one connection to ZooKeeper may lead to bugs due to lack of linearizability (stale reads) that ZooKeeper consistency model allows.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 93 - }, - "hiddenSeries": false, - "id": 48, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_ZooKeeperSession", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Sessions", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of ephemeral nodes hold in ZooKeeper.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 93 - }, - "hiddenSeries": false, - "id": 47, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_EphemeralNode", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Ephemeral Node", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of watches (event subscriptions) in ZooKeeper.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 101 - }, - "hiddenSeries": false, - "id": 50, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_ZooKeeperWatch", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Watches", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of requests to ZooKeeper in fly.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 101 - }, - "hiddenSeries": false, - "id": 49, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "ClickHouseMetrics_ZooKeeperRequest", - "interval": "", - "legendFormat": "{{instance}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Requests", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "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": "Number of times an error happened while trying to remove ephemeral node. This is not an issue, because our implementation of ZooKeeper library guarantee that the session will expire and the node will be removed.", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 109 - }, - "hiddenSeries": false, - "id": 70, - "legend": { - "alignAsTable": true, - "avg": false, - "current": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 2, - "maxDataPoints": 200, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": false, - "expr": "max_over_time( (irate(ClickHouseProfileEvents_CannotRemoveEphemeralNode{instance=~\"$instance\"}[2m]))[$__rate_interval:15s] ) * $peaks", - "interval": "", - "legendFormat": "peaks - {{instance}}", - "refId": "A" - }, - { - "exemplar": false, - "expr": "rate(ClickHouseProfileEvents_CannotRemoveEphemeralNode{instance=~\"$instance\"}[$__rate_interval]) * $trends", - "hide": false, - "interval": "", - "legendFormat": "trend - {{instance}}", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Remove ephemeral node failed", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "transparent": true, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:176", - "format": "cps", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:177", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "title": "Zookeeper", - "type": "row" - } - ], - "refresh": "30s", - "schemaVersion": 27, - "style": "dark", - "tags": [ - "ClickHouse", - "DB" - ], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "DataSource", - "multi": false, - "name": "datasource", - "options": [], - "query": "prometheus", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "allValue": null, - "current": {}, - "datasource": "${DS_PROMETHEUS}", - "definition": "label_values(ClickHouseAsyncMetrics_Uptime, instance)", - "description": null, - "error": null, - "hide": 0, - "includeAll": true, - "label": "Node", - "multi": true, - "name": "instance", - "options": [], - "query": { - "query": "label_values(ClickHouseAsyncMetrics_Uptime, instance)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 5, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": { - "selected": false, - "text": "Yes", - "value": "1" - }, - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": "Show trends", - "multi": false, - "name": "trends", - "options": [ - { - "selected": true, - "text": "Yes", - "value": "1" - }, - { - "selected": false, - "text": "No", - "value": "null" - } - ], - "query": "Yes : 1, No : null", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "allValue": null, - "current": { - "selected": false, - "text": "No", - "value": "null" - }, - "description": "Be aware of the points limit per timeseries for Grafana. This option may not work for a time range > 24h", - "error": null, - "hide": 0, - "includeAll": false, - "label": "Show peaks", - "multi": false, - "name": "peaks", - "options": [ - { - "selected": false, - "text": "Yes", - "value": "1" - }, - { - "selected": true, - "text": "No", - "value": "null" - } - ], - "query": "Yes : 1, No : null", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - } - ] - }, - "time": { - "from": "now-3h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "ClickHouse", - "uid": "thEkJB_Mz", - "version": 40 - } \ No newline at end of file diff --git a/charts/langsmith-observability/examples/dashboards/nginx_dashboard.json b/charts/langsmith-observability/examples/dashboards/nginx_dashboard.json deleted file mode 100644 index ce1c1027..00000000 --- a/charts/langsmith-observability/examples/dashboards/nginx_dashboard.json +++ /dev/null @@ -1,1030 +0,0 @@ -{ - "__inputs": [ - { - "name": "DS_PROMETHEUS-DNTG", - "label": "Prometheus-dntg", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "6.7.4" - }, - { - "type": "panel", - "id": "graph", - "name": "Graph", - "version": "" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "1.0.0" - }, - { - "type": "panel", - "id": "singlestat", - "name": "Singlestat", - "version": "" - } - ], - "annotations": { - "list": [ - { - "$$hashKey": "object:122", - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "description": "Official dashboard for NGINX Prometheus exporter\r\n(Nothing Different, Just Primp!)", - "editable": true, - "gnetId": 12767, - "graphTooltip": 0, - "id": null, - "iteration": 1602300844890, - "links": [], - "panels": [ - { - "datasource": "${DS_PROMETHEUS-DNTG}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 28, - "title": "Status", - "type": "row" - }, - { - "cacheTimeout": null, - "colorBackground": true, - "colorPostfix": false, - "colorPrefix": false, - "colorValue": false, - "colors": [ - "#E02F44", - "#FF9830", - "#299c46" - ], - "datasource": "${DS_PROMETHEUS-DNTG}", - "decimals": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 0, - "y": 1 - }, - "id": 8, - "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": "instance", - "repeatDirection": "h", - "sparkline": { - "fillColor": "rgba(31, 118, 189, 0.18)", - "full": false, - "lineColor": "rgb(31, 120, 193)", - "show": false - }, - "tableColumn": "", - "targets": [ - { - "expr": "nginx_up{instance=~\"$instance\"}", - "format": "time_series", - "instant": false, - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "1,1", - "timeFrom": null, - "timeShift": null, - "title": "NGINX Status for $instance", - "type": "singlestat", - "valueFontSize": "100%", - "valueMaps": [ - { - "op": "=", - "text": "Down", - "value": "0" - }, - { - "op": "=", - "text": "Up", - "value": "1" - } - ], - "valueName": "current" - }, - { - "collapsed": false, - "datasource": "${DS_PROMETHEUS-DNTG}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 7 - }, - "id": 4, - "panels": [], - "title": "Metrics", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS-DNTG}", - "decimals": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 12, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 10, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(nginx_connections_accepted{instance=~\"$instance\"}[5m])", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}}", - "refId": "A" - }, - { - "expr": "sum(irate(nginx_connections_accepted[5m]))", - "interval": "", - "legendFormat": "total accepted", - "refId": "D" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Accepted Connections", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 1, - "format": "short", - "label": "Connections (rate)", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS-DNTG}", - "decimals": null, - "description": "", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 12, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "id": 19, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(nginx_connections_handled{instance=~\"$instance\"}[5m])", - "format": "time_series", - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}} handled", - "refId": "B" - }, - { - "expr": "sum(irate(nginx_connections_handled[5m]))", - "interval": "", - "legendFormat": "total handled", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Processed Connections", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 1, - "format": "short", - "label": "Connections (rate)", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS-DNTG}", - "decimals": 0, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 14, - "w": 6, - "x": 0, - "y": 18 - }, - "hiddenSeries": false, - "id": 12, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "nginx_connections_active{instance=~\"$instance\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}}", - "refId": "A" - }, - { - "expr": "sum(nginx_connections_active{instance=~\"$instance\"})", - "interval": "", - "legendFormat": "total", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Active Connections", - "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": "Connections", - "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-DNTG}", - "decimals": 0, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 14, - "w": 6, - "x": 6, - "y": 18 - }, - "hiddenSeries": false, - "id": 22, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "nginx_connections_reading{instance=~\"$instance\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}}", - "refId": "B" - }, - { - "expr": "sum(nginx_connections_reading{instance=~\"$instance\"})", - "interval": "", - "legendFormat": "total", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Reading Connections", - "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": "Connections", - "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-DNTG}", - "decimals": 0, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 14, - "w": 6, - "x": 12, - "y": 18 - }, - "hiddenSeries": false, - "id": 21, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "nginx_connections_waiting{instance=~\"$instance\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}}", - "refId": "C" - }, - { - "expr": "sum(nginx_connections_waiting{instance=~\"$instance\"})", - "interval": "", - "legendFormat": "total", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Waiting Connections", - "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": "Connections", - "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-DNTG}", - "decimals": 0, - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 14, - "w": 6, - "x": 18, - "y": 18 - }, - "hiddenSeries": false, - "id": 20, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "nginx_connections_writing{instance=~\"$instance\"}", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}}", - "refId": "D" - }, - { - "expr": "sum(nginx_connections_writing{instance=~\"$instance\"})", - "interval": "", - "legendFormat": "total", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Writing Connections", - "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": "Connections", - "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-DNTG}", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 24, - "x": 0, - "y": 32 - }, - "hiddenSeries": false, - "id": 15, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "hideZero": false, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(nginx_http_requests_total{instance=~\"$instance\"}[2m])", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{instance}} qps", - "refId": "A" - }, - { - "expr": "sum(irate(nginx_http_requests_total[5m]))", - "interval": "", - "legendFormat": "total qps", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "QPS", - "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": 22, - "style": "dark", - "tags": [ - "nginx", - "prometheus", - "nginx prometheus exporter" - ], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "default", - "value": "default" - }, - "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-DNTG}", - "definition": "label_values(nginx_up, instance)", - "hide": 0, - "includeAll": true, - "index": -1, - "label": "", - "multi": true, - "name": "instance", - "options": [], - "query": "label_values(nginx_up, instance)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-24h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ], - "time_options": [ - "5m", - "15m", - "1h", - "6h", - "12h", - "24h", - "2d", - "7d", - "30d" - ] - }, - "timezone": "", - "title": "NGINX", - "uid": "MsjffzSZz", - "variables": { - "list": [] - }, - "version": 2 - } \ No newline at end of file diff --git a/charts/langsmith-observability/examples/dashboards/postgres_dashboard.json b/charts/langsmith-observability/examples/dashboards/postgres_dashboard.json deleted file mode 100644 index 6a07073e..00000000 --- a/charts/langsmith-observability/examples/dashboards/postgres_dashboard.json +++ /dev/null @@ -1,3167 +0,0 @@ -{ - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "DS_PROMETHEUS", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "6.3.5" - }, - { - "type": "panel", - "id": "graph", - "name": "Graph", - "version": "" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "1.0.0" - }, - { - "type": "panel", - "id": "singlestat", - "name": "Singlestat", - "version": "" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "description": "This dashboard works with postgres_exporter for prometheus", - "editable": true, - "gnetId": 9628, - "graphTooltip": 0, - "id": null, - "iteration": 1568751813814, - "links": [], - "panels": [ - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 34, - "panels": [], - "title": "General Counters, CPU, Memory and File Descriptor Stats", - "type": "row" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": true, - "colors": [ - "#299c46", - "#7eb26d", - "#d44a3a" - ], - "datasource": "${DS_PROMETHEUS}", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 2, - "w": 4, - "x": 0, - "y": 1 - }, - "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, - "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": "pg_static{release=\"$release\", instance=\"$instance\"}", - "format": "time_series", - "instant": true, - "intervalFactor": 1, - "legendFormat": "{{short_version}}", - "refId": "A" - } - ], - "thresholds": "", - "title": "Version", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "name" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "${DS_PROMETHEUS}", - "description": "start time of the process", - "format": "dateTimeFromNow", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 2, - "w": 4, - "x": 4, - "y": 1 - }, - "id": 28, - "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": "110%", - "prefix": "", - "prefixFontSize": "110%", - "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": "pg_postmaster_start_time_seconds{release=\"$release\", instance=\"$instance\"} * 1000", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "", - "title": "Start Time", - "type": "singlestat", - "valueFontSize": "70%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "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}", - "format": "decbytes", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 2, - "w": 4, - "x": 8, - "y": 1 - }, - "height": "200px", - "id": 10, - "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(pg_stat_database_tup_fetched{datname=~\"$datname\", instance=~\"$instance\"})", - "format": "time_series", - "intervalFactor": 2, - "refId": "A", - "step": 4 - } - ], - "thresholds": "", - "title": "Current fetch data", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "format": "short", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 2, - "w": 4, - "x": 12, - "y": 1 - }, - "height": "200px", - "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(pg_stat_database_tup_inserted{release=\"$release\", datname=~\"$datname\", instance=~\"$instance\"})", - "format": "time_series", - "intervalFactor": 2, - "refId": "A", - "step": 4 - } - ], - "thresholds": "", - "title": "Current insert data", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "format": "short", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 2, - "w": 4, - "x": 16, - "y": 1 - }, - "height": "200px", - "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(pg_stat_database_tup_updated{datname=~\"$datname\", instance=~\"$instance\"})", - "format": "time_series", - "intervalFactor": 2, - "refId": "A", - "step": 4 - } - ], - "thresholds": "", - "title": "Current update data", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 2, - "w": 4, - "x": 20, - "y": 1 - }, - "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, - "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": "pg_settings_max_connections{release=\"$release\", instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Max Connections", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "Average user and system CPU time spent in seconds.", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 3 - }, - "id": 22, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "avg(rate(process_cpu_seconds_total{release=\"$release\", instance=\"$instance\"}[5m]) * 1000)", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "CPU Time", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Average CPU Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "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": "Virtual and Resident memory size in bytes, averages over 5 min interval", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 8, - "y": 3 - }, - "id": 24, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "avg(rate(process_resident_memory_bytes{release=\"$release\", instance=\"$instance\"}[5m]))", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "Resident Mem", - "refId": "A" - }, - { - "expr": "avg(rate(process_virtual_memory_bytes{release=\"$release\", instance=\"$instance\"}[5m]))", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "Virtual Mem", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Average Memory Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": null, - "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}", - "description": "Number of open file descriptors", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 3 - }, - "id": 26, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "process_open_fds{release=\"$release\", instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "Open FD", - "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": [ - { - "decimals": null, - "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 - } - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 10 - }, - "id": 32, - "panels": [], - "title": "Settings", - "type": "row" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "${DS_PROMETHEUS}", - "format": "bytes", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 0, - "y": 11 - }, - "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, - "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": "pg_settings_shared_buffers_bytes{instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Shared Buffers", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "format": "bytes", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 3, - "y": 11 - }, - "id": 42, - "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": "pg_settings_effective_cache_size_bytes{instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Effective Cache", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "format": "bytes", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 6, - "y": 11 - }, - "id": 44, - "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": "pg_settings_maintenance_work_mem_bytes{instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Maintenance Work Mem", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "format": "bytes", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 9, - "y": 11 - }, - "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, - "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": "pg_settings_work_mem_bytes{instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "", - "refId": "A" - } - ], - "thresholds": "", - "title": "Work Mem", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "decimals": 1, - "format": "bytes", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 12, - "y": 11 - }, - "id": 48, - "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": "pg_settings_max_wal_size_bytes{instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Max WAL Size", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 15, - "y": 11 - }, - "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": "pg_settings_random_page_cost{instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Random Page Cost", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 18, - "y": 11 - }, - "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, - "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": "pg_settings_seq_page_cost{instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Seq Page Cost", - "type": "singlestat", - "valueFontSize": "80%", - "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}", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 20, - "y": 11 - }, - "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": "pg_settings_max_worker_processes{instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Max Worker Processes", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "avg" - }, - { - "cacheTimeout": null, - "colorBackground": false, - "colorValue": false, - "colors": [ - "#299c46", - "rgba(237, 129, 40, 0.89)", - "#d44a3a" - ], - "datasource": "${DS_PROMETHEUS}", - "format": "none", - "gauge": { - "maxValue": 100, - "minValue": 0, - "show": false, - "thresholdLabels": false, - "thresholdMarkers": true - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 22, - "y": 11 - }, - "id": 56, - "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": "pg_settings_max_parallel_workers{instance=\"$instance\"}", - "format": "time_series", - "intervalFactor": 1, - "refId": "A" - } - ], - "thresholds": "", - "title": "Max Parallel Workers", - "type": "singlestat", - "valueFontSize": "80%", - "valueMaps": [ - { - "op": "=", - "text": "N/A", - "value": "null" - } - ], - "valueName": "current" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 14 - }, - "id": 30, - "panels": [], - "title": "Database Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 15 - }, - "id": 1, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "links": [], - "nullPointMode": "connected", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 3, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "pg_stat_activity_count{datname=~\"$datname\", instance=~\"$instance\", state=\"active\"} !=0", - "format": "time_series", - "interval": "", - "intervalFactor": 2, - "legendFormat": "{{datname}}, s: {{state}}", - "refId": "A", - "step": 2 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Active sessions", - "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": 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}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 8, - "y": 15 - }, - "id": 60, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(pg_stat_database_xact_commit{instance=\"$instance\", datname=~\"$datname\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{datname}} commits", - "refId": "A" - }, - { - "expr": "irate(pg_stat_database_xact_rollback{instance=\"$instance\", datname=~\"$datname\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{datname}} rollbacks", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Transactions", - "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}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 15 - }, - "id": 8, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sideWidth": null, - "sort": "current", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "pg_stat_database_tup_updated{datname=~\"$datname\", instance=~\"$instance\"} != 0", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{datname}}", - "refId": "A", - "step": 2 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Update data", - "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}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 22 - }, - "id": 5, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "pg_stat_database_tup_fetched{datname=~\"$datname\", instance=~\"$instance\"} != 0", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{datname}}", - "refId": "A", - "step": 2 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Fetch data (SELECT)", - "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}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 8, - "y": 22 - }, - "id": 6, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "pg_stat_database_tup_inserted{datname=~\"$datname\", instance=~\"$instance\"} != 0", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{datname}}", - "refId": "A", - "step": 2 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Insert data", - "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": 0, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 22 - }, - "id": 3, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "hideEmpty": false, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "pg_locks_count{datname=~\"$datname\", instance=~\"$instance\", mode=~\"$mode\"} != 0", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{datname}},{{mode}}", - "refId": "A", - "step": 2 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Lock tables", - "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": "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}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 29 - }, - "id": 14, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "total", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "pg_stat_database_tup_returned{datname=~\"$datname\", instance=~\"$instance\"} != 0", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{datname}}", - "refId": "A", - "step": 2 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Return data", - "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}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 8, - "y": 29 - }, - "id": 4, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": false, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "pg_stat_activity_count{datname=~\"$datname\", instance=~\"$instance\", state=~\"idle|idle in transaction|idle in transaction (aborted)\"}", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{datname}}, s: {{state}}", - "refId": "A", - "step": 2 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Idle sessions", - "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": "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}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 29 - }, - "id": 7, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "sort": "current", - "sortDesc": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "pg_stat_database_tup_deleted{datname=~\"$datname\", instance=~\"$instance\"} != 0", - "format": "time_series", - "intervalFactor": 2, - "legendFormat": "{{datname}}", - "refId": "A", - "step": 2 - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Delete data", - "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": 2, - "fill": 1, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 36 - }, - "id": 62, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": {}, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "pg_stat_database_blks_hit{instance=\"$instance\", datname=~\"$datname\"} / (pg_stat_database_blks_read{instance=\"$instance\", datname=~\"$datname\"} + pg_stat_database_blks_hit{instance=\"$instance\", datname=~\"$datname\"})", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{ datname }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Cache Hit Rate", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "decimals": 4, - "format": "percentunit", - "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}", - "fill": 1, - "gridPos": { - "h": 7, - "w": 8, - "x": 8, - "y": 36 - }, - "id": 64, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": {}, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(pg_stat_bgwriter_buffers_backend_total{instance=\"$instance\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "buffers_backend", - "refId": "A" - }, - { - "expr": "irate(pg_stat_bgwriter_buffers_alloc_total{instance=\"$instance\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "buffers_alloc", - "refId": "B" - }, - { - "expr": "irate(pg_stat_bgwriter_buffers_backend_fsync_total{instance=\"$instance\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "backend_fsync", - "refId": "C" - }, - { - "expr": "irate(pg_stat_bgwriter_buffers_checkpoint_total{instance=\"$instance\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "buffers_checkpoint", - "refId": "D" - }, - { - "expr": "irate(pg_stat_bgwriter_buffers_clean_total{instance=\"$instance\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "buffers_clean", - "refId": "E" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Buffers (bgwriter)", - "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": 0, - "fill": 1, - "gridPos": { - "h": 7, - "w": 8, - "x": 16, - "y": 36 - }, - "id": 66, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": {}, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(pg_stat_database_conflicts{instance=\"$instance\", datname=~\"$datname\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{datname}} conflicts", - "refId": "B" - }, - { - "expr": "irate(pg_stat_database_deadlocks{instance=\"$instance\", datname=~\"$datname\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{datname}} deadlocks", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Conflicts/Deadlocks", - "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": "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": "Total amount of data written to temporary files by queries in this database. All temporary files are counted, regardless of why the temporary file was created, and regardless of the log_temp_files setting.", - "fill": 1, - "gridPos": { - "h": 7, - "w": 8, - "x": 0, - "y": 43 - }, - "id": 68, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": true, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": {}, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(pg_stat_database_temp_bytes{instance=\"$instance\", datname=~\"$datname\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "{{datname}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Temp File (Bytes)", - "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": "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}", - "fill": 1, - "gridPos": { - "h": 7, - "w": 16, - "x": 8, - "y": 43 - }, - "id": 70, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "links": [], - "nullPointMode": "null", - "options": {}, - "percentage": false, - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "irate(pg_stat_bgwriter_checkpoint_write_time_total{instance=\"$instance\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "write_time - Total amount of time that has been spent in the portion of checkpoint processing where files are written to disk.", - "refId": "B" - }, - { - "expr": "irate(pg_stat_bgwriter_checkpoint_sync_time_total{instance=\"$instance\"}[5m])", - "format": "time_series", - "intervalFactor": 1, - "legendFormat": "sync_time - Total amount of time that has been spent in the portion of checkpoint processing where files are synchronized to disk.", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeShift": null, - "title": "Checkpoint Stats", - "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 - } - } - ], - "refresh": "10s", - "schemaVersion": 19, - "style": "dark", - "tags": [ - "postgres", - "db", - "stats" - ], - "templating": { - "list": [ - { - "hide": 0, - "label": "datasource", - "name": "DS_PROMETHEUS", - "options": [], - "query": "prometheus", - "refresh": 1, - "regex": "", - "type": "datasource" - }, - { - "auto": true, - "auto_count": 200, - "auto_min": "1s", - "current": { - "text": "auto", - "value": "$__auto_interval_interval" - }, - "hide": 0, - "label": "Interval", - "name": "interval", - "options": [ - { - "selected": true, - "text": "auto", - "value": "$__auto_interval_interval" - }, - { - "selected": false, - "text": "1s", - "value": "1s" - }, - { - "selected": false, - "text": "5s", - "value": "5s" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "5m", - "value": "5m" - }, - { - "selected": false, - "text": "1h", - "value": "1h" - }, - { - "selected": false, - "text": "6h", - "value": "6h" - }, - { - "selected": false, - "text": "1d", - "value": "1d" - } - ], - "query": "1s,5s,1m,5m,1h,6h,1d", - "refresh": 2, - "skipUrlSync": false, - "type": "interval" - }, - { - "allValue": null, - "current": {}, - "datasource": "${DS_PROMETHEUS}", - "definition": "", - "hide": 0, - "includeAll": false, - "label": "Namespace", - "multi": false, - "name": "namespace", - "options": [], - "query": "query_result(pg_exporter_last_scrape_duration_seconds)", - "refresh": 2, - "regex": "/.*kubernetes_namespace=\"([^\"]+).*/", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "${DS_PROMETHEUS}", - "definition": "", - "hide": 0, - "includeAll": false, - "label": "Release", - "multi": false, - "name": "release", - "options": [], - "query": "query_result(pg_exporter_last_scrape_duration_seconds{kubernetes_namespace=\"$namespace\"})", - "refresh": 2, - "regex": "/.*release=\"([^\"]+)/", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "${DS_PROMETHEUS}", - "definition": "", - "hide": 0, - "includeAll": false, - "label": "Instance", - "multi": false, - "name": "instance", - "options": [], - "query": "query_result(pg_up{release=\"$release\"})", - "refresh": 1, - "regex": "/.*instance=\"([^\"]+).*/", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "${DS_PROMETHEUS}", - "definition": "", - "hide": 0, - "includeAll": true, - "label": "Database", - "multi": true, - "name": "datname", - "options": [], - "query": "label_values(datname)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 1, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "${DS_PROMETHEUS}", - "definition": "", - "hide": 0, - "includeAll": true, - "label": "Lock table", - "multi": true, - "name": "mode", - "options": [], - "query": "label_values({mode=~\"accessexclusivelock|accesssharelock|exclusivelock|rowexclusivelock|rowsharelock|sharelock|sharerowexclusivelock|shareupdateexclusivelock\"}, mode)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-6h", - "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": "PostgreSQL Database", - "uid": "000000039", - "version": 1 -} \ No newline at end of file diff --git a/charts/langsmith-observability/examples/dashboards/redis_dashboard.json b/charts/langsmith-observability/examples/dashboards/redis_dashboard.json deleted file mode 100644 index 9d4f8a16..00000000 --- a/charts/langsmith-observability/examples/dashboards/redis_dashboard.json +++ /dev/null @@ -1,2542 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "redis_exporter for redis", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": 3, - "links": [], - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "semi-dark-green" - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 0, - "y": 0 - }, - "id": 2, - "options": { - "colorMode": "background", - "graphMode": "area", - "justifyMode": "center", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "increase(redis_commands_processed_total{instance=\"$instance\"}[3m])/180", - "format": "table", - "instant": false, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Ops/sec[3m]", - "transformations": [ - { - "id": "seriesToColumns", - "options": {} - }, - { - "id": "organize", - "options": { - "excludeByName": { - "10.12.1.237:9121": true, - "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true - }, - "indexByName": {}, - "renameByName": { - "10.12.1.239:6379": "" - } - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - } - ] - }, - "unit": "binBps" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 5, - "x": 3, - "y": 0 - }, - "id": 6, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto", - "text": {} - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_net_input_bytes_total{instance=\"$instance\"}[5m])", - "interval": "", - "legendFormat": "Input", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_net_output_bytes_total{instance=\"$instance\"}[5m])", - "hide": false, - "interval": "", - "legendFormat": "Output", - "refId": "B" - } - ], - "title": "Network", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "links": [], - "mappings": [ - { - "options": { - "match": "null+nan", - "result": { - "index": 0, - "text": "nil" - } - }, - "type": "special" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 2, - "w": 3, - "x": 8, - "y": 0 - }, - "id": 41, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "100 * rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m]) / (rate(redis_keyspace_misses_total{instance=\"$instance\"}[5m]) + rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m])) ", - "interval": "", - "legendFormat": "Hit", - "refId": "A" - } - ], - "title": "Key Hit Rate", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "max": 100000000, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 9, - "x": 11, - "y": 0 - }, - "id": 9, - "options": { - "displayMode": "lcd", - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "maxVizHeight": 300, - "minVizHeight": 16, - "minVizWidth": 8, - "namePlacement": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "sizing": "auto", - "text": {}, - "valueMode": "color" - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_memory_used_bytes{instance=\"$instance\"}", - "interval": "", - "legendFormat": "Used Memory ", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_memory_used_peak_bytes{instance=\"$instance\"}", - "hide": false, - "interval": "", - "legendFormat": "Used Memory Peak", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_memory_used_lua_bytes{instance=\"$instance\"}", - "hide": false, - "interval": "", - "legendFormat": "Used Memory Lua", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_memory_used_dataset_bytes{instance=\"$instance\"}", - "hide": false, - "interval": "", - "legendFormat": "Used Memory Dataset", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_memory_used_overhead_bytes{instance=\"$instance\"}", - "hide": false, - "interval": "", - "legendFormat": "Used Memory Overhead", - "refId": "E" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_memory_used_rss_bytes{instance=\"$instance\"}", - "hide": false, - "interval": "", - "legendFormat": "Used Memory Rss", - "refId": "F" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "windows_cs_physical_memory_bytes{instance=\"$host:9182\"} or node_memory_MemTotal_bytes{targets=\"$host:9100\"}", - "hide": false, - "interval": "", - "legendFormat": "Node Mem Total", - "refId": "G" - } - ], - "title": "Memory", - "type": "bargauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue" - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 20, - "y": 0 - }, - "id": 11, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_uptime_in_seconds{instance=\"$instance\"}", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "UpTime", - "transformations": [ - { - "id": "seriesToColumns", - "options": {} - }, - { - "id": "organize", - "options": { - "excludeByName": { - "10.12.1.237:9121": true, - "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true - }, - "indexByName": {}, - "renameByName": { - "10.12.1.239:6379": "" - } - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 22, - "y": 0 - }, - "id": 16, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "name", - "wideLayout": true - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_instance_info{instance=\"$instance\"}", - "interval": "", - "legendFormat": "{{role}}", - "refId": "A" - } - ], - "title": "Role", - "transformations": [ - { - "id": "seriesToColumns", - "options": {} - }, - { - "id": "organize", - "options": { - "excludeByName": { - "10.12.1.237:9121": true, - "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true - }, - "indexByName": {}, - "renameByName": { - "10.12.1.239:6379": "" - } - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 0, - "y": 3 - }, - "id": 3, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_connected_clients{instance=\"$instance\"}", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "connected clients", - "transformations": [ - { - "id": "seriesToColumns", - "options": {} - }, - { - "id": "organize", - "options": { - "excludeByName": { - "10.12.1.237:9121": true, - "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true - }, - "indexByName": {}, - "renameByName": { - "10.12.1.239:6379": "" - } - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 20, - "y": 3 - }, - "id": 12, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "name", - "wideLayout": true - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_instance_info{instance=\"$instance\"}", - "interval": "", - "legendFormat": "{{redis_version}}", - "refId": "A" - } - ], - "title": "Redis Version", - "transformations": [ - { - "id": "seriesToColumns", - "options": {} - }, - { - "id": "organize", - "options": { - "excludeByName": { - "10.12.1.237:9121": true, - "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true - }, - "indexByName": {}, - "renameByName": { - "10.12.1.239:6379": "" - } - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "0": { - "index": 0, - "text": "Stopped" - }, - "1": { - "index": 1, - "text": "Running" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 2, - "x": 22, - "y": 3 - }, - "id": 15, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "value", - "wideLayout": true - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_up{instance=\"$instance\"}", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "State", - "transformations": [ - { - "id": "seriesToColumns", - "options": {} - }, - { - "id": "organize", - "options": { - "excludeByName": { - "10.12.1.237:9121": true, - "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true - }, - "indexByName": {}, - "renameByName": { - "10.12.1.239:6379": "" - } - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 3, - "x": 0, - "y": 6 - }, - "id": 4, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "auto", - "wideLayout": true - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "sum(redis_db_keys{instance=\"$instance\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Number of keys", - "transformations": [ - { - "id": "seriesToColumns", - "options": {} - }, - { - "id": "organize", - "options": { - "excludeByName": { - "10.12.1.237:9121": true, - "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true - }, - "indexByName": {}, - "renameByName": { - "10.12.1.239:6379": "" - } - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 8, - "x": 3, - "y": 6 - }, - "id": 7, - "options": { - "displayMode": "lcd", - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "maxVizHeight": 300, - "minVizHeight": 16, - "minVizWidth": 8, - "namePlacement": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "sizing": "auto", - "text": {}, - "valueMode": "color" - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_expired_keys_total{instance=\"$instance\"}[3m])", - "interval": "", - "legendFormat": "expired keys", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_evicted_keys_total{instance=\"$instance\"}[3m])", - "hide": false, - "interval": "", - "legendFormat": "evicted keys", - "refId": "B" - } - ], - "title": "keys", - "type": "bargauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 9, - "x": 11, - "y": 6 - }, - "id": 10, - "options": { - "displayMode": "lcd", - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "maxVizHeight": 300, - "minVizHeight": 16, - "minVizWidth": 8, - "namePlacement": "auto", - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "sizing": "auto", - "text": {}, - "valueMode": "color" - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_keyspace_hits_total{instance=\"$instance\"}", - "interval": "", - "legendFormat": "Hits", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_keyspace_misses_total{instance=\"$instance\"}", - "hide": false, - "interval": "", - "legendFormat": "Misses", - "refId": "B" - } - ], - "title": "keys", - "type": "bargauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 4, - "x": 20, - "y": 6 - }, - "id": 14, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "percentChangeColorMode": "standard", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showPercentChange": false, - "text": {}, - "textMode": "name", - "wideLayout": true - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_instance_info{instance=\"$instance\"}", - "interval": "", - "legendFormat": "{{maxmemory_policy}}", - "refId": "A" - } - ], - "title": "Maxmemory Policy", - "transformations": [ - { - "id": "seriesToColumns", - "options": {} - }, - { - "id": "organize", - "options": { - "excludeByName": { - "10.12.1.237:9121": true, - "{instance=\"10.12.1.237:9121\", job=\"redis_exporter\"}": true - }, - "indexByName": {}, - "renameByName": { - "10.12.1.239:6379": "" - } - } - } - ], - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 9 - }, - "id": 36, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "100 * (rate(redis_cpu_sys_children_seconds_total{instance=\"$instance\"}[5m]) + rate(redis_cpu_sys_seconds_total{instance=\"$instance\"}[5m]))", - "interval": "", - "legendFormat": "System", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "100 * (rate(redis_cpu_user_children_seconds_total{instance=\"$instance\"}[5m]) + rate(redis_cpu_user_seconds_total{instance=\"$instance\"}[5m]))", - "interval": "", - "legendFormat": "User", - "refId": "B" - } - ], - "title": "CPU Utilization", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "iops" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 9 - }, - "id": 18, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "topk(5, irate(redis_commands_total{instance=\"$instance\"} [5m]))", - "interval": "", - "legendFormat": "{{cmd}}", - "refId": "A" - } - ], - "title": "IOPS", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "Bps" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 9 - }, - "id": 38, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_net_input_bytes_total{instance=\"$instance\"}[5m])", - "interval": "", - "legendFormat": "Inbound", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_net_output_bytes_total{instance=\"$instance\"}[5m])", - "interval": "", - "legendFormat": "Outbound", - "refId": "B" - } - ], - "title": "Network Throughput", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 9 - }, - "id": 40, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_connections_received_total{instance=\"$instance\"}[5m]) ", - "interval": "", - "legendFormat": "Inbound", - "refId": "A" - } - ], - "title": "Conns/sec", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 16 - }, - "id": 28, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_db_keys{instance=\"$instance\"}", - "interval": "", - "legendFormat": "{{db}}", - "refId": "A" - } - ], - "title": "Keys / DB", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 16 - }, - "id": 30, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_db_avg_ttl_seconds{instance='$instance'}", - "interval": "", - "legendFormat": "{{db}}", - "refId": "A" - } - ], - "title": "Average TTL", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 16 - }, - "id": 32, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_expired_keys_total{instance=\"$instance\"}[5m])", - "interval": "", - "legendFormat": "Expired", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "expr": "rate(redis_evicted_keys_total{instance=\"$instance\"}[5m])", - "interval": "", - "legendFormat": "Evicted", - "refId": "B" - } - ], - "title": "Expired / Evicted keys", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 16 - }, - "id": 34, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "100 * rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m]) / (rate(redis_keyspace_misses_total{instance=\"$instance\"}[5m]) + rate(redis_keyspace_hits_total{instance=\"$instance\"}[5m])) ", - "interval": "", - "legendFormat": "Hit", - "refId": "A" - } - ], - "title": "Hit Rate", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 23 - }, - "id": 20, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_connected_clients{instance=\"$instance\"}", - "interval": "", - "legendFormat": "Clients", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_config_maxclients{instance=\"$instance\"}", - "interval": "", - "legendFormat": "Max Clients", - "refId": "B" - } - ], - "title": "Connections usage", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 23 - }, - "id": 26, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "redis_blocked_clients{instance=\"$instance\"}", - "interval": "", - "legendFormat": "Blocked", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_rejected_connections_total{instance=\"$instance\"}[5m])", - "interval": "", - "legendFormat": "Rejected", - "refId": "B" - } - ], - "title": "Blocked and Rejected clients", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 23 - }, - "id": 22, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "expr": "sum(rate(redis_commands_duration_seconds_total{instance=\"$instance\"}[5m])) / sum(rate(redis_commands_processed_total{instance=\"$instance\"}[5m]))", - "interval": "", - "legendFormat": "Response Time", - "refId": "A" - } - ], - "title": "Response time", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "links": [], - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 23 - }, - "id": 24, - "options": { - "alertThreshold": true, - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "hideZeros": false, - "mode": "multi", - "sort": "none" - } - }, - "pluginVersion": "12.0.1+security-01", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "exemplar": true, - "expr": "rate(redis_slowlog_length{instance=\"$instance\"}[5m])", - "interval": "", - "legendFormat": "Response Time", - "refId": "A" - } - ], - "title": "Slowlog increment", - "type": "timeseries" - } - ], - "preload": false, - "refresh": "1m", - "schemaVersion": 41, - "tags": [], - "templating": { - "list": [ - { - "current": { - "text": "database-metrics", - "value": "database-metrics" - }, - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "definition": "label_values(redis_up, job)", - "includeAll": false, - "label": "Cluster", - "name": "cluster", - "options": [], - "query": { - "query": "label_values(redis_up, job)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "type": "query" - }, - { - "current": { - "text": "10.0.12.210:9121", - "value": "10.0.12.210:9121" - }, - "datasource": { - "type": "prometheus", - "uid": "prom" - }, - "definition": "label_values({job=\"$cluster\"},instance)", - "includeAll": false, - "label": "Instance", - "name": "instance", - "options": [], - "query": { - "query": "label_values({job=\"$cluster\"},instance)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "", - "type": "query" - }, - { - "current": { - "text": "", - "value": "" - }, - "definition": "label_values({instance=~\"$instance\"},instance)", - "includeAll": false, - "label": "Host", - "name": "host", - "options": [], - "query": { - "query": "label_values({instance=~\"$instance\"},instance)", - "refId": "StandardVariableQuery" - }, - "refresh": 1, - "regex": "/(.*):.*/", - "type": "query" - } - ] - }, - "time": { - "from": "now-15m", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Redis Overview", - "uid": "R7HGKm27k", - "version": 2 - } \ No newline at end of file diff --git a/charts/langsmith-observability/examples/e2e-stack-minio.yaml b/charts/langsmith-observability/examples/e2e-stack-minio.yaml index bcebc66d..7fe7ea52 100644 --- a/charts/langsmith-observability/examples/e2e-stack-minio.yaml +++ b/charts/langsmith-observability/examples/e2e-stack-minio.yaml @@ -1,7 +1,39 @@ -# Use this configuration to deploy the full LangSmith observability stack with in-cluster storage. +# Use this configuration to deploy the full LangSmith Observability stack with in-cluster storage. # You can disable parts as you see fit, such as exporters, or logs/metrics/traces. # NOTE: This configuration is not recommended for production environments. +# ======================== Metrics Exporters ======================== +# Feel free to disable exporters if you already have them deployed. + +langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. +langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. + +kubestatemetrics: + enabled: true + # Change this value to match your LangSmith namespace. + namespaces: "langsmith" + +postgresexporter: + enabled: true + config: + # Change these values to match your Postgres instance. + datasource: + host: langsmith-postgres.langsmith.svc.cluster.local + user: postgres + password: postgres + database: postgres + port: "5432" + +nginxexporter: + enabled: true + # Change this value to match your LangSmith frontend service. + nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" + +redisexporter: + enabled: true + # Change this value to match your Redis instance. + redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 + # ======================== OTEL Collector ======================== otelCollector: logs: @@ -18,8 +50,8 @@ minio: enabled: true size: 10Gi auth: - rootUser: "admin" - rootPassword: "admin_password" + rootUser: "admin" # This value is used to log into the Minio console. + rootPassword: "admin_password" # This value is used to log into the Minio console. # ======================== LGTM Stack ======================== @@ -33,9 +65,9 @@ loki: loki: storage: s3: - endpoint: langsmith-observability-minio.langsmith.svc.cluster.local:9000 # Modify to match the correct release and namespace - secret_access_key: admin_password # This must match the rootPassword in the minio chart - access_key_id: admin # This must match the rootUser in the minio chart + endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace + secretAccessKey: admin_password # This must match the rootPassword in the minio chart + accessKeyId: admin # This must match the rootUser in the minio chart # Metrics storage + retrieval mimir: @@ -45,7 +77,7 @@ mimir: common: storage: s3: - endpoint: langsmith-observability-minio.langsmith.svc.cluster.local:9000 # Modify to match the correct release and namespace + endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace secret_access_key: admin_password # This must match the rootPassword in the minio chart access_key_id: admin # This must match the rootUser in the minio chart @@ -56,34 +88,6 @@ tempo: trace: backend: s3 s3: - endpoint: langsmith-observability-minio.langsmith.svc.cluster.local:9000 # Modify to match the correct release and namespace - secret_access_key: admin_password # This must match the rootPassword in the minio chart - access_key_id: admin # This must match the rootUser in the minio chart - -# ======================== Metrics Exporters ======================== - -kubestatemetrics: - enabled: true - # Change this value to match your LangSmith namespace. - namespaces: "langsmith" - -postgresexporter: - enabled: true - config: - # Change these values to match your Postgres instance. - datasource: - host: langsmith-postgres.langsmith.svc.cluster.local - user: postgres - password: postgres - database: postgres - port: "5432" - -nginxexporter: - enabled: true - # Change this value to match your LangSmith frontend service. - nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" - -redisexporter: - enabled: true - # Change this value to match your Redis instance. - redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 \ No newline at end of file + endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace + access_key: admin # This must match the rootPassword in the minio chart + secret_key: admin_password # This must match the rootUser in the minio chart \ No newline at end of file diff --git a/charts/langsmith-observability/examples/e2e-stack-s3.yaml b/charts/langsmith-observability/examples/e2e-stack-s3.yaml index ac51a7a7..ae172aad 100644 --- a/charts/langsmith-observability/examples/e2e-stack-s3.yaml +++ b/charts/langsmith-observability/examples/e2e-stack-s3.yaml @@ -2,8 +2,36 @@ # You can disable parts as you see fit, such as exporters, or logs/metrics/traces. # NOTE: This configuration is not recommended for production environments. -langSmithReleaseName: "langsmith" -langSmithNamespace: "langsmith" +langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. +langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. + +# ======================== Metrics Exporters ======================== + +kubestatemetrics: + enabled: true + # Change this value to match your LangSmith namespace. + namespaces: "langsmith" + +postgresexporter: + enabled: true + config: + # Change these values to match your Postgres instance. + datasource: + host: langsmith-postgres.langsmith.svc.cluster.local + user: postgres + password: postgres + database: postgres + port: "5432" + +nginxexporter: + enabled: true + # Change this value to match your LangSmith frontend service. + nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" + +redisexporter: + enabled: true + # Change this value to match your Redis instance. + redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 # ======================== OTEL Collector ======================== otelCollector: @@ -31,10 +59,10 @@ loki: chunks: langsmith-lgtm-stack ruler: langsmith-lgtm-stack s3: - endpoint: s3.${REGION}.amazonaws.com - region: ${REGION} - secretAccessKey: ${YOUR_SECRET_ACCESS_KEY} - accessKeyId: ${YOUR_ACCESS_KEY_ID} + endpoint: s3.${REGION}.amazonaws.com # Change this value to match your S3 endpoint. + region: ${REGION} # Change this value to match your S3 region. + secretAccessKey: ${SECRET_ACCESS_KEY} # Change this value to match your S3 secret key. + accessKeyId: ${ACCESS_KEY_ID} # Change this value to match your S3 access key. insecure: false s3ForcePathStyle: false @@ -42,7 +70,7 @@ loki: object_prefix: loki aws: region: ${REGION} - bucketnames: ${YOUR_BUCKET} + bucketnames: ${BUCKET_NAME} s3forcepathstyle: false # Metrics storage + retrieval @@ -55,13 +83,12 @@ mimir: storage: backend: s3 s3: - endpoint: s3.${REGION}.amazonaws.com - bucket_name: ${YOUR_BUCKET} - region: ${REGION} - secret_access_key: ${YOUR_SECRET_ACCESS_KEY} - access_key_id: ${YOUR_ACCESS_KEY_ID} - insecure: false - s3forcepathstyle: false + endpoint: "s3.${REGION}.amazonaws.com" # Change this value to match your S3 endpoint. + bucket_name: ${BUCKET_NAME} # Change this value to match your S3 bucket. + region: ${REGION} # Change this value to match your S3 region. + secret_access_key: ${SECRET_ACCESS_KEY} # Change this value to match your S3 secret key. + access_key_id: ${ACCESS_KEY_ID} # Change this value to match your S3 access key. + insecure: false blocks_storage: storage_prefix: mimirBlocks @@ -79,39 +106,9 @@ tempo: trace: backend: s3 s3: - # Modify these values do match your S3 bucket. - access_key: ${YOUR_ACCESS_KEY_ID} - secret_key: ${YOUR_SECRET_ACCESS_KEY} - bucket: ${YOUR_BUCKET} - endpoint: s3.${REGION}.amazonaws.com + access_key: ${ACCESS_KEY_ID} # Change this value to match your S3 access key. + secret_key: ${SECRET_ACCESS_KEY} # Change this value to match your S3 secret key. + bucket: ${BUCKET_NAME} # Change this value to match your S3 bucket. + endpoint: s3.${REGION}.amazonaws.com # Change this value to match your S3 endpoint. insecure: false - prefix: tempo - s3forcepathstyle: false - -# ======================== Metrics Exporters ======================== - -kubestatemetrics: - enabled: true - # Change this value to match your LangSmith namespace. - namespaces: "langsmith" - -postgresexporter: - enabled: true - config: - # Change these values to match your Postgres instance. - datasource: - host: langsmith-postgres.langsmith.svc.cluster.local - user: postgres - password: postgres - database: postgres - port: "5432" - -nginxexporter: - enabled: true - # Change this value to match your LangSmith frontend service. - nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" - -redisexporter: - enabled: true - # Change this value to match your Redis instance. - redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 \ No newline at end of file + prefix: tempo # Prefix in the s3 bucket to write data to. \ No newline at end of file diff --git a/charts/langsmith-observability/examples/metric-exporters-only.yaml b/charts/langsmith-observability/examples/metric-exporters-only.yaml index 2de52b34..c082f1c1 100644 --- a/charts/langsmith-observability/examples/metric-exporters-only.yaml +++ b/charts/langsmith-observability/examples/metric-exporters-only.yaml @@ -1,6 +1,9 @@ # This configuration is to deploy all of the Prometheus Exporters, but not the LGTM Stack or OTEL collector. # Use this if you already have a collector and just want to scrape all metrics from LangSmith. +langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. +langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. + kubestatemetrics: enabled: true # Change this value to match your LangSmith namespace. diff --git a/charts/langsmith-observability/templates/grafana/grafana-dashboards-configmap.yaml b/charts/langsmith-observability/templates/grafana/grafana-dashboards-configmap.yaml new file mode 100644 index 00000000..1f46b259 --- /dev/null +++ b/charts/langsmith-observability/templates/grafana/grafana-dashboards-configmap.yaml @@ -0,0 +1,21 @@ +{{- if .Values.grafana.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboards + labels: + grafana_dashboard: "1" +data: + clickhouse.json: | +{{ .Files.Get "dashboards/clickhouse.json" | indent 4 }} + kube-state-metrics.json: | +{{ .Files.Get "dashboards/kube-state-metrics.json" | indent 4 }} + langsmith-services.json: | +{{ .Files.Get "dashboards/langsmith-services.json" | indent 4 }} + nginx.json: | +{{ .Files.Get "dashboards/nginx.json" | indent 4 }} + postgres.json: | +{{ .Files.Get "dashboards/postgres.json" | indent 4 }} + redis.json: | +{{ .Files.Get "dashboards/redis.json" | indent 4 }} +{{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml index 1bc1b011..599cf958 100644 --- a/charts/langsmith-observability/templates/otel/gateway.yaml +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -2,7 +2,7 @@ apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: - name: {{ .Values.otelCollector.name }}-gateway + name: langsmith-collector-gateway spec: mode: deployment image: {{ .Values.otelCollector.image.repository }}:{{ .Values.otelCollector.image.tag }} @@ -88,7 +88,7 @@ spec: {{ end }} {{ if .Values.otelCollector.traces.enabled }} otlphttp/traces: - endpoint: http://langsmith-observability-tempo-distributor-discovery.romain-observability.svc.cluster.local:4318 + endpoint: http://{{ .Release.Name }}-tempo-distributor-discovery.{{ .Release.Namespace }}.svc.cluster.local:4318 {{ end }} service: diff --git a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml index b8eb54b9..ad4d8625 100644 --- a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml @@ -2,7 +2,7 @@ apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: - name: {{ .Values.otelCollector.name }}-sidecar + name: langsmith-collector-sidecar spec: mode: sidecar image: {{ .Values.otelCollector.image.repository }}:{{ .Values.otelCollector.image.tag }} diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml index beb964e8..e47da3a8 100644 --- a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -30,7 +30,7 @@ roleRef: namespace: {{ .Release.Namespace }} subjects: - kind: ServiceAccount - name: {{ .Values.otelCollector.name }}-gateway-collector + name: langsmith-collector-gateway namespace: {{ .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 @@ -44,6 +44,6 @@ roleRef: namespace: {{ .Values.langsmithNamespace }} subjects: - kind: ServiceAccount - name: {{ .Values.otelCollector.name }}-gateway-collector + name: langsmith-collector-gateway namespace: {{ .Release.Namespace }} {{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index ee8b8cc3..a4d3881c 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -1,7 +1,7 @@ -# This should match the namespace of the langsmith release -langsmithNamespace: "romain" +# The namespace in which langsmith is deployed. +langsmithNamespace: "langsmith" -# This should match the release name of the langsmith release +# The release name of the langsmith release. langSmithReleaseName: "langsmith" # ======================== Grafana ======================== @@ -22,6 +22,7 @@ grafana: uid: prom type: prometheus url: http://{{ .Release.Name }}-mimir-nginx/prometheus + isDefault: true - name: Tempo uid: tempo type: tempo @@ -36,6 +37,20 @@ grafana: datasourceUid: prom serviceMap: datasourceUid: prom + dashboardProviders: + dashboardproviders.yaml: + apiVersion: 1 + providers: + - name: 'default' + orgId: 1 + folder: '' + type: file + disableDeletion: false + editable: true + options: + path: /var/lib/grafana/dashboards/default + dashboardsConfigMaps: + default: "grafana-dashboards" # ======================== Kube State Metrics ======================== @@ -46,6 +61,13 @@ kubestatemetrics: type: ClusterIP port: 8080 namespaces: "romain" + resources: + requests: + cpu: 100m + memory: 250Mi + limits: + cpu: 250m + memory: 500Mi # ======================== Loki ======================== @@ -193,7 +215,6 @@ nginxexporter: # ======================== OTEL Collector ======================== otelCollector: - name: "langsmith-collector" image: repository: otel/opentelemetry-collector-contrib tag: "0.123.0" @@ -258,7 +279,6 @@ tempo: secret_key: admin_password bucket: langsmith-lgtm-stack endpoint: "{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000" - s3forcepathstyle: true # Required true for minio insecure: true prefix: tempo @@ -268,15 +288,4 @@ tempo: grpc: enabled: true http: - enabled: true - zipkin: - enabled: false - jaeger: - thriftHttp: - enabled: false - opencensus: - enabled: false - - metricsGenerator: - enabled: true - + enabled: true \ No newline at end of file diff --git a/charts/langsmith/examples/telemetry_config.yaml b/charts/langsmith/examples/telemetry_config.yaml new file mode 100644 index 00000000..c4a03b2b --- /dev/null +++ b/charts/langsmith/examples/telemetry_config.yaml @@ -0,0 +1,18 @@ +config: + langsmithLicenseKey: "YOUR_LICENSE_KEY" + apiKeySalt: "YOUR_API_KEY_SALT" + authType: "mixed" + basicAuth: + enabled: true + initialOrgAdminEmail: "youremail@corp.dev" + initialOrgAdminPassword: "TestLangSmith123!" + jwtSecret: "YOUR_JWT_SECRET" + # existingSecretName: "langsmith-config" You can also put the above into a secret if you want to avoid putting the license key in the values file. + +observability: + sidecarCollector: # This will add an annotation to your containers telling the OTEL Operator to bring up a sidecar container. Used in the LangSmith Observability helm chart to capture logs. + enabled: true + namespace: "langsmith-observability" # Replace with your LangSmith Observability namespace. + tracing: + enabled: true + endpoint: "http://${YOUR_OTEL_GATEWAY_ENDPOINT}/v1/traces" # Replace this with the endpoint of your trace collector. If you are using the LangSmith Observability helm chart, this will be the endpoint of the OTEL Gateway collector. \ No newline at end of file diff --git a/charts/langsmith/templates/_helpers.tpl b/charts/langsmith/templates/_helpers.tpl index a2d95322..386cbfe5 100644 --- a/charts/langsmith/templates/_helpers.tpl +++ b/charts/langsmith/templates/_helpers.tpl @@ -50,7 +50,7 @@ Common labels for the observability stack */}} {{- define "langsmith.observabilityAnnotations" -}} {{- if .Values.config.observability.sidecarCollector.enabled }} -sidecar.opentelemetry.io/inject: {{ .Values.config.observability.sidecarCollector.namespace }}/{{ .Values.config.observability.sidecarCollector.name }} +sidecar.opentelemetry.io/inject: {{ .Values.config.observability.sidecarCollector.namespace }}/langsmith-collector-sidecar {{- end }} {{- end }} diff --git a/charts/langsmith/templates/config-map.yaml b/charts/langsmith/templates/config-map.yaml index 13ca8e0c..5a0cb3e0 100644 --- a/charts/langsmith/templates/config-map.yaml +++ b/charts/langsmith/templates/config-map.yaml @@ -35,7 +35,7 @@ data: FF_RUN_STATS_GROUP_BY_ENABLED_ALL: "true" {{- if .Values.config.observability.tracing.enabled }} OTEL_TRACING_ENABLED: "{{ .Values.config.observability.tracing.enabled }}" - OTLP_ENDPOINT: "http://{{ .Values.config.observability.tracing.endpoint }}" + OTLP_ENDPOINT: "{{ .Values.config.observability.tracing.endpoint }}" OTEL_ENVIRONMENT: "{{ .Values.config.observability.tracing.env }}" OTEL_EXPORTER: "{{ .Values.config.observability.tracing.exporter }}" OTLE_USE_TLS: "{{ .Values.config.observability.tracing.useTls }}" diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 43a2c1e0..8556b18e 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -172,13 +172,12 @@ config: coBrandingEnabled: true observability: - sidecarCollector: + sidecarCollector: # This will add an annotation to your containers telling the OTEL Operator to bring up a sidecar container. Used in the LangSmith Observability helm chart. enabled: false - namespace: "langsmith-observability" - name: "langsmith-collector-sidecar" + namespace: "langsmith-observability" # Replace with your LangSmith Observability namespace. tracing: enabled: false - endpoint: "" + endpoint: "" # Replace this with the endpoint of your trace collector. If you are using the LangSmith Observability helm chart, this will be the endpoint of the OTEL Gateway collector. useTls: true env: "ls_self_hosted" exporter: "http" From 43ddcbee7a9a5ee41280468f549b19253dd2ca41 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Mon, 23 Jun 2025 16:11:47 -0700 Subject: [PATCH 17/27] cleanup --- .../examples/e2e-stack-minio.yaml | 16 ++-- .../examples/e2e-stack-s3.yaml | 2 - .../templates/_helpers.tpl | 32 ------- .../grafana/grafana-dashboards-configmap.yaml | 2 +- .../templates/otel/gateway.yaml | 5 +- charts/langsmith-observability/values.yaml | 2 +- charts/langsmith/README.md | 14 ++-- .../langsmith/ci/telemetry-config-values.yaml | 83 ------------------- .../langsmith/examples/telemetry_config.yaml | 4 +- charts/langsmith/values.yaml | 3 +- 10 files changed, 22 insertions(+), 141 deletions(-) delete mode 100644 charts/langsmith-observability/templates/_helpers.tpl delete mode 100644 charts/langsmith/ci/telemetry-config-values.yaml diff --git a/charts/langsmith-observability/examples/e2e-stack-minio.yaml b/charts/langsmith-observability/examples/e2e-stack-minio.yaml index 7fe7ea52..163e61e9 100644 --- a/charts/langsmith-observability/examples/e2e-stack-minio.yaml +++ b/charts/langsmith-observability/examples/e2e-stack-minio.yaml @@ -2,12 +2,10 @@ # You can disable parts as you see fit, such as exporters, or logs/metrics/traces. # NOTE: This configuration is not recommended for production environments. -# ======================== Metrics Exporters ======================== -# Feel free to disable exporters if you already have them deployed. - langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. +# ======================== Metrics Exporters ======================== kubestatemetrics: enabled: true # Change this value to match your LangSmith namespace. @@ -59,17 +57,17 @@ minio: grafana: enabled: true -# Logging storage + retrieval +# Log storage + retrieval loki: enabled: true loki: storage: s3: - endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace + endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace for the Minio instance. secretAccessKey: admin_password # This must match the rootPassword in the minio chart accessKeyId: admin # This must match the rootUser in the minio chart -# Metrics storage + retrieval +# Metric storage + retrieval mimir: enabled: true mimir: @@ -77,17 +75,17 @@ mimir: common: storage: s3: - endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace + endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace for the Minio instance. secret_access_key: admin_password # This must match the rootPassword in the minio chart access_key_id: admin # This must match the rootUser in the minio chart -# Traces storage + retrieval +# Trace storage + retrieval tempo: enabled: true storage: trace: backend: s3 s3: - endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace + endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace for the Minio instance. access_key: admin # This must match the rootPassword in the minio chart secret_key: admin_password # This must match the rootUser in the minio chart \ No newline at end of file diff --git a/charts/langsmith-observability/examples/e2e-stack-s3.yaml b/charts/langsmith-observability/examples/e2e-stack-s3.yaml index ae172aad..567caa96 100644 --- a/charts/langsmith-observability/examples/e2e-stack-s3.yaml +++ b/charts/langsmith-observability/examples/e2e-stack-s3.yaml @@ -6,7 +6,6 @@ langsmithNamespace: "langsmith" # Change this value to match your LangSmith name langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. # ======================== Metrics Exporters ======================== - kubestatemetrics: enabled: true # Change this value to match your LangSmith namespace. @@ -43,7 +42,6 @@ otelCollector: enabled: true # ======================== LGTM Stack ======================== - # Telemetry visualization tool grafana: enabled: true diff --git a/charts/langsmith-observability/templates/_helpers.tpl b/charts/langsmith-observability/templates/_helpers.tpl deleted file mode 100644 index e2d61e02..00000000 --- a/charts/langsmith-observability/templates/_helpers.tpl +++ /dev/null @@ -1,32 +0,0 @@ -{{/* -Check if any of the three services (redis, postgres, clickhouse) metrics are enabled -Usage: include "langsmith-observability.anyMetricsEnabled" . -*/}} -{{- define "langsmith-observability.databaseMetricsEnabled" -}} -{{- or .Values.otelCollector.metrics.redis.enabled .Values.otelCollector.metrics.postgres.enabled (default false .Values.otelCollector.metrics.clickhouse.enabled) -}} -{{- end -}} - -{{/* -Build a regex pattern for enabled services (redis, postgres, clickhouse) -Usage: include "langsmith-observability.enabledServicesRegex" . -*/}} -{{- define "langsmith-observability.enabledServicesRegex" -}} -{{- $services := list -}} -{{- if .Values.otelCollector.metrics.redis.enabled -}} - {{- $serviceName := default (printf "%s-redis" .Values.langSmithReleaseName) .Values.otelCollector.metrics.redis.serviceName -}} - {{- $services = append $services $serviceName -}} -{{- end -}} -{{- if .Values.otelCollector.metrics.postgres.enabled -}} - {{- $serviceName := default (printf "%s-postgres" .Values.langSmithReleaseName) .Values.otelCollector.metrics.postgres.serviceName -}} - {{- $services = append $services $serviceName -}} -{{- end -}} -{{- if .Values.otelCollector.metrics.clickhouse.enabled -}} - {{- $serviceName := default (printf "%s-clickhouse" .Values.langSmithReleaseName) .Values.otelCollector.metrics.clickhouse.serviceName -}} - {{- $services = append $services $serviceName -}} -{{- end -}} -{{- if $services -}} -({{ join "|" $services }}) -{{- end -}} -{{- end -}} - - diff --git a/charts/langsmith-observability/templates/grafana/grafana-dashboards-configmap.yaml b/charts/langsmith-observability/templates/grafana/grafana-dashboards-configmap.yaml index 1f46b259..0b741e1e 100644 --- a/charts/langsmith-observability/templates/grafana/grafana-dashboards-configmap.yaml +++ b/charts/langsmith-observability/templates/grafana/grafana-dashboards-configmap.yaml @@ -2,7 +2,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: grafana-dashboards + name: {{ .Values.grafana.dashboardsConfigMaps.default }} labels: grafana_dashboard: "1" data: diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml index 599cf958..20de9d29 100644 --- a/charts/langsmith-observability/templates/otel/gateway.yaml +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -91,10 +91,7 @@ spec: endpoint: http://{{ .Release.Name }}-tempo-distributor-discovery.{{ .Release.Namespace }}.svc.cluster.local:4318 {{ end }} - service: - telemetry: - logs: - level: debug + service: pipelines: {{ if .Values.otelCollector.metrics.enabled }} metrics/langsmith: diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index a4d3881c..4ade9342 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -50,7 +50,7 @@ grafana: options: path: /var/lib/grafana/dashboards/default dashboardsConfigMaps: - default: "grafana-dashboards" + default: "langsmith-grafana-dashboards" # ======================== Kube State Metrics ======================== diff --git a/charts/langsmith/README.md b/charts/langsmith/README.md index 99460a37..3d6f754a 100644 --- a/charts/langsmith/README.md +++ b/charts/langsmith/README.md @@ -18,29 +18,29 @@ For information on how to use this chart, up-to-date release notes, and other gu | fullnameOverride | string | `""` | String to fully override `"langsmith.fullname"` | | images.aceBackendImage.pullPolicy | string | `"IfNotPresent"` | | | images.aceBackendImage.repository | string | `"docker.io/langchain/langsmith-ace-backend"` | | -| images.aceBackendImage.tag | string | `"0.10.74"` | | +| images.aceBackendImage.tag | string | `"0.10.83"` | | | images.backendImage.pullPolicy | string | `"IfNotPresent"` | | | images.backendImage.repository | string | `"docker.io/langchain/langsmith-backend"` | | -| images.backendImage.tag | string | `"0.10.74"` | | +| images.backendImage.tag | string | `"0.10.83"` | | | images.clickhouseImage.pullPolicy | string | `"Always"` | | | images.clickhouseImage.repository | string | `"docker.io/clickhouse/clickhouse-server"` | | | images.clickhouseImage.tag | string | `"24.8"` | | | images.frontendImage.pullPolicy | string | `"IfNotPresent"` | | | images.frontendImage.repository | string | `"docker.io/langchain/langsmith-frontend"` | | -| images.frontendImage.tag | string | `"0.10.74"` | | +| images.frontendImage.tag | string | `"0.10.83"` | | | images.hostBackendImage.pullPolicy | string | `"IfNotPresent"` | | | images.hostBackendImage.repository | string | `"docker.io/langchain/hosted-langserve-backend"` | | -| images.hostBackendImage.tag | string | `"0.10.74"` | | +| images.hostBackendImage.tag | string | `"0.10.83"` | | | images.imagePullSecrets | list | `[]` | Secrets with credentials to pull images from a private registry. Specified as name: value. | | images.operatorImage.pullPolicy | string | `"IfNotPresent"` | | | images.operatorImage.repository | string | `"docker.io/langchain/langgraph-operator"` | | | images.operatorImage.tag | string | `"6cc83a8"` | | | images.platformBackendImage.pullPolicy | string | `"IfNotPresent"` | | | images.platformBackendImage.repository | string | `"docker.io/langchain/langsmith-go-backend"` | | -| images.platformBackendImage.tag | string | `"0.10.74"` | | +| images.platformBackendImage.tag | string | `"0.10.83"` | | | images.playgroundImage.pullPolicy | string | `"IfNotPresent"` | | | images.playgroundImage.repository | string | `"docker.io/langchain/langsmith-playground"` | | -| images.playgroundImage.tag | string | `"0.10.74"` | | +| images.playgroundImage.tag | string | `"0.10.83"` | | | images.postgresImage.pullPolicy | string | `"IfNotPresent"` | | | images.postgresImage.repository | string | `"docker.io/postgres"` | | | images.postgresImage.tag | string | `"14.7"` | | @@ -233,6 +233,8 @@ For information on how to use this chart, up-to-date release notes, and other gu | config.oauth.oauthIssuerUrl | string | `""` | | | config.oauth.oauthScopes | string | `"email,profile,openid"` | | | config.oauth.oauthSessionMaxSec | string | `"86400"` | | +| config.observability.sidecarCollector.enabled | bool | `false` | | +| config.observability.sidecarCollector.namespace | string | `"langsmith-observability"` | | | config.observability.tracing.enabled | bool | `false` | | | config.observability.tracing.endpoint | string | `""` | | | config.observability.tracing.env | string | `"ls_self_hosted"` | | diff --git a/charts/langsmith/ci/telemetry-config-values.yaml b/charts/langsmith/ci/telemetry-config-values.yaml deleted file mode 100644 index 903d150a..00000000 --- a/charts/langsmith/ci/telemetry-config-values.yaml +++ /dev/null @@ -1,83 +0,0 @@ -# Lightweight configuration with telemetry enabled. Only use this if you are running Langsmith in a development environment. -config: - langsmithLicenseKey: "YOUR_LICENSE_KEY" - apiKeySalt: "YOUR_API_KEY_SALT" - authType: "mixed" - basicAuth: - enabled: true - initialOrgAdminEmail: "youremail@corp.dev" - initialOrgAdminPassword: "TestLangSmith123!" - jwtSecret: "YOUR_JWT_SECRET" - - observability: - tracing: - enabled: true - endpoint: "YOUR_COLLECTOR_ENDPOINT" - env: "ls_self_hosted" - exporter: "http" - useTls: true - -# Note, you likely should tweak the values to match something that fits your local development environment. -aceBackend: - deployment: - resources: - requests: - cpu: 100m - memory: 500Mi - -backend: - deployment: - resources: - requests: - cpu: 100m - memory: 500Mi - -frontend: - deployment: - resources: - requests: - cpu: 100m - memory: 500Mi - -platformBackend: - deployment: - resources: - requests: - cpu: 100m - memory: 500Mi - -playground: - deployment: - resources: - requests: - cpu: 100m - memory: 500Mi - -queue: - replicas: 1 - deployment: - resources: - requests: - cpu: 100m - memory: 500Mi - -postgres: - statefulSet: - resources: - requests: - cpu: 200m - memory: 500Mi - -redis: - statefulSet: - resources: - requests: - cpu: 200m - memory: 500Mi - -clickhouse: - statefulSet: - resources: - requests: - cpu: 200m - memory: 500Mi diff --git a/charts/langsmith/examples/telemetry_config.yaml b/charts/langsmith/examples/telemetry_config.yaml index c4a03b2b..5c04be66 100644 --- a/charts/langsmith/examples/telemetry_config.yaml +++ b/charts/langsmith/examples/telemetry_config.yaml @@ -10,9 +10,9 @@ config: # existingSecretName: "langsmith-config" You can also put the above into a secret if you want to avoid putting the license key in the values file. observability: - sidecarCollector: # This will add an annotation to your containers telling the OTEL Operator to bring up a sidecar container. Used in the LangSmith Observability helm chart to capture logs. + sidecarCollector: # Use this for the LangSmith Observability helm chart. This will add an annotation to your containers telling the OTEL Operator to bring up a sidecar container. enabled: true namespace: "langsmith-observability" # Replace with your LangSmith Observability namespace. tracing: enabled: true - endpoint: "http://${YOUR_OTEL_GATEWAY_ENDPOINT}/v1/traces" # Replace this with the endpoint of your trace collector. If you are using the LangSmith Observability helm chart, this will be the endpoint of the OTEL Gateway collector. \ No newline at end of file + endpoint: "http://${YOUR_OTEL_GATEWAY_ENDPOINT}/v1/traces" # Replace this with the endpoint of your trace collector. \ No newline at end of file diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 8556b18e..7bf31633 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -88,7 +88,7 @@ config: # -- Must be 'oauth' for OAuth with PKCE, 'mixed' for basic auth or OAuth without PKCE authType: "" basicAuth: - enabled: true + enabled: false initialOrgAdminEmail: "" # Either set the password and JWT secret in plaintext, or set in the secret specified by existingSecretName above. initialOrgAdminPassword: "" @@ -1408,6 +1408,7 @@ redis: annotations: {} podSecurityContext: {} securityContext: {} + # In a production environment, we strongly recommend an external Redis database. resources: limits: cpu: 4000m From 1f8eddcdd1e5fd9c04ac66fed51cdfea2a1a7373 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Mon, 23 Jun 2025 16:27:54 -0700 Subject: [PATCH 18/27] readme --- charts/langsmith-observability/README.md | 245 ++++++++++++++++++ .../langsmith-observability/README.md.gotmpl | 143 ++++++++++ 2 files changed, 388 insertions(+) create mode 100644 charts/langsmith-observability/README.md create mode 100644 charts/langsmith-observability/README.md.gotmpl diff --git a/charts/langsmith-observability/README.md b/charts/langsmith-observability/README.md new file mode 100644 index 00000000..7b0e3d7f --- /dev/null +++ b/charts/langsmith-observability/README.md @@ -0,0 +1,245 @@ +# langsmith-observability + +![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.1.0](https://img.shields.io/badge/AppVersion-0.1.0-informational?style=flat-square) + +Helm chart to deploy the observability stack for LangSmith. + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| https://charts.bitnami.com/bitnami | minio | 16.0.10 | +| https://grafana.github.io/helm-charts | grafana | 9.2.6 | +| https://grafana.github.io/helm-charts | loki | 6.30.1 | +| https://grafana.github.io/helm-charts | mimir(mimir-distributed) | 5.7.0 | +| https://grafana.github.io/helm-charts | tempo(tempo-distributed) | 1.41.1 | +| https://prometheus-community.github.io/helm-charts | kubestatemetrics(kube-state-metrics) | 5.37.0 | +| https://prometheus-community.github.io/helm-charts | nginxexporter(prometheus-nginx-exporter) | 1.6.0 | +| https://prometheus-community.github.io/helm-charts | postgresexporter(prometheus-postgres-exporter) | 6.10.2 | +| https://prometheus-community.github.io/helm-charts | redisexporter(prometheus-redis-exporter) | 6.11.0 | + +## Documentation +For information on how to use this chart and how to deploy the full LangSmith Observability stack, please refer to the [documentation](https://docs.smith.langchain.com/self_hosting/observability). + +NOTE: For any values in dependencies (Loki, Mimir, Tempo, etc.), you can update the values as you see fit. Only a small set of +values are listed in the `values.yaml` and this `README`. Refer to the `values.yaml` files listed next to each dependency header for additional values. + +## General parameters + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| langSmithReleaseName | string | `"langsmith"` | | +| langsmithNamespace | string | `"langsmith"` | | + +## Grafana + +Values for Grafana: `https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| grafana.dashboardProviders."dashboardproviders.yaml".apiVersion | int | `1` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].disableDeletion | bool | `false` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].editable | bool | `true` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].folder | string | `""` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].name | string | `"default"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].options.path | string | `"/var/lib/grafana/dashboards/default"` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].orgId | int | `1` | | +| grafana.dashboardProviders."dashboardproviders.yaml".providers[0].type | string | `"file"` | | +| grafana.dashboardsConfigMaps.default | string | `"langsmith-grafana-dashboards"` | | +| grafana.datasources."datasources.yaml".apiVersion | int | `1` | | +| grafana.datasources."datasources.yaml".datasources[0].isDefault | bool | `false` | | +| grafana.datasources."datasources.yaml".datasources[0].name | string | `"Loki"` | | +| grafana.datasources."datasources.yaml".datasources[0].type | string | `"loki"` | | +| grafana.datasources."datasources.yaml".datasources[0].uid | string | `"loki"` | | +| grafana.datasources."datasources.yaml".datasources[0].url | string | `"http://{{ .Release.Name }}-loki-gateway"` | | +| grafana.datasources."datasources.yaml".datasources[1].isDefault | bool | `true` | | +| grafana.datasources."datasources.yaml".datasources[1].name | string | `"Mimir"` | | +| grafana.datasources."datasources.yaml".datasources[1].type | string | `"prometheus"` | | +| grafana.datasources."datasources.yaml".datasources[1].uid | string | `"prom"` | | +| grafana.datasources."datasources.yaml".datasources[1].url | string | `"http://{{ .Release.Name }}-mimir-nginx/prometheus"` | | +| grafana.datasources."datasources.yaml".datasources[2].isDefault | bool | `false` | | +| grafana.datasources."datasources.yaml".datasources[2].jsonData.lokiSearch.datasourceUid | string | `"loki"` | | +| grafana.datasources."datasources.yaml".datasources[2].jsonData.serviceMap.datasourceUid | string | `"prom"` | | +| grafana.datasources."datasources.yaml".datasources[2].jsonData.tracesToLogsV2.datasourceUid | string | `"loki"` | | +| grafana.datasources."datasources.yaml".datasources[2].jsonData.tracesToMetrics.datasourceUid | string | `"prom"` | | +| grafana.datasources."datasources.yaml".datasources[2].name | string | `"Tempo"` | | +| grafana.datasources."datasources.yaml".datasources[2].type | string | `"tempo"` | | +| grafana.datasources."datasources.yaml".datasources[2].uid | string | `"tempo"` | | +| grafana.datasources."datasources.yaml".datasources[2].url | string | `"http://{{ .Release.Name }}-tempo-query-frontend-discovery:3200"` | | +| grafana.enabled | bool | `false` | | + +## Kube State Metrics + +Values for Kube State Metrics: `https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-state-metrics/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| kubestatemetrics.enabled | bool | `false` | | +| kubestatemetrics.namespaces | string | `"romain"` | | +| kubestatemetrics.resources.limits.cpu | string | `"250m"` | | +| kubestatemetrics.resources.limits.memory | string | `"500Mi"` | | +| kubestatemetrics.resources.requests.cpu | string | `"100m"` | | +| kubestatemetrics.resources.requests.memory | string | `"250Mi"` | | +| kubestatemetrics.service.port | int | `8080` | | +| kubestatemetrics.service.type | string | `"ClusterIP"` | | + +## Loki + +Values for Loki: `https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| loki.backend.replicas | int | `0` | | +| loki.bloomBuilder.replicas | int | `0` | | +| loki.bloomGateway.replicas | int | `0` | | +| loki.bloomPlanner.replicas | int | `0` | | +| loki.compactor.replicas | int | `1` | | +| loki.deploymentMode | string | `"Distributed"` | | +| loki.distributor.maxUnavailable | int | `2` | | +| loki.distributor.replicas | int | `3` | | +| loki.enabled | bool | `false` | | +| loki.indexGateway.maxUnavailable | int | `1` | | +| loki.indexGateway.replicas | int | `2` | | +| loki.ingester.replicas | int | `3` | | +| loki.loki.auth_enabled | bool | `false` | | +| loki.loki.ingester.chunk_encoding | string | `"snappy"` | | +| loki.loki.querier.max_concurrent | int | `4` | | +| loki.loki.schemaConfig.configs[0].from | string | `"2024-04-01"` | | +| loki.loki.schemaConfig.configs[0].index.period | string | `"24h"` | | +| loki.loki.schemaConfig.configs[0].index.prefix | string | `"loki_index_"` | | +| loki.loki.schemaConfig.configs[0].object_store | string | `"s3"` | | +| loki.loki.schemaConfig.configs[0].schema | string | `"v13"` | | +| loki.loki.schemaConfig.configs[0].store | string | `"tsdb"` | | +| loki.loki.storage.bucketNames.chunks | string | `"langsmith-lgtm-stack"` | | +| loki.loki.storage.bucketNames.ruler | string | `"langsmith-lgtm-stack"` | | +| loki.loki.storage.s3.accessKeyId | string | `"admin"` | | +| loki.loki.storage.s3.endpoint | string | `"{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000"` | | +| loki.loki.storage.s3.insecure | bool | `true` | | +| loki.loki.storage.s3.s3ForcePathStyle | bool | `true` | | +| loki.loki.storage.s3.secretAccessKey | string | `"admin_password"` | | +| loki.loki.storage.type | string | `"s3"` | | +| loki.loki.storage_config.aws.bucketnames | string | `"langsmith-lgtm-stack"` | | +| loki.loki.storage_config.aws.region | string | `"us-west-2"` | | +| loki.loki.storage_config.aws.s3forcepathstyle | bool | `true` | | +| loki.loki.storage_config.object_prefix | string | `"loki"` | | +| loki.lokiCanary.enabled | bool | `false` | | +| loki.querier.maxUnavailable | int | `2` | | +| loki.querier.replicas | int | `3` | | +| loki.queryFrontend.maxUnavailable | int | `1` | | +| loki.queryFrontend.replicas | int | `2` | | +| loki.queryScheduler.replicas | int | `2` | | +| loki.read.replicas | int | `0` | | +| loki.singleBinary.replicas | int | `0` | | +| loki.test.enabled | bool | `false` | | +| loki.write.replicas | int | `0` | | + +## Mimir + +Values for Mimir: `https://github.com/grafana/helm-charts/blob/main/charts/mimir/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| mimir.enabled | bool | `false` | | +| mimir.mimir.structuredConfig.alertmanager_storage.storage_prefix | string | `"mimirAlertmanager"` | | +| mimir.mimir.structuredConfig.blocks_storage.storage_prefix | string | `"mimirBlocks"` | | +| mimir.mimir.structuredConfig.common.storage.backend | string | `"s3"` | | +| mimir.mimir.structuredConfig.common.storage.s3.access_key_id | string | `"admin"` | | +| mimir.mimir.structuredConfig.common.storage.s3.bucket_name | string | `"langsmith-lgtm-stack"` | | +| mimir.mimir.structuredConfig.common.storage.s3.endpoint | string | `"{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000"` | | +| mimir.mimir.structuredConfig.common.storage.s3.insecure | bool | `true` | | +| mimir.mimir.structuredConfig.common.storage.s3.secret_access_key | string | `"admin_password"` | | +| mimir.mimir.structuredConfig.ruler_storage.storage_prefix | string | `"mimirRuler"` | | +| mimir.minio.enabled | bool | `false` | | + +## Minio + +Values for Minio: `https://github.com/bitnami/charts/blob/main/bitnami/minio/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| minio.auth.rootPassword | string | `"admin_password"` | | +| minio.auth.rootUser | string | `"admin"` | | +| minio.defaultBuckets | string | `"langsmith-lgtm-stack"` | | +| minio.enabled | bool | `false` | | +| minio.mode | string | `"standalone"` | | +| minio.persistence.enabled | bool | `true` | | +| minio.persistence.size | string | `"10Gi"` | | +| minio.readinessProbe.enabled | bool | `false` | | +| minio.replicas | int | `1` | | + +## Nginx Exporter + +Values for Nginx Exporter: `https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-nginx-exporter/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| nginxexporter.enabled | bool | `false` | | +| nginxexporter.nginxServer | string | `"http://langsmith-frontend.romain.svc.cluster.local:80/nginx_status"` | | +| nginxexporter.service.port | int | `9113` | | +| nginxexporter.service.type | string | `"ClusterIP"` | | + +## OTEL Collector + +Values for OTEL Collector: `https://github.com/open-telemetry/opentelemetry-helm-charts/blob/main/charts/opentelemetry-collector-contrib/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| otelCollector.image.repository | string | `"otel/opentelemetry-collector-contrib"` | | +| otelCollector.image.tag | string | `"0.123.0"` | | +| otelCollector.logs.enabled | bool | `false` | | +| otelCollector.metrics.enabled | bool | `false` | | +| otelCollector.serviceAccounts[0] | string | `"langsmith-ace-backend"` | | +| otelCollector.serviceAccounts[1] | string | `"langsmith-backend"` | | +| otelCollector.serviceAccounts[2] | string | `"langsmith-clickhouse"` | | +| otelCollector.serviceAccounts[3] | string | `"langsmith-frontend"` | | +| otelCollector.serviceAccounts[4] | string | `"langsmith-platform-backend"` | | +| otelCollector.serviceAccounts[5] | string | `"langsmith-playground"` | | +| otelCollector.serviceAccounts[6] | string | `"langsmith-postgres"` | | +| otelCollector.serviceAccounts[7] | string | `"langsmith-queue"` | | +| otelCollector.serviceAccounts[8] | string | `"langsmith-redis"` | | +| otelCollector.traces.enabled | bool | `false` | | + +## Postgres Exporter + +Values for Postgres Exporter: `https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-postgres-exporter/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| postgresexporter.config.datasource.database | string | `"postgres"` | | +| postgresexporter.config.datasource.host | string | `"langsmith-postgres.romain.svc.cluster.local"` | | +| postgresexporter.config.datasource.password | string | `"postgres"` | | +| postgresexporter.config.datasource.port | string | `"5432"` | | +| postgresexporter.config.datasource.user | string | `"postgres"` | | +| postgresexporter.enabled | bool | `false` | | +| postgresexporter.service.port | int | `80` | | +| postgresexporter.service.targetPort | int | `9187` | | +| postgresexporter.service.type | string | `"ClusterIP"` | | + +## Redis Exporter + +Values for Redis Exporter: `https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-redis-exporter/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| redisexporter.enabled | bool | `false` | | +| redisexporter.redisAddress | string | `"langsmith-redis.romain.svc.cluster.local:6379"` | | +| redisexporter.service.port | int | `9121` | | +| redisexporter.service.portName | string | `"http"` | | +| redisexporter.service.type | string | `"ClusterIP"` | | + +## Tempo + +Values for Tempo: `https://github.com/grafana/helm-charts/blob/main/charts/tempo-distributed/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| tempo.enabled | bool | `false` | | +| tempo.storage.trace.backend | string | `"s3"` | | +| tempo.storage.trace.s3.access_key | string | `"admin"` | | +| tempo.storage.trace.s3.bucket | string | `"langsmith-lgtm-stack"` | | +| tempo.storage.trace.s3.endpoint | string | `"{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000"` | | +| tempo.storage.trace.s3.insecure | bool | `true` | | +| tempo.storage.trace.s3.prefix | string | `"tempo"` | | +| tempo.storage.trace.s3.secret_key | string | `"admin_password"` | | +| tempo.traces.otlp.grpc.enabled | bool | `true` | | +| tempo.traces.otlp.http.enabled | bool | `true` | | diff --git a/charts/langsmith-observability/README.md.gotmpl b/charts/langsmith-observability/README.md.gotmpl new file mode 100644 index 00000000..14f9c176 --- /dev/null +++ b/charts/langsmith-observability/README.md.gotmpl @@ -0,0 +1,143 @@ +{{ template "chart.header" . }} + +{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }} + +{{ template "chart.description" . }} + +{{ template "chart.requirementsSection" . }} + +## Documentation +For information on how to use this chart and how to deploy the full LangSmith Observability stack, please refer to the [documentation](https://docs.smith.langchain.com/self_hosting/observability). + +NOTE: For any values in dependencies (Loki, Mimir, Tempo, etc.), you can update the values as you see fit. Only a small set of +values are listed in the `values.yaml` and this `README`. Refer to the `values.yaml` files listed next to each dependency header for additional values. + +## General parameters + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if not (or (hasPrefix "grafana" .Key) (hasPrefix "kubestatemetrics" .Key) (hasPrefix "loki" .Key) (hasPrefix "mimir" .Key) (hasPrefix "minio" .Key) (hasPrefix "nginxexporter" .Key) (hasPrefix "otelCollector" .Key) (hasPrefix "postgresexporter" .Key) (hasPrefix "redisexporter" .Key) (hasPrefix "tempo" .Key)) }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## Grafana + +Values for Grafana: `https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "grafana" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## Kube State Metrics + +Values for Kube State Metrics: `https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-state-metrics/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "kubestatemetrics" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## Loki + +Values for Loki: `https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "loki" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## Mimir + +Values for Mimir: `https://github.com/grafana/helm-charts/blob/main/charts/mimir/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "mimir" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## Minio + +Values for Minio: `https://github.com/bitnami/charts/blob/main/bitnami/minio/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "minio" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## Nginx Exporter + +Values for Nginx Exporter: `https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-nginx-exporter/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "nginxexporter" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## OTEL Collector + +Values for OTEL Collector: `https://github.com/open-telemetry/opentelemetry-helm-charts/blob/main/charts/opentelemetry-collector-contrib/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "otelCollector" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## Postgres Exporter + +Values for Postgres Exporter: `https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-postgres-exporter/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "postgresexporter" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## Redis Exporter + +Values for Redis Exporter: `https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-redis-exporter/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "redisexporter" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} + +## Tempo + +Values for Tempo: `https://github.com/grafana/helm-charts/blob/main/charts/tempo-distributed/values.yaml` + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +{{- range .Values }} + {{- if hasPrefix "tempo" .Key }} +| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | + {{- end }} +{{- end }} From 8937ca058c9d7b12652b413c8657aa772185115f Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Mon, 23 Jun 2025 17:30:12 -0700 Subject: [PATCH 19/27] lint --- charts/langsmith/values.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 4e1d1ba8..5a32179b 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -172,12 +172,15 @@ config: coBrandingEnabled: true observability: - sidecarCollector: # This will add an annotation to your containers telling the OTEL Operator to bring up a sidecar container. Used in the LangSmith Observability helm chart. + # This will add an annotation to your containers telling the OTEL Operator to bring up a sidecar container. Used in the LangSmith Observability helm chart. + sidecarCollector: enabled: false - namespace: "langsmith-observability" # Replace with your LangSmith Observability namespace. + # Replace with your LangSmith Observability namespace. + namespace: "langsmith-observability" tracing: enabled: false - endpoint: "" # Replace this with the endpoint of your trace collector. If you are using the LangSmith Observability helm chart, this will be the endpoint of the OTEL Gateway collector. + # Replace this with the endpoint of your trace collector. If you are using the LangSmith Observability helm chart, this will be the endpoint of the OTEL Gateway collector. + endpoint: "" useTls: true env: "ls_self_hosted" exporter: "http" From c89455b599b687fd94cd1562f45a849e4539b95d Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Mon, 23 Jun 2025 18:38:39 -0700 Subject: [PATCH 20/27] fix traces UI --- charts/langsmith-observability/values.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index 4ade9342..6b88d7b2 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -281,6 +281,26 @@ tempo: endpoint: "{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000" insecure: true prefix: tempo + + metricsGenerator: + enabled: true + replicas: 2 + config: + processor: + local_blocks: + filter_server_spans: false + flush_to_storage: true + storage: + path: /var/tempo/generator/wal + traces_storage: + path: /var/tempo/generator/traces + remoteWrite: + enabled: false + + overrides: + defaults: + metrics_generator: + processors: [service-graphs, span-metrics, local-blocks] # Specifies which trace protocols to accept by the gateway. traces: From 0f98c483fb9137d7d0ba8f7775cb66f4f1316cff Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Tue, 24 Jun 2025 21:58:31 -0700 Subject: [PATCH 21/27] working with basic helm chart instead of distributed --- .gitignore | 1 + charts/langsmith-observability/Chart.lock | 14 +- charts/langsmith-observability/Chart.yaml | 13 +- .../charts/mimir-distributed-5.7.0.tgz | Bin 229752 -> 0 bytes .../charts/minio-16.0.10.tgz | Bin 60830 -> 0 bytes .../charts/tempo-distributed-1.41.1.tgz | Bin 110462 -> 0 bytes .../examples/e2e-stack-minio.yaml | 91 ------- .../examples/e2e-stack-s3.yaml | 112 --------- .../examples/e2e-stack.yaml | 60 +++++ .../templates/_helpers.tpl | 38 +++ .../templates/mimir/config-map.yaml | 50 ++++ .../templates/mimir/service.yaml | 17 ++ .../templates/mimir/stateful-set.yaml | 107 ++++++++ .../templates/otel/gateway.yaml | 4 +- .../templates/otel/rbac-gateway.yaml | 6 +- charts/langsmith-observability/values.yaml | 232 ++++++++---------- 16 files changed, 382 insertions(+), 363 deletions(-) delete mode 100644 charts/langsmith-observability/charts/mimir-distributed-5.7.0.tgz delete mode 100644 charts/langsmith-observability/charts/minio-16.0.10.tgz delete mode 100644 charts/langsmith-observability/charts/tempo-distributed-1.41.1.tgz delete mode 100644 charts/langsmith-observability/examples/e2e-stack-minio.yaml delete mode 100644 charts/langsmith-observability/examples/e2e-stack-s3.yaml create mode 100644 charts/langsmith-observability/examples/e2e-stack.yaml create mode 100644 charts/langsmith-observability/templates/_helpers.tpl create mode 100644 charts/langsmith-observability/templates/mimir/config-map.yaml create mode 100644 charts/langsmith-observability/templates/mimir/service.yaml create mode 100644 charts/langsmith-observability/templates/mimir/stateful-set.yaml diff --git a/.gitignore b/.gitignore index 616ed2bb..fbe89df3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ test*.yaml .DS_Store .cursor/ +charts/langsmith-observability/charts/* diff --git a/charts/langsmith-observability/Chart.lock b/charts/langsmith-observability/Chart.lock index b9df41b7..dbfd1918 100644 --- a/charts/langsmith-observability/Chart.lock +++ b/charts/langsmith-observability/Chart.lock @@ -17,14 +17,8 @@ dependencies: - name: loki repository: https://grafana.github.io/helm-charts version: 6.30.1 -- name: minio - repository: https://charts.bitnami.com/bitnami - version: 16.0.10 -- name: mimir-distributed +- name: tempo repository: https://grafana.github.io/helm-charts - version: 5.7.0 -- name: tempo-distributed - repository: https://grafana.github.io/helm-charts - version: 1.41.1 -digest: sha256:0651218d9582068aafcabffbcd9cca92cb61b36ceb46f387e68b8bf2ace30cb4 -generated: "2025-06-20T08:49:15.500046-07:00" + version: 1.23.1 +digest: sha256:10b4bdc443fac82ae4b344eecd575f6fe2c4d3121117d3f51bfe64c01fb14c7e +generated: "2025-06-24T19:14:49.166045-07:00" diff --git a/charts/langsmith-observability/Chart.yaml b/charts/langsmith-observability/Chart.yaml index 338ccf68..dde69f4c 100644 --- a/charts/langsmith-observability/Chart.yaml +++ b/charts/langsmith-observability/Chart.yaml @@ -38,17 +38,8 @@ dependencies: version: 6.30.1 repository: https://grafana.github.io/helm-charts condition: loki.enabled - - name: minio - version: 16.0.10 - repository: https://charts.bitnami.com/bitnami - condition: minio.enabled - - name: mimir-distributed - version: 5.7.0 - repository: https://grafana.github.io/helm-charts - condition: mimir.enabled - alias: mimir - - name: tempo-distributed - version: 1.41.1 + - name: tempo + version: 1.23.1 repository: https://grafana.github.io/helm-charts condition: tempo.enabled alias: tempo \ No newline at end of file diff --git a/charts/langsmith-observability/charts/mimir-distributed-5.7.0.tgz b/charts/langsmith-observability/charts/mimir-distributed-5.7.0.tgz deleted file mode 100644 index 781550e787bc152e58359c210c09889cfd34eb0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229752 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

pFeZ w^8fvv{QZCb<Dc zVQyr3R8em|NM&qo0PMYebKADEIDG!*r@)nRZtUKWk{#!znwvYvP0}`VlGJ0TJ@aPEs9goM&e-G|IeDt@22jj#0<3|TakM93%d~o#W;P7u~ zd`<1IeM%uQ|J(S=Z8bah7kO}=Gl?Z-xtIh9VJ_(m$8u3lBg#f8jY%%Z1RWPRUXbuG z8g~`S&&34&5g>$6h;p2f2?8cUXRPEgfe#3kJe{D0l!cg#Mso_)W0s8y&N3nwq!eMy zvaHOhT#gnb&B9m#5dkjfPlOA~@(H>)3~*7npNG-GgJ>KiM8upH65hSYg~Vx!+N_Nv zLvxZ7jwL}jPY`)uFhNk9mO>I9rsRU8$P^A1Om(CKVFj4yL=rLTm_ETdSza=ph)EC{ zSn3a!Q^`2Z=Rt_79tR<+pamJGxx_Rl94eCx({zF)=JdCSPB~uC>>pW~62WFtVGGU9+FOeXOf zAo{y5+oob5fOCKh+mC=;7G#2OQKU2m-VQD-!#s%YKZ?e|=bmLwf;Pi%}1xX7Ov#h|9PH9Tz5?xZcKuj(OM|#OZmkSy%0C8PAYBn4J zxZ^ZsmxxfPigScH$4kU!=!3?ma1}nH3>O0Joj(?#kjs?p-$SfkM@Y522(*_mP85b2 z%Mq-jx`J-f?+rpNdYJc?AQb`!E597V7sj^&-vzi1vU8{q8hV5)FekaRG?xsq3&J@~ zh~q)DU_vT{Ex=R9rh`Ec0Fx;elMLAT9+C?x&?QY%l#n82%PuVf3xv^`dNnK4Ga^Bi zkPCtmEO9W@)u#mEQnCz78sjuwD)!_FNf3@X69WBj^plpeoWL?A{tp!_5vUY2p98dM zNmCipJQxC`go;@8Z;56E%aZS)n+y#`BnbfrO!xx}e$#`aGA z#RTI)f8okn%a_PM9Gwtpu4APIyh+hZ&f8z zI`148h~~hE3ZoL*Jv05AAX`@r!0R%b60V@LG(ih0lzdi*aiVlk^%sU&rbsr$@p(|K z6&?X#*-*4H)97FvaB@MFbpBq$d`UAZC+b5mL@%k3s!g0ERB2{7MR7_I=JQew2F&7^ zWmxSY4D+QlbX|(FBp~l4$H#oGrI?mGFfSBF zIiOVv!nNpNg+#2>WKt8BmAO=0a(wbajdwzFNpWhX9DF?^{DQ{hIF8k?H|(6`W_=EX z{-kDP!ML2D$K%IikfC-k6~*-i=*0;TR}JggeM;NzYkAP5^&}yqeG7 z;8aZ+{^G=}`a|?Xo-Pg3;y5M(xJl8rULMUj%hY>8(2En%fT#DYr%F26HOG<1wB&D^ z(T9&gFdU-eilI|HB`LIxlf=v;#EIF`1aT=O%U(husIE}QMbWtrQlNjZtC}Dwi6!Hv zg~0x{1spQolIGA@5G$8-btD)PN|jTrrDV)PH2}X~|DI*;`vf@M!tnbI8AAIT7v_p0U; zjg`F6YE>!7bJOrCQ-W#9N*-EVLRBlU9X6w*=YNP!%N!`Ji1{=vCE+;9XpRa_F9ga7 zQCdTYet7-z--hgT21=MHa15dsr)n&TM0<4B#KehawaNqHR4Exs5fOGOLpjC~{3{t! zT}G1atL?iWULk(~j*~>KP#G0U*6Wq)DX{jb9k{y)7xX*M%0j4BNkJHS&?0oUU}c&p z`3o4)T*>}l%RE*yNwc2@i7ZU5ccE8C6|+l)-sLN_o|}~ceuNbQO7>Jnm?&nPFrj2S z2qC3_I(}0{D~2b+mAD{$3SUzyq!MD6SjG$Z32=oqZu1e7NZ{D0Bk|zbDxkP(TFIA&PQlfq@6_c1I_9LU&aPnJ8 zgcP92DRw7HE^t=P7kc_@zJ_T4)1y`aRw~u>SrjNd)g(PpSaxW8M%&hFLbWygt;9>c zC9H1>ryS?;@1sWVp&0D%F2>Qp*U5PkORltXL8OG8pjIZIS{~BHVe2H^ zR!OssMIRoJ@ z%%IuLhO4h^EbUiOMRpT3}C2Yw`lrVIO^IC7bYGtl_ zECIb4Q^Z#LO$|S#xhjN{UrPZcGSx&*l+uRz@}6FONyaYp7BMb)x>RBUC^VCVqq`N! z??w)6Mx`03AwqFcs(r^evoA7|fxLNm^oqKkY7y70)T(p;@D(*P?t-OdMqVj3K^Vy= zkW?I-@Zx2#N;hWT{H}EgGd%uW!)m36_fq z8W9E&%pG|_$(1jQKqcmFy=&;NObUL3yy4OXuWcBwZiZ%0=Y@)5oi5zg@M zEQckEoQshnqL3pcb><~a$jC^5(0~jLNKkyEh0M~9ZIc<-tM7vm>a!EB?a`iB@(*2L zPGJrQB)@RPwT8~`et32K|DBxv@bt`TfjBM6x143xnpsKzZz)L=wIaGN)whX}PElNx zfoD!vWsPFGatqz29P*az+Ex-(TLY&ixi@EK!{|iFuWV{|Yo@5gd`_f=Xi60rL*gP5Misl+8jhqFi8EnM~uD6p|!HpbxdiSGA$G z|F&s^QmtuRwWxTh-Ky?ipH^iB-f#6}ZRhOPzYDsx?LluMZLGM!DTRH{iQ@-ke3b$n zMu(50G03}|ToPVG4_fMlT}tw~TzJ@NQFucrzQ!4O2^j2#thO)S6t-ZKZ=ee-*lB4o z{pfHJ*v%OfQNq+Jj5L>oU*KxOA;X$)Xhv8mz4x$O|H%EK!=c(c!Xhl05frc`JM`tb zktU{&F7>^X#i1`!5L&RDaXX{^54sbl1Sq055^lmPY1Z{t#0!#2s26RITO7Oh{8tmjkh_>enIad7*#1VK%ffD$=0Yk; zt3_RZeC2pd({Q17&Y;0pel<4hgpOxKF4Z!iG1LnB#Az4|;R{9+l$1J@h}bD~56vhS z(t0HQp|LYhTbfypE-3aQz9KVnkx}!WRNQ`5#qU=(eZ4B43f-z}x9Zw|gu3QfUCoT{Z7s5!mRL__1#6bq z+T!ZWpQ~5au64Dssx}l4&k9Xv2%{60AZwIG+CaY|unc9Tke=lz=wVWJp&bQ49u+L9 z%*EziFdPO2ODqz`Nzmn}=n}DBe+riPMeOJ6z;TF+0`tr)$=3x`kT_;palJ5?B9^H? z{gjpo?L@Y4gwtYyqk0oyV<*W8XET}-C0xV=-TmtBHZY8d+=DSecM}$$6K=m*c$T0Q zz$uZv;PEn-G$R$jz+Y&8(zaaV+Vg#Tx%OcuprWd<6Zs;7TK`NPpu_|dGT zQJwgK>_+`_R00#e2HfZX5DOO+ypi1PvjG`h!y4vQ$>V~aK|yE8vZ^i$kz~(vS@YEB zu)=y1+BHb#oCsl^#Ksm$^RBlbMXJ^m%nZwTVFaqP^x>jtFxtxC_CT~9R*oZ#faYa> zEWmX=K@T51xPN5d{U`{pUd=koyk_|+W6}XL^USckCXWv0In{h`Vu5Ose6v6CTD^&% z)0eo;leoc;xY>)?_90dtMB_gk4$*6tIHg3<8P**k=p1a+eW+6k!b5G1&sm~+t+f`M3`8=);n3G@2u+u zl%{Q#rJC|J(wM=(t3HhaY&rqG8lvjwAHh&tu8(s`ZC59Owbz4pD$x;}XYqn0rP6m^ z%yZ^mKYvf+5{5Fcw){|!P$duS2h@}b{s)9Udk{9E+kjguZ&U^)LSt9zt9pU)UAbHYYIL6@eIB_tv=ako#RTyGkXG@BwAe6 zLzG9t1bz!5gLWVwdg<>g`oKu59m8fk3YG-G(_6G_>b&&Z8KPq#ywcSjb(>YYQf=DXwwgQk7H?SX`7l_r$&q;PUhr2DzKD<=fVa`flvo9 zYB@_tzSKWBL0KtvNC$Zzr=_45BnmX(V_T_;09%i}2?bF-$X#6f=j_2VQ*2WQy!G9S z1lLie=VaM1sQ8;}Yx}z^f}vgQblVa7rizA9MNMDL(ku|m)1|hBfI+|+Ml}@ZH*-Q3 zH=}XysonJjRi9ipoFP)vQ=>>ZD$Wc}mpQ$p(^{ z{y-3B)fH6ER$UR~f^eehtFGc)RnOcs6*crVR$slnyKk9A%ac0O zSAO#iU0usw9#44!wl8Ph7-RXkT@!OvAg{_{HCZeP&V1%-f4x3l^Qdyo4CgI+z;!R{ zTxYuWScDY{hUvT)n)8k?FipXl7PC~VUaL<&4m}3C2f>}#RrkX7IPpSyP3RjdLBbm^ zK@?Q2DfK_Bg?rI?4jWJ%j;24uLYd*h{NybEl}+`J1e1*Af|#O}a-n})zn}iKV4VK0 z_&qIH0;j5Coaz{~&~AH){^c5gP=50#&8XyXA_9JAr36j>l1vwjo!9h3U83Se{ZnuH zVb4$PJC>Ng3c>{ylH^i{xy31_S@$RNmL-YP7^a{xxDWadd)Ul=FuzrK?-ZE%q=)dg zl1Z#znZPgeH+Xf-k4kT|FBr#jg|Q=jA$6f#g} zG&SZ2PUNJ9mMDvYajA_=wPOPi;eSsf>yEc+fUn?qo07x|#FCZVe5kJru-kw`J{`uF zj>fbRr)_HYaeUgY_R30#_F=~cJkt$D*r%=|S}?LS5tiaJ3Lb^_VVBolkmM!+=*0|? ztdPrldQr1PsRAR_fF;)FX3qqvvXRT)pwxS?DZ0ka$#ONu;1D)HmpDrUd%#TXy47lC zabHbDI8U-?PKWHnNfiHdiDa;{j^M;aZNV4LGGR0U%MlEMPowH&MxArOtLwu`aC9??I6RZs`K#>y~~es=X0(#ygeQIKu3z1jAufzX}{v)tjdUKH*t` zPkB<{)1DLfB&P)YGXjkh0`2nw_0s|MvjMG>0Xo{o>;ldoJ3lrkfFPl~({RT8Rd-L? z<9KjT4y>f#`Uj8{QFRc7$$nAs)IoG`6n(82ZcQOQ3601TB&`e)9S&|A8J;IL${g7+ zo6eLW)w#1eFtdR${(*$#S{y3AfK!RK+G}&Z_a1x#r?5NKXk&onvVc91EgN`&ZYy*X z2mgDfrtUa`|LUJk?6K&B`uo@3k>iSR7fNN1ajLDCPL;0d3LRR9t#-naV^^swO@cm= zU?hOvZ51rn(On9*S;n@AxtArkia)sBbp@6&yTFZ|t zuj<2oMF||OC$2d`277_z)I0q7wsr1>#*1p(Yq;J!^x~jQ(5Vp^5Z%JK`+b}zFLn68 zmdUP)&H^%N7xZ)}Jq#IskBmRvqlO*zf+Yb`WsY?bx3YlDILd{u~`pFO39nC{_W3e$)Yo)3UgSlzh*L z5Jt7f358z;XHz1s9wSn{w+)4^kc$|1FwlXd>b1rJlnWiy0-Lp(^KKXz5GSf= zr%F1*G%Y!Kv*1K5Sei`G{Xm}(`i_``>*~k%1bZ4&6@IC{1qkK_#pyGW;^i5MS)K@e zQc0(ba<2~5J5j><0Ix|Uilh!cbwwXQUte1CLuXZwES+4JK4A|YTtg2|>pY{n;70hb z(1#n&|Jaeu${vyyqt`#Yd43kj_ws6OY{>t7cyRx)k^l4I(fIyt{?D6uIwG>EKo|)M znw7N!z@94wPmD{d<+*8(PhKDs!Kvi7-8~9tVZc*xg)NA7p;&vc-l~cyc(ZU}9FV zhnIdTARE>vP?2H^0g!47TW}`Xw45o`m*`wrrq9Q4vI8wZOhy&F1iYDU(-yN_lv&ll zbmwtkT|6zmu_^TAb^m&nIl3iVUaz1_3>j6 zG&3%_0ao4C@sltm>`ESlF8P%6v6{q~mpVIA5TfU~&|%NUQen`;rCg9)n)Dvh&&ae# zqIm>I#TrQ&_I0;w#!;Qh%yW-Sf_LxU1su{(frHUcdxZuAWDjiD&Kl|I31;h1z_{;wq`Y*RTHv_a8lIuK$njk00Ky z|2Oe`_%QkkUC?X-mi8G*vTO(L-n#&m){9S~97lQ^g-R?Fl zx9aa2D>i3MW0f}txq6LnJxSN=RU=(57MTzfRZyQuaKp2=?qq_u`0uX*4gG2oy3xqM z{4wYSWF<9q-uLcM4Xtceo<=Y%Wo0U9SQYZ(=Bk;#Qp_mdx}y!kw|xE{ zJ;IHpI*8a{c-;}N^d{c(zSl%x9dIbE@dP`=V)jz$cGPWN8MwPHUyh2Wot^IGa}th2*^(n zAv#h4p%xwM-y;n`JHe~z54+&V%PpdsucaDMSa)EmD|+cc)Q4KOkhK-7#2xCrpT=Wz zwMH@x2cVT?V>75`rV9tFodRP8u$uhbIAmUGiH-sDzTOVk4GdTCE#nzhDogVkA@m|I zN-&h|!C~Bi79dW|GFKXTRR$>f;GBZZk01AYiMcjRJMM5w0PV$0?WmkMTX6{zYQ5P< zzD7lULwjmF`om0VpMwk+KkG==w~)GQrc{UzA3@57$P=PQi9mIQ3Q9RK8KIg2wP^s} zEQltSy=GuVoL6t^b?WT!B@zqVv2ge_w6_?cmhLtByO{i4{NwKx2Xt4gw^-$3M|*Bt zV1ZtE>Rh$J?>9h5Ja4}8`e6rPBeE8s&xEEo{2s2adf*u6FVQQ~b9$FgL%1P!d z_uccWGVHIOS{>zXbfR^&eAUwirt-~EVXJBWCmX@-1VY|< z_Q}RBb)4pM=aPCEF}QF*D^r@&KyuR9gw|TpMytU9b=Y@S7H=sfw&oU2xKKlP{yZq^ z62Wy-wA=o_*8iguF!_f!m%CgGyD|P_+_?Yy@Ziydqg(&aO+1Frah_C`$yy>Zdm?O) z{I;TmNmVw`+%nkL)`cqa)lVT7nCRDzL}GpfY(rA}C+%UvG;S?NsBJ;<>->RolTGKS zrS?21{49%^i>v}taP zR&$O?__pq2)S1-H3dOEr-2zHA>JNP}>xe-!~t&qhV}p8@bF=C{eN)((e3(w6HkW}hg0*$U0i!tzY7u+Wq+NA zGPsnGYy?)`D%Gf6_p9pPXojjS`=4wbp$sR ztuI$Q^~+nhM5&`~CqZbiuV0qbyNRv&x-$?XTALA_WVwUi=9M2Je%bI zxEcR9_W5f+YvsRp27G7Xzfu0*KRSBYlKn!NKT|CMDh(ku`l)e|=UR+4n@r_6xvu+Rd&@ z@awud=);gIb&+gM$=jCe4Wm*ER-c7r9eiK&Hy=WYVb-O_KlD`^z zy;FL<8;|Qe6i-u3vo}^Io3qHZo>-_8d#{h1TnN>feMg3W?3)BzjOucWH%oQ!W($(* zM2DfXp6I+P)|v=iI#r``CkhP&>@R7i}|g^MVopz|;g-0RjyS3<&1dL(zxk%^`0kqjwcMlF)mETv@S`$!h#tPb^Xu zY$O~B)-v|Pl|5|rvC7urO8D6^TAW;!??X_8yi6e;fvPkou3+5RxjTlHz(X*3f+XQN z=1cVT`0Fv+Tj9s>{0QS!5dhVpTd%RYL!#c?f!|y|A4cD{!=8Fa-keBoGeuDONs>=p(ENw`B zv1(E9O7vYGwCl-p-)(NOM*M4NzV!<8d1Gy@Ve?*ce9Y$pHNmt?tQVUGwrYJ%?>m{^ zFCU^XRBO(YgTqIV3-MrG=TvDm!JmBiP!|hLwEQC-RYLV9C>O5s#5Z76<^MpxGMb~o zy}`Eq?!1wp*}N{KZy*q%yCB0yrW?*`ygK-!g;iJD`W2{oip@IwIw4*W$qhtXhs`z7 z$tKucfq_lX+eW}u+^YRMUUJ~c6Vz<^!-_L~EhSe6yx++Iifg~4-XBO5DV1I5`M5k$ z+i-=i|8h?jDYS8Ce|r(t^h-4}QE!dR#v?{G8KE9B_>u^2(Mk#{F;|Hd{hTu$*@wS?6Rxs|J~Fg8bHy*|;Ycz(~?oYFvUQ~XU6 z#AXt$R)JSy(vt$)N|1F9q6RK5!>=wI`jM*PjHcv?P7~S=XC3u&a`eEO@oK8Jd3wM4 zxTafPDL?ONO}y0-qV77Wsw+bqQwY^ktJY_mSIAyg>D}{u&133kZe9_8+=cOqQN9k; zYw2w}Pt(>)thQ=xo(S%^TE_-k2e=pRW2@fA)4AsGO4n}F3%>0Zm5^W3uUHF2G}&r$NkgH*ZgR`FG;dsJn*H$-dUh3WCj7Kd zJHw<;a35&1WSs!DoRlkY>@*^p>X7!ny;80q7-}TGY?U|K?l1Sy9i8<}X}z7@GKfbW zxMoY95yn9CPDuCL2sgxts+$V{xh)2CV2CJ@zm;##;j zrf{vbRr_xr?1vAiEDFNckBBbai+G(GPFFEw~ zpbloWKxikKw$Iw>U$6EB&HqNn{&WIB;kW!G5}@a4n`;yYYZT};0%64nU86*3v~UHH z(15h7OlW}FStvB%Y^5etNq9SUs@1JKZku{AMjeT>>@Mo8;fD9OCJi5cM{_H|bhO^F zx7s{gsv5p+!^^iEnq2z&S?^72G_ldQwyOM2p0*H$AyAZrI@NcGlY|o?o~+EZy>ct9 zV3mcCoZ#$kC7;$-zQ>OrKdxKenl`p3;dOzLS59BuX@PXx zvsMpe%ly+e0Bx+&ip{7GVbju6uhC{SAFK0z}<9bZzrw1(EETvPg>VnlPo2?d7!|1dBwK8ah0rKDVs0P3ME9JvRp`xX>DCwS)^;q zuZFh`cAq2~LhRRpw(J02poG1pwVP;dl=_B82$+M7rQDrulLSUG%Q!%7^*us@7*e*RPM5|4`uHO5zf(#O843 z-G=GNUV#CWKp#Ke{mW&sT08%*ocUKjoAUoY95?g-jUPOCa6A8R;`wlW`G2e1gmeyI zEhXwnetkh=pwN8oR+zn67R0g8 z3(a@t*K_^jPhnG7yZ#r+^h$}p%(F@Vf7HzXfAH|=;8y>?k>^7z<<2uIcv+|=^P4i6 z6WQ7TX#TE}`ku7wd=VMGdS}gAa~Wg*>pDB~7qv#h;dh9xD`D>X`OgyTi@eGnV3Yno zK4{(ladiLI{&yo!hyD*ssvh;`9w2&(3p}MMT$m6YpS&R{a^D8*LpedP?WTFp%1`YpOi0*3J z#N8gaCka*U;`FC=Zj(M0S0dg>gl2J8FJGKIt-m;V@vM5m%lugUD2NflyiCai-F;OG zd8)p=X89>&@-9g0mozWm*UCYe<9rF<%c4+vZ7y*NY2HOQ$h-P2&gYf0a)`cVd`c6f zx}4ATJ>-l@G*^Hk7aW(-e1fX;6&Zd%K@T51xc?wPXeM-W`5SH2o~>3y`j)0dEQKVQ zCGVd?5xspr%d>v{7e(mZ0rH9be+P$;n*P6o@%aAj`hOG8XI}reyEEjIT^6DkecKB| z%2WpohUkte{RXb6wzuC;o;c%6oo4?mr^FPBzN4YF+?OXGoCjg7Bv-D=;T$ z@PFtaI(QI`!||XC6S(!*UTGpG=;yn7lXB%;a;=n=j?rM*i=52h=9{fAFB`|2e#W>;Ju( z=PxDyKlPnayDS4&zc=a%tyfn%!M%mumpWa;wNBS^vD2;8{u4fH<-Zp`dX)>HHp&0{ z2W|iVt^NOIo}N+6*M6hZ+Cb&cZu-B`*n@hIQFTslg8uj)09{*2tXarv)5lVBIxQvf z4!>N9e%7Z^8*uyDwmPww6o~57QaP=@Zf&03CMNuLS8#pLdij3^qmTEjm;VR%kB(aY z--idc{+}CpJpJE~@bd3~mAoYTXwT20*mYs)J~$$)yg++4US+RuR_uMW2icPcgMC2e zPO~}x_E|7p@9*0H_1>F`4=$nRX7E)Mo4eq(e!W%m`qz&8t#(fP1m z!qJqj&g7+_F4TrECS1}Pjg_>Z^Blsfek+NPsuR_TQJ3MrWoW8FFrzehTQf7k)@F4> zm9^>Tf#ROQJv6w)GF}Yc+T#hDFDs<2Lfae3PK+Fs9WdZ5|CLR9w?8$|+DI5c+oO3yTCfCi)5ka^y#H{SDm0&Wp|=YB_K2F$&i>SEg&%j}=b&zn(6vnP-6l6& z@X%ibGsY8|`wL|kDjMhx$k2>R?b5!=?DD{Dk3&|fjaWXvB+~_B=UR4`=E!$%R!%Z1 zl!n2{oWi|?>j(xe`E|{1--}9Zx(XpHC_7-_9SEV@LNul z-uSIlW;^wPb~{%>_LF0|1A3nhuN@J}S#rf0sQ_%>ZlU%&LXuqSn6Eg+G`kWa-4L&i z*|j3I3qCAKTrBMrVrhG$q`kQoAs<)@q4$$lGIffm51%4)u0J!#nf@1U!}!$BV6u0)5Eb0^S=xowM@J=1j-! zz3+nL(#WE<$Vqlia!xKNxvb%(O|XNvU7$CsG{9XtL;ypk>vb)(Q?%Xbkrb$N{?RIY zY%Ol}^g#)M>|&c)$HTLRCMbK5zvQ$`oAK)#N_jo^2mY^glz*pZqyJ~upfB&)~xKYB23<$t?BzLozs@-&YHa+VRfAf?6HKwG9zKh8YLZ0jR^87QCHDG5+TTEmFC^l4z5Z_&z$=CT zZ_xkmKWyfIJ$Q6~{P0%)zlmo>W>*;ZFGN}IRDV0Air%SM)yR_(l$pJ7Jq2t>&AaV< za2=Wd^t5Uz>YY-%tMsZ&cXe%Dr?MS%Xte4J`uK6sKImdg(BfH%(=&bc3jQ02Gr8Oo~e<0k4rDksdf!sJ8|JQnH~L8L3^!u`5Ivd zuUP_DH$q5z&Lr9+Ss|CL(zz+OzmMDv8TMT#UiM>0&ym?LZGCZ|cA{*|N*Q+EGu4Zx z+g)q5vK!lg`FsP_f#vJfqgMAkbUObWD@lMbQ0#o87&x-K5iM%pqiWfjPLSYW!+~%oKfIv)ntp(a~>L zwpF!@w0`M9JvoMGCp+COv*^)H>6U%;KdkNWpX~haQTzUnhYxPg|K7;cEeVY0#X11j zTmew?@2J@bH$v9mzhUPj?^=^=GwbT1YdBA}Yo6{k84<3S4`DUQw@o3qruxb>d>>j@ z@HL?9awA{YU3{Ac=sIrU+kpE1ima)(PC$72$baMI`9$*n;ONm|EC0iz!(0E~jXbL@ zY*~93(8u*xUm1)p{DoK&);Vh|xo*hg=bHO;&c0vS6uJQPwp*-0ce3kFm!HMa0_xu@ zy$AFO=)Y+jxX~X-a++wWODAp9hXTcB0D4fhJ0x$e%olezVKMix>Q zzR}QA(mHymN=MXs9@iA4H76&6E4J6WIJ=vuj4fL<)@=^$(X+ZkbKOX{-KUU~rjHAC zO^dyH+u8QcU3Om7bwaASaf( zJ9pHNRajTH8PcGhc38ueP-(lK*VI_y00;5g?F8@PUfqCBufb_m+wZ!6d}ku@e&lKS z+;u{%E0Tn7OAP+0$Y4D1YbBla(OdDl&b{9Syr)3*o7uTPl`nstrdbai00%@pd|=xF ztswU5tSf%KgE=Lb6Al)%Z)v)ARGUQ|AsQcgjdK%NFB+`CpriAk@ogLe51zIHZHD$CR$c;U6+)w6_8)&|T>GSIVXKuJ(+r))eUr*zccV9}A6gtf zt%}%c<;Ju`+wu)5ie1g!q^@Y&|8uB|7Mnkh#<&`z&#W|B#6Fka*wy}LQynY8_-VAq z2K*aRAZ@ERuS2$5{!D75MdUMRlB=4&X=Snlk3XY6d6lT-_5MF8T#mtT_hi7E;y=c% z`#%ouAKm)@ZshsUzW<{$rpkWw&xJR`LV6z8?r;Xy811j;88nG;{X7^DF*z7)$kqgJ z=0vuu;sO%OUj5Fbera$VB0ANg(0@S6jW6l6!|l_2wv+$6B?H+c{|_D=HSd3V_~`ch z$BjInLH>88>-aL3fh*+rxDFEB-UfC1Z2PR0{}+Ty8aHxtZ@&lFbpCJLy#M3y@bKvN z{?{9MJo&%rc0VtbdnMNg`_&HGvdalejw^OCD@g0=zfN#wnfR#-(iag#=x5TXg)emz zkCT{X8OamE-9hi_O=lq5x(GD86)?x`pnA-5iD^#wiOIa}vh&#wuY1wDb)8esF1j48 ziA^x*nMpf7_BWKYj6N;*+a`=m^mzw5`b*7_wJosSkjwD<<1}TL#H(1n^NG_uDXOqss-!(X^zgl7*=l8&~Dd`141(pl%JFhoyTma!cD^z;lRl#3vmQ#peFYxIL?`a2)N|Lu##e5C$oe~OEI zQ~{de_`EF8jHW~cUq#}w2)>G@_&oS3l35Xa_5TM$^b_Wkl>)tZ_FM!}!I|1<2N6vO z9_ezN{rXpwk{$E^^!f3#SI?s?xvn-g%>M_6N6q;sX%f;(9a!(@toxH?cPGlLQF=ZIhBiY3Wvd}V?v{Lz5OT%hC}onk?52ZOi;=A z61~W0EcoC53PU8xdzsQ)h6xo)7eitAf5E$V?_!nzoBP~q14dhV0{xPTP`(5VUJ=Z;frHPY_ zT@Zm(A;qx&bS$WvE?7=-DG(Nd#S}}s_^6V=0AL46ND39yTTbBGv#8c}hsVawyOMpn zU(7j%1$R~Vp#ZtYVfVpq?u#zBxhF&Piq1LQ3xQ^wWk^WH-CZ~-2y3N85d52!D8{+# zJ@`%v6#4twmaOE6nC#Ye z;9U}N7>(~CL5P;G@dD>_lCt^s z0(CS^*>q&^4iBU8=;`;zufKc#@`vxDEYYKu;a}C*Ep*})mP4bsaQEeef+mXD-zd7g5WFkjI*L3iB%1uG2pI?L$s&=xQ`e|YQxJBOw`{>%1N>x ze1*KLJckRmW+(AW1_C#XP z-t~-l*MRpfLf?}B24(Yv~r>>aQ#d5^OqCHs14FnZ@* zcJL1Adt`v);|0QIq?R~Kw{?m7cSyG_-0cAgIl+kyInkja)#WQ_FhFkug#4%v^s~Ff zse?HNy0{Ai(YD_?k(z5@+BAmQl16k2sVT>K{QIa;XCyfxqYSIAj%@vrMKZ)vayl&~ o5k^p{38|-pi2jQEs@v!GxqWV*Kl}6l0ssL2|2EwdApm{>03v%KLI3~& diff --git a/charts/langsmith-observability/charts/loki-6.30.1.tgz b/charts/langsmith-observability/charts/loki-6.30.1.tgz deleted file mode 100644 index 9b51bbf501e1ab1d62e73791ad32e80d37f7aff9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153235 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 BEx7;y diff --git a/charts/langsmith-observability/charts/prometheus-nginx-exporter-1.6.0.tgz b/charts/langsmith-observability/charts/prometheus-nginx-exporter-1.6.0.tgz deleted file mode 100644 index d1b4095be5cef2e8e2e393a6e2fa7fdbd1289724..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58441 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

4za-81 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 S>;DG;0RR6=?q8b#egy!UV%`G) diff --git a/charts/langsmith-observability/charts/prometheus-postgres-exporter-6.10.2.tgz b/charts/langsmith-observability/charts/prometheus-postgres-exporter-6.10.2.tgz deleted file mode 100644 index 58358c4922c69322186246e9960934cdc5fbf3e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9687 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 Zd>)_2=g;^2{{R30|No5=Lu>%Z004Cq{`&v` diff --git a/charts/langsmith-observability/charts/prometheus-redis-exporter-6.11.0.tgz b/charts/langsmith-observability/charts/prometheus-redis-exporter-6.11.0.tgz deleted file mode 100644 index fbeb406b4b2a833f692257285bbdb6dbc1bbf95f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8913 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 From aba2bec16680dde5b51d80ad27b7650d7614c521 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Wed, 25 Jun 2025 09:45:26 -0700 Subject: [PATCH 23/27] review comments --- charts/langsmith-observability/Chart.lock | 4 +- charts/langsmith-observability/Chart.yaml | 16 +- charts/langsmith-observability/README.md | 232 ++++++++++-------- .../langsmith-observability/README.md.gotmpl | 28 +-- .../examples/e2e-stack.yaml | 8 +- .../examples/metric-exporters-only.yaml | 8 +- .../templates/otel/rbac-gateway.yaml | 4 +- charts/langsmith-observability/values.yaml | 39 ++- charts/langsmith/README.md | 5 +- charts/langsmith/templates/_helpers.tpl | 9 - .../templates/ace-backend/deployment.yaml | 2 +- .../templates/backend/deployment.yaml | 2 +- .../templates/clickhouse/config-map.yaml | 2 - .../templates/clickhouse/service.yaml | 2 - .../templates/clickhouse/stateful-set.yaml | 8 +- .../templates/frontend/config-map.yaml | 12 - .../templates/frontend/deployment.yaml | 2 +- .../templates/host-backend/deployment.yaml | 1 + .../templates/listener/deployment.yaml | 1 + .../templates/operator/deployment.yaml | 1 + .../platform-backend/deployment.yaml | 2 +- .../templates/playground/deployment.yaml | 2 +- .../templates/postgres/stateful-set.yaml | 6 +- .../langsmith/templates/queue/deployment.yaml | 2 +- .../templates/redis/stateful-set.yaml | 6 +- charts/langsmith/values.yaml | 7 +- 26 files changed, 201 insertions(+), 210 deletions(-) diff --git a/charts/langsmith-observability/Chart.lock b/charts/langsmith-observability/Chart.lock index dbfd1918..327c7784 100644 --- a/charts/langsmith-observability/Chart.lock +++ b/charts/langsmith-observability/Chart.lock @@ -20,5 +20,5 @@ dependencies: - name: tempo repository: https://grafana.github.io/helm-charts version: 1.23.1 -digest: sha256:10b4bdc443fac82ae4b344eecd575f6fe2c4d3121117d3f51bfe64c01fb14c7e -generated: "2025-06-24T19:14:49.166045-07:00" +digest: sha256:f8ee0500201c5091c9ece75f97ee1513235bcb77d763f2e2f995cfad5e45ebad +generated: "2025-06-24T22:03:39.181255-07:00" diff --git a/charts/langsmith-observability/Chart.yaml b/charts/langsmith-observability/Chart.yaml index dde69f4c..ae11f47f 100644 --- a/charts/langsmith-observability/Chart.yaml +++ b/charts/langsmith-observability/Chart.yaml @@ -12,23 +12,23 @@ dependencies: - name: prometheus-postgres-exporter version: 6.10.2 repository: https://prometheus-community.github.io/helm-charts - condition: postgresexporter.enabled - alias: postgresexporter + condition: postgres-exporter.enabled + alias: postgres-exporter - name: prometheus-redis-exporter version: 6.11.0 repository: https://prometheus-community.github.io/helm-charts - condition: redisexporter.enabled - alias: redisexporter + condition: redis-exporter.enabled + alias: redis-exporter - name: prometheus-nginx-exporter version: 1.6.0 repository: https://prometheus-community.github.io/helm-charts - condition: nginxexporter.enabled - alias: nginxexporter + condition: nginx-exporter.enabled + alias: nginx-exporter - name: kube-state-metrics version: 5.37.0 repository: https://prometheus-community.github.io/helm-charts - condition: kubestatemetrics.enabled - alias: kubestatemetrics + condition: kube-state-metrics.enabled + alias: kube-state-metrics # LGTM Stack - name: grafana version: 9.2.6 diff --git a/charts/langsmith-observability/README.md b/charts/langsmith-observability/README.md index 7b0e3d7f..e2055e48 100644 --- a/charts/langsmith-observability/README.md +++ b/charts/langsmith-observability/README.md @@ -8,15 +8,13 @@ Helm chart to deploy the observability stack for LangSmith. | Repository | Name | Version | |------------|------|---------| -| https://charts.bitnami.com/bitnami | minio | 16.0.10 | | https://grafana.github.io/helm-charts | grafana | 9.2.6 | | https://grafana.github.io/helm-charts | loki | 6.30.1 | -| https://grafana.github.io/helm-charts | mimir(mimir-distributed) | 5.7.0 | -| https://grafana.github.io/helm-charts | tempo(tempo-distributed) | 1.41.1 | -| https://prometheus-community.github.io/helm-charts | kubestatemetrics(kube-state-metrics) | 5.37.0 | -| https://prometheus-community.github.io/helm-charts | nginxexporter(prometheus-nginx-exporter) | 1.6.0 | -| https://prometheus-community.github.io/helm-charts | postgresexporter(prometheus-postgres-exporter) | 6.10.2 | -| https://prometheus-community.github.io/helm-charts | redisexporter(prometheus-redis-exporter) | 6.11.0 | +| https://grafana.github.io/helm-charts | tempo(tempo) | 1.23.1 | +| https://prometheus-community.github.io/helm-charts | kube-state-metrics(kube-state-metrics) | 5.37.0 | +| https://prometheus-community.github.io/helm-charts | nginx-exporter(prometheus-nginx-exporter) | 1.6.0 | +| https://prometheus-community.github.io/helm-charts | postgres-exporter(prometheus-postgres-exporter) | 6.10.2 | +| https://prometheus-community.github.io/helm-charts | redis-exporter(prometheus-redis-exporter) | 6.11.0 | ## Documentation For information on how to use this chart and how to deploy the full LangSmith Observability stack, please refer to the [documentation](https://docs.smith.langchain.com/self_hosting/observability). @@ -30,6 +28,7 @@ values are listed in the `values.yaml` and this `README`. Refer to the `values.y |-----|------|---------|-------------| | langSmithReleaseName | string | `"langsmith"` | | | langsmithNamespace | string | `"langsmith"` | | +| nameOverride | string | `""` | | ## Grafana @@ -51,12 +50,12 @@ Values for Grafana: `https://github.com/grafana/helm-charts/blob/main/charts/gra | grafana.datasources."datasources.yaml".datasources[0].name | string | `"Loki"` | | | grafana.datasources."datasources.yaml".datasources[0].type | string | `"loki"` | | | grafana.datasources."datasources.yaml".datasources[0].uid | string | `"loki"` | | -| grafana.datasources."datasources.yaml".datasources[0].url | string | `"http://{{ .Release.Name }}-loki-gateway"` | | +| grafana.datasources."datasources.yaml".datasources[0].url | string | `"http://{{ .Release.Name }}-loki-gateway:80"` | | | grafana.datasources."datasources.yaml".datasources[1].isDefault | bool | `true` | | | grafana.datasources."datasources.yaml".datasources[1].name | string | `"Mimir"` | | | grafana.datasources."datasources.yaml".datasources[1].type | string | `"prometheus"` | | | grafana.datasources."datasources.yaml".datasources[1].uid | string | `"prom"` | | -| grafana.datasources."datasources.yaml".datasources[1].url | string | `"http://{{ .Release.Name }}-mimir-nginx/prometheus"` | | +| grafana.datasources."datasources.yaml".datasources[1].url | string | `"http://{{ .Release.Name }}-mimir:9009/prometheus"` | | | grafana.datasources."datasources.yaml".datasources[2].isDefault | bool | `false` | | | grafana.datasources."datasources.yaml".datasources[2].jsonData.lokiSearch.datasourceUid | string | `"loki"` | | | grafana.datasources."datasources.yaml".datasources[2].jsonData.serviceMap.datasourceUid | string | `"prom"` | | @@ -65,7 +64,7 @@ Values for Grafana: `https://github.com/grafana/helm-charts/blob/main/charts/gra | grafana.datasources."datasources.yaml".datasources[2].name | string | `"Tempo"` | | | grafana.datasources."datasources.yaml".datasources[2].type | string | `"tempo"` | | | grafana.datasources."datasources.yaml".datasources[2].uid | string | `"tempo"` | | -| grafana.datasources."datasources.yaml".datasources[2].url | string | `"http://{{ .Release.Name }}-tempo-query-frontend-discovery:3200"` | | +| grafana.datasources."datasources.yaml".datasources[2].url | string | `"http://{{ .Release.Name }}-tempo:3200"` | | | grafana.enabled | bool | `false` | | ## Kube State Metrics @@ -74,98 +73,92 @@ Values for Kube State Metrics: `https://github.com/prometheus-community/helm-cha | Key | Type | Default | Description | |-----|------|---------|-------------| -| kubestatemetrics.enabled | bool | `false` | | -| kubestatemetrics.namespaces | string | `"romain"` | | -| kubestatemetrics.resources.limits.cpu | string | `"250m"` | | -| kubestatemetrics.resources.limits.memory | string | `"500Mi"` | | -| kubestatemetrics.resources.requests.cpu | string | `"100m"` | | -| kubestatemetrics.resources.requests.memory | string | `"250Mi"` | | -| kubestatemetrics.service.port | int | `8080` | | -| kubestatemetrics.service.type | string | `"ClusterIP"` | | +| kube-state-metrics.enabled | bool | `false` | | +| kube-state-metrics.namespaces | string | `"romain"` | | +| kube-state-metrics.resources.limits.cpu | string | `"250m"` | | +| kube-state-metrics.resources.limits.memory | string | `"500Mi"` | | +| kube-state-metrics.resources.requests.cpu | string | `"100m"` | | +| kube-state-metrics.resources.requests.memory | string | `"250Mi"` | | +| kube-state-metrics.service.port | int | `8080` | | +| kube-state-metrics.service.type | string | `"ClusterIP"` | | ## Loki -Values for Loki: `https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml` +Values for Loki Single Binary: `https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml#L1364` | Key | Type | Default | Description | |-----|------|---------|-------------| | loki.backend.replicas | int | `0` | | -| loki.bloomBuilder.replicas | int | `0` | | +| loki.bloomCompactor.replicas | int | `0` | | | loki.bloomGateway.replicas | int | `0` | | -| loki.bloomPlanner.replicas | int | `0` | | -| loki.compactor.replicas | int | `1` | | -| loki.deploymentMode | string | `"Distributed"` | | -| loki.distributor.maxUnavailable | int | `2` | | -| loki.distributor.replicas | int | `3` | | +| loki.compactor.replicas | int | `0` | | +| loki.deploymentMode | string | `"SingleBinary"` | | +| loki.distributor.replicas | int | `0` | | | loki.enabled | bool | `false` | | -| loki.indexGateway.maxUnavailable | int | `1` | | -| loki.indexGateway.replicas | int | `2` | | -| loki.ingester.replicas | int | `3` | | +| loki.indexGateway.replicas | int | `0` | | +| loki.ingester.replicas | int | `0` | | | loki.loki.auth_enabled | bool | `false` | | -| loki.loki.ingester.chunk_encoding | string | `"snappy"` | | -| loki.loki.querier.max_concurrent | int | `4` | | +| loki.loki.commonConfig.replication_factor | int | `1` | | +| loki.loki.limits_config.allow_structured_metadata | bool | `true` | | +| loki.loki.limits_config.volume_enabled | bool | `true` | | +| loki.loki.pattern_ingester.enabled | bool | `true` | | +| loki.loki.ruler.enable_api | bool | `true` | | | loki.loki.schemaConfig.configs[0].from | string | `"2024-04-01"` | | | loki.loki.schemaConfig.configs[0].index.period | string | `"24h"` | | | loki.loki.schemaConfig.configs[0].index.prefix | string | `"loki_index_"` | | -| loki.loki.schemaConfig.configs[0].object_store | string | `"s3"` | | +| loki.loki.schemaConfig.configs[0].object_store | string | `"filesystem"` | | | loki.loki.schemaConfig.configs[0].schema | string | `"v13"` | | | loki.loki.schemaConfig.configs[0].store | string | `"tsdb"` | | -| loki.loki.storage.bucketNames.chunks | string | `"langsmith-lgtm-stack"` | | -| loki.loki.storage.bucketNames.ruler | string | `"langsmith-lgtm-stack"` | | -| loki.loki.storage.s3.accessKeyId | string | `"admin"` | | -| loki.loki.storage.s3.endpoint | string | `"{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000"` | | -| loki.loki.storage.s3.insecure | bool | `true` | | -| loki.loki.storage.s3.s3ForcePathStyle | bool | `true` | | -| loki.loki.storage.s3.secretAccessKey | string | `"admin_password"` | | -| loki.loki.storage.type | string | `"s3"` | | -| loki.loki.storage_config.aws.bucketnames | string | `"langsmith-lgtm-stack"` | | -| loki.loki.storage_config.aws.region | string | `"us-west-2"` | | -| loki.loki.storage_config.aws.s3forcepathstyle | bool | `true` | | -| loki.loki.storage_config.object_prefix | string | `"loki"` | | +| loki.loki.storage.filesystem.admin_api_directory | string | `"/var/loki/admin"` | | +| loki.loki.storage.filesystem.chunks_directory | string | `"/var/loki/chunks"` | | +| loki.loki.storage.filesystem.rules_directory | string | `"/var/loki/rules"` | | +| loki.loki.storage.type | string | `"filesystem"` | | | loki.lokiCanary.enabled | bool | `false` | | -| loki.querier.maxUnavailable | int | `2` | | -| loki.querier.replicas | int | `3` | | -| loki.queryFrontend.maxUnavailable | int | `1` | | -| loki.queryFrontend.replicas | int | `2` | | -| loki.queryScheduler.replicas | int | `2` | | +| loki.minio.enabled | bool | `false` | | +| loki.querier.replicas | int | `0` | | +| loki.queryFrontend.replicas | int | `0` | | +| loki.queryScheduler.replicas | int | `0` | | | loki.read.replicas | int | `0` | | -| loki.singleBinary.replicas | int | `0` | | +| loki.singleBinary.persistence.enabled | bool | `true` | | +| loki.singleBinary.persistence.size | string | `"10Gi"` | | +| loki.singleBinary.persistence.storageClass | string | `nil` | | +| loki.singleBinary.replicas | int | `1` | | | loki.test.enabled | bool | `false` | | | loki.write.replicas | int | `0` | | ## Mimir -Values for Mimir: `https://github.com/grafana/helm-charts/blob/main/charts/mimir/values.yaml` - | Key | Type | Default | Description | |-----|------|---------|-------------| | mimir.enabled | bool | `false` | | -| mimir.mimir.structuredConfig.alertmanager_storage.storage_prefix | string | `"mimirAlertmanager"` | | -| mimir.mimir.structuredConfig.blocks_storage.storage_prefix | string | `"mimirBlocks"` | | -| mimir.mimir.structuredConfig.common.storage.backend | string | `"s3"` | | -| mimir.mimir.structuredConfig.common.storage.s3.access_key_id | string | `"admin"` | | -| mimir.mimir.structuredConfig.common.storage.s3.bucket_name | string | `"langsmith-lgtm-stack"` | | -| mimir.mimir.structuredConfig.common.storage.s3.endpoint | string | `"{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000"` | | -| mimir.mimir.structuredConfig.common.storage.s3.insecure | bool | `true` | | -| mimir.mimir.structuredConfig.common.storage.s3.secret_access_key | string | `"admin_password"` | | -| mimir.mimir.structuredConfig.ruler_storage.storage_prefix | string | `"mimirRuler"` | | -| mimir.minio.enabled | bool | `false` | | - -## Minio - -Values for Minio: `https://github.com/bitnami/charts/blob/main/bitnami/minio/values.yaml` - -| Key | Type | Default | Description | -|-----|------|---------|-------------| -| minio.auth.rootPassword | string | `"admin_password"` | | -| minio.auth.rootUser | string | `"admin"` | | -| minio.defaultBuckets | string | `"langsmith-lgtm-stack"` | | -| minio.enabled | bool | `false` | | -| minio.mode | string | `"standalone"` | | -| minio.persistence.enabled | bool | `true` | | -| minio.persistence.size | string | `"10Gi"` | | -| minio.readinessProbe.enabled | bool | `false` | | -| minio.replicas | int | `1` | | +| mimir.extraEnv | list | `[]` | | +| mimir.image.pullPolicy | string | `"IfNotPresent"` | | +| mimir.image.registry | string | `"docker.io"` | | +| mimir.image.repository | string | `"grafana/mimir"` | | +| mimir.image.tag | string | `nil` | | +| mimir.livenessProbe.failureThreshold | int | `3` | | +| mimir.livenessProbe.httpGet.path | string | `"/ready"` | | +| mimir.livenessProbe.httpGet.port | string | `"http"` | | +| mimir.livenessProbe.initialDelaySeconds | int | `20` | | +| mimir.livenessProbe.periodSeconds | int | `10` | | +| mimir.livenessProbe.timeoutSeconds | int | `5` | | +| mimir.persistence.accessModes[0] | string | `"ReadWriteOnce"` | | +| mimir.persistence.annotations | object | `{}` | | +| mimir.persistence.enabled | bool | `true` | | +| mimir.persistence.selector | object | `{}` | | +| mimir.persistence.size | string | `"10Gi"` | | +| mimir.persistence.storageClass | string | `nil` | | +| mimir.readinessProbe.failureThreshold | int | `3` | | +| mimir.readinessProbe.httpGet.path | string | `"/ready"` | | +| mimir.readinessProbe.httpGet.port | string | `"http"` | | +| mimir.readinessProbe.initialDelaySeconds | int | `20` | | +| mimir.readinessProbe.periodSeconds | int | `10` | | +| mimir.readinessProbe.timeoutSeconds | int | `5` | | +| mimir.replicas | int | `1` | | +| mimir.service.port | int | `9009` | | +| mimir.service.targetPort | string | `"http"` | | +| mimir.service.type | string | `"ClusterIP"` | | +| mimir.updateStrategy.type | string | `"RollingUpdate"` | | ## Nginx Exporter @@ -173,15 +166,24 @@ Values for Nginx Exporter: `https://github.com/prometheus-community/helm-charts/ | Key | Type | Default | Description | |-----|------|---------|-------------| -| nginxexporter.enabled | bool | `false` | | -| nginxexporter.nginxServer | string | `"http://langsmith-frontend.romain.svc.cluster.local:80/nginx_status"` | | -| nginxexporter.service.port | int | `9113` | | -| nginxexporter.service.type | string | `"ClusterIP"` | | +| nginx-exporter.additionalAnnotations | object | `{}` | | +| nginx-exporter.additionalLabels | object | `{}` | | +| nginx-exporter.affinity | object | `{}` | | +| nginx-exporter.enabled | bool | `false` | | +| nginx-exporter.extraContainers | list | `[]` | | +| nginx-exporter.extraEnv | list | `[]` | | +| nginx-exporter.extraVolumeMounts | list | `[]` | | +| nginx-exporter.extraVolumes | list | `[]` | | +| nginx-exporter.initContainers | list | `[]` | | +| nginx-exporter.nginxServer | string | `"http://langsmith-frontend.romain.svc.cluster.local:80/nginx_status"` | | +| nginx-exporter.nodeSelector | object | `{}` | | +| nginx-exporter.podAnnotations | object | `{}` | | +| nginx-exporter.service.port | int | `9113` | | +| nginx-exporter.service.type | string | `"ClusterIP"` | | +| nginx-exporter.tolerations | list | `[]` | | ## OTEL Collector -Values for OTEL Collector: `https://github.com/open-telemetry/opentelemetry-helm-charts/blob/main/charts/opentelemetry-collector-contrib/values.yaml` - | Key | Type | Default | Description | |-----|------|---------|-------------| | otelCollector.image.repository | string | `"otel/opentelemetry-collector-contrib"` | | @@ -205,15 +207,25 @@ Values for Postgres Exporter: `https://github.com/prometheus-community/helm-char | Key | Type | Default | Description | |-----|------|---------|-------------| -| postgresexporter.config.datasource.database | string | `"postgres"` | | -| postgresexporter.config.datasource.host | string | `"langsmith-postgres.romain.svc.cluster.local"` | | -| postgresexporter.config.datasource.password | string | `"postgres"` | | -| postgresexporter.config.datasource.port | string | `"5432"` | | -| postgresexporter.config.datasource.user | string | `"postgres"` | | -| postgresexporter.enabled | bool | `false` | | -| postgresexporter.service.port | int | `80` | | -| postgresexporter.service.targetPort | int | `9187` | | -| postgresexporter.service.type | string | `"ClusterIP"` | | +| postgres-exporter.affinity | object | `{}` | | +| postgres-exporter.annotations | object | `{}` | | +| postgres-exporter.config.datasource.database | string | `"postgres"` | | +| postgres-exporter.config.datasource.host | string | `"langsmith-postgres.romain.svc.cluster.local"` | | +| postgres-exporter.config.datasource.password | string | `"postgres"` | | +| postgres-exporter.config.datasource.port | string | `"5432"` | | +| postgres-exporter.config.datasource.user | string | `"postgres"` | | +| postgres-exporter.enabled | bool | `false` | | +| postgres-exporter.extraContainers | list | `[]` | | +| postgres-exporter.extraEnv | list | `[]` | | +| postgres-exporter.extraVolumeMounts | list | `[]` | | +| postgres-exporter.extraVolumes | list | `[]` | | +| postgres-exporter.initContainers | list | `[]` | | +| postgres-exporter.nodeSelector | object | `{}` | | +| postgres-exporter.podLabels | object | `{}` | | +| postgres-exporter.service.port | int | `80` | | +| postgres-exporter.service.targetPort | int | `9187` | | +| postgres-exporter.service.type | string | `"ClusterIP"` | | +| postgres-exporter.tolerations | list | `[]` | | ## Redis Exporter @@ -221,25 +233,31 @@ Values for Redis Exporter: `https://github.com/prometheus-community/helm-charts/ | Key | Type | Default | Description | |-----|------|---------|-------------| -| redisexporter.enabled | bool | `false` | | -| redisexporter.redisAddress | string | `"langsmith-redis.romain.svc.cluster.local:6379"` | | -| redisexporter.service.port | int | `9121` | | -| redisexporter.service.portName | string | `"http"` | | -| redisexporter.service.type | string | `"ClusterIP"` | | +| redis-exporter.affinity | object | `{}` | | +| redis-exporter.annotations | object | `{}` | | +| redis-exporter.enabled | bool | `false` | | +| redis-exporter.extraArgs | object | `{}` | | +| redis-exporter.labels | object | `{}` | | +| redis-exporter.nodeSelector | object | `{}` | | +| redis-exporter.redisAddress | string | `"langsmith-redis.romain.svc.cluster.local:6379"` | | +| redis-exporter.service.port | int | `9121` | | +| redis-exporter.service.portName | string | `"http"` | | +| redis-exporter.service.type | string | `"ClusterIP"` | | +| redis-exporter.tolerations | list | `[]` | | ## Tempo -Values for Tempo: `https://github.com/grafana/helm-charts/blob/main/charts/tempo-distributed/values.yaml` +Values for Tempo: `https://github.com/grafana/helm-charts/blob/main/charts/tempo/values.yaml` | Key | Type | Default | Description | |-----|------|---------|-------------| | tempo.enabled | bool | `false` | | -| tempo.storage.trace.backend | string | `"s3"` | | -| tempo.storage.trace.s3.access_key | string | `"admin"` | | -| tempo.storage.trace.s3.bucket | string | `"langsmith-lgtm-stack"` | | -| tempo.storage.trace.s3.endpoint | string | `"{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000"` | | -| tempo.storage.trace.s3.insecure | bool | `true` | | -| tempo.storage.trace.s3.prefix | string | `"tempo"` | | -| tempo.storage.trace.s3.secret_key | string | `"admin_password"` | | -| tempo.traces.otlp.grpc.enabled | bool | `true` | | -| tempo.traces.otlp.http.enabled | bool | `true` | | +| tempo.persistence.accessModes[0] | string | `"ReadWriteOnce"` | | +| tempo.persistence.enabled | bool | `true` | | +| tempo.persistence.size | string | `"10Gi"` | | +| tempo.persistence.storageClassName | string | `""` | | +| tempo.tempo.metricsGenerator.enabled | bool | `true` | | +| tempo.tempo.overrides.defaults.metrics_generator.processors[0] | string | `"service-graphs"` | | +| tempo.tempo.overrides.defaults.metrics_generator.processors[1] | string | `"span-metrics"` | | +| tempo.tempo.overrides.defaults.metrics_generator.processors[2] | string | `"local-blocks"` | | +| tempo.tempo.reportingEnabled | bool | `false` | | diff --git a/charts/langsmith-observability/README.md.gotmpl b/charts/langsmith-observability/README.md.gotmpl index 14f9c176..12bb4e4f 100644 --- a/charts/langsmith-observability/README.md.gotmpl +++ b/charts/langsmith-observability/README.md.gotmpl @@ -17,7 +17,7 @@ values are listed in the `values.yaml` and this `README`. Refer to the `values.y | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} - {{- if not (or (hasPrefix "grafana" .Key) (hasPrefix "kubestatemetrics" .Key) (hasPrefix "loki" .Key) (hasPrefix "mimir" .Key) (hasPrefix "minio" .Key) (hasPrefix "nginxexporter" .Key) (hasPrefix "otelCollector" .Key) (hasPrefix "postgresexporter" .Key) (hasPrefix "redisexporter" .Key) (hasPrefix "tempo" .Key)) }} + {{- if not (or (hasPrefix "grafana" .Key) (hasPrefix "kube-state-metrics" .Key) (hasPrefix "loki" .Key) (hasPrefix "mimir" .Key) (hasPrefix "minio" .Key) (hasPrefix "nginx-exporter" .Key) (hasPrefix "otelCollector" .Key) (hasPrefix "postgres-exporter" .Key) (hasPrefix "redis-exporter" .Key) (hasPrefix "tempo" .Key)) }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} @@ -41,14 +41,14 @@ Values for Kube State Metrics: `https://github.com/prometheus-community/helm-cha | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} - {{- if hasPrefix "kubestatemetrics" .Key }} + {{- if hasPrefix "kube-state-metrics" .Key }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ## Loki -Values for Loki: `https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml` +Values for Loki Single Binary: `https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml#L1364` | Key | Type | Default | Description | |-----|------|---------|-------------| @@ -60,7 +60,6 @@ Values for Loki: `https://github.com/grafana/loki/blob/main/production/helm/loki ## Mimir -Values for Mimir: `https://github.com/grafana/helm-charts/blob/main/charts/mimir/values.yaml` | Key | Type | Default | Description | |-----|------|---------|-------------| @@ -70,18 +69,6 @@ Values for Mimir: `https://github.com/grafana/helm-charts/blob/main/charts/mimir {{- end }} {{- end }} -## Minio - -Values for Minio: `https://github.com/bitnami/charts/blob/main/bitnami/minio/values.yaml` - -| Key | Type | Default | Description | -|-----|------|---------|-------------| -{{- range .Values }} - {{- if hasPrefix "minio" .Key }} -| {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | - {{- end }} -{{- end }} - ## Nginx Exporter Values for Nginx Exporter: `https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-nginx-exporter/values.yaml` @@ -89,14 +76,13 @@ Values for Nginx Exporter: `https://github.com/prometheus-community/helm-charts/ | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} - {{- if hasPrefix "nginxexporter" .Key }} + {{- if hasPrefix "nginx-exporter" .Key }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ## OTEL Collector -Values for OTEL Collector: `https://github.com/open-telemetry/opentelemetry-helm-charts/blob/main/charts/opentelemetry-collector-contrib/values.yaml` | Key | Type | Default | Description | |-----|------|---------|-------------| @@ -113,7 +99,7 @@ Values for Postgres Exporter: `https://github.com/prometheus-community/helm-char | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} - {{- if hasPrefix "postgresexporter" .Key }} + {{- if hasPrefix "postgres-exporter" .Key }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} @@ -125,14 +111,14 @@ Values for Redis Exporter: `https://github.com/prometheus-community/helm-charts/ | Key | Type | Default | Description | |-----|------|---------|-------------| {{- range .Values }} - {{- if hasPrefix "redisexporter" .Key }} + {{- if hasPrefix "redis-exporter" .Key }} | {{ .Key }} | {{ .Type }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{- end }} {{- end }} ## Tempo -Values for Tempo: `https://github.com/grafana/helm-charts/blob/main/charts/tempo-distributed/values.yaml` +Values for Tempo: `https://github.com/grafana/helm-charts/blob/main/charts/tempo/values.yaml` | Key | Type | Default | Description | |-----|------|---------|-------------| diff --git a/charts/langsmith-observability/examples/e2e-stack.yaml b/charts/langsmith-observability/examples/e2e-stack.yaml index cdaecb39..582ce888 100644 --- a/charts/langsmith-observability/examples/e2e-stack.yaml +++ b/charts/langsmith-observability/examples/e2e-stack.yaml @@ -7,12 +7,12 @@ langsmithNamespace: "langsmith" # Change this value to match your LangSmith name langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. # ======================== Metrics Exporters ======================== -kubestatemetrics: +kube-state-metrics: enabled: true # Change this value to match your LangSmith namespace. namespaces: "langsmith" -postgresexporter: +postgres-exporter: enabled: true config: # Change these values to match your Postgres instance. @@ -23,12 +23,12 @@ postgresexporter: database: postgres port: "5432" -nginxexporter: +nginx-exporter: enabled: true # Change this value to match your LangSmith frontend service. nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" -redisexporter: +redis-exporter: enabled: true # Change this value to match your Redis instance. redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 diff --git a/charts/langsmith-observability/examples/metric-exporters-only.yaml b/charts/langsmith-observability/examples/metric-exporters-only.yaml index c082f1c1..b3c1eec7 100644 --- a/charts/langsmith-observability/examples/metric-exporters-only.yaml +++ b/charts/langsmith-observability/examples/metric-exporters-only.yaml @@ -4,12 +4,12 @@ langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. -kubestatemetrics: +kube-state-metrics: enabled: true # Change this value to match your LangSmith namespace. namespaces: "langsmith" -postgresexporter: +postgres-exporter: enabled: true config: # Change these values to match your Postgres instance. @@ -20,12 +20,12 @@ postgresexporter: database: "postgres" port: "5432" -nginxexporter: +nginx-exporter: enabled: true # Change this value to match your LangSmith frontend service. nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" -redisexporter: +redis-exporter: enabled: true # Change this value to match your Redis instance. redisAddress: "langsmith-redis.langsmith.svc.cluster.local:6379" \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml index ab30d007..1a9d2ae5 100644 --- a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -20,7 +20,7 @@ rules: verbs: ["get", "watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding # RolBinding for the main Langsmith namespace +kind: RoleBinding # RoleBinding for the main Langsmith namespace metadata: name: get-pod-metrics-binding-langsmith namespace: {{ .Values.langsmithNamespace }} @@ -34,7 +34,7 @@ subjects: namespace: {{ .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding # RolBinding for the observability namespace +kind: RoleBinding # Roleinding for the observability namespace metadata: name: get-pod-metrics-binding-langsmith namespace: {{ .Release.Namespace }} diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index fab127c2..c1301844 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -4,6 +4,7 @@ langsmithNamespace: "langsmith" # The release name of the langsmith release. langSmithReleaseName: "langsmith" +# The name override for the observability stack. nameOverride: "" # ======================== Grafana ======================== @@ -57,7 +58,7 @@ grafana: # ======================== Kube State Metrics ======================== # Values for Kube State Metrics: https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-state-metrics/values.yaml -kubestatemetrics: +kube-state-metrics: enabled: false service: type: ClusterIP @@ -73,7 +74,7 @@ kubestatemetrics: # ======================== Loki ======================== -# Values for Lokig Single Binary: https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml#L1364 +# Values for Loki Single Binary: https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml#L1364 loki: enabled: false deploymentMode: SingleBinary @@ -192,13 +193,23 @@ mimir: # ======================== Nginx Exporter ======================== # Values for the Nginx Exporter: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-nginx-exporter/values.yaml -nginxexporter: +nginx-exporter: enabled: false service: type: ClusterIP port: 9113 nginxServer: "http://langsmith-frontend.romain.svc.cluster.local:80/nginx_status" - + additionalLabels: {} + additionalAnnotations: {} + podAnnotations: {} + nodeSelector: {} + tolerations: [] + affinity: {} + extraEnv: [] + initContainers: [] + extraContainers: [] + extraVolumes: [] + extraVolumeMounts: [] # ======================== OTEL Collector ======================== @@ -227,7 +238,7 @@ otelCollector: # ======================== Postgres Exporter ======================== # Values for the Postgres Exporter: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-postgres-exporter/values.yaml -postgresexporter: +postgres-exporter: enabled: false service: type: ClusterIP @@ -240,18 +251,34 @@ postgresexporter: password: postgres database: postgres port: "5432" + nodeSelector: {} + tolerations: [] + affinity: {} + annotations: {} + podLabels: {} + extraEnv: [] + initContainers: [] + extraContainers: [] + extraVolumes: [] + extraVolumeMounts: [] # ======================== Redis Exporter ======================== # Values for the Redis Exporter: https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-redis-exporter/values.yaml -redisexporter: +redis-exporter: enabled: false service: type: ClusterIP port: 9121 portName: http redisAddress: langsmith-redis.romain.svc.cluster.local:6379 + nodeSelector: {} + tolerations: [] + affinity: {} + annotations: {} + labels: {} + extraArgs: {} # ======================== Tempo ======================== diff --git a/charts/langsmith/README.md b/charts/langsmith/README.md index f2cbc61d..a322f529 100644 --- a/charts/langsmith/README.md +++ b/charts/langsmith/README.md @@ -15,6 +15,7 @@ For information on how to use this chart, up-to-date release notes, and other gu | commonAnnotations | object | `{}` | Annotations that will be applied to all resources created by the chart | | commonEnv | list | `[]` | Common environment variables that will be applied to all deployments/statefulsets except for the playground/aceBackend services (which are sandboxed). Be careful not to override values already specified by the chart. | | commonLabels | object | `{}` | Labels that will be applied to all resources created by the chart | +| commonPodAnnotations | object | `{}` | Annotations that will be applied to all pods created by the chart | | fullnameOverride | string | `""` | String to fully override `"langsmith.fullname"` | | images.aceBackendImage.pullPolicy | string | `"IfNotPresent"` | | | images.aceBackendImage.repository | string | `"docker.io/langchain/langsmith-ace-backend"` | | @@ -233,8 +234,6 @@ For information on how to use this chart, up-to-date release notes, and other gu | config.oauth.oauthIssuerUrl | string | `""` | | | config.oauth.oauthScopes | string | `"email,profile,openid"` | | | config.oauth.oauthSessionMaxSec | string | `"86400"` | | -| config.observability.sidecarCollector.enabled | bool | `false` | | -| config.observability.sidecarCollector.namespace | string | `"langsmith-observability"` | | | config.observability.tracing.enabled | bool | `false` | | | config.observability.tracing.endpoint | string | `""` | | | config.observability.tracing.env | string | `"ls_self_hosted"` | | @@ -1185,6 +1184,6 @@ For information on how to use this chart, up-to-date release notes, and other gu | Ankush | | | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.3](https://github.com/norwoodj/helm-docs/releases/v1.11.3) +Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) ## Docs Generated by [helm-docs](https://github.com/norwoodj/helm-docs) `helm-docs -t ./charts/langsmith/README.md.gotmpl` diff --git a/charts/langsmith/templates/_helpers.tpl b/charts/langsmith/templates/_helpers.tpl index 29e761a6..d630769f 100644 --- a/charts/langsmith/templates/_helpers.tpl +++ b/charts/langsmith/templates/_helpers.tpl @@ -45,15 +45,6 @@ app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end }} -{{/* -Common labels for the observability stack -*/}} -{{- define "langsmith.observabilityAnnotations" -}} -{{- if .Values.config.observability.sidecarCollector.enabled }} -sidecar.opentelemetry.io/inject: {{ .Values.config.observability.sidecarCollector.namespace }}/langsmith-collector-sidecar -{{- end }} -{{- end }} - {{/* Common annotations */}} diff --git a/charts/langsmith/templates/ace-backend/deployment.yaml b/charts/langsmith/templates/ace-backend/deployment.yaml index 5a0f19ba..1bd633bd 100644 --- a/charts/langsmith/templates/ace-backend/deployment.yaml +++ b/charts/langsmith/templates/ace-backend/deployment.yaml @@ -31,7 +31,7 @@ spec: template: metadata: annotations: - {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.aceBackend.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/backend/deployment.yaml b/charts/langsmith/templates/backend/deployment.yaml index b3f11af7..2c2e49ec 100644 --- a/charts/langsmith/templates/backend/deployment.yaml +++ b/charts/langsmith/templates/backend/deployment.yaml @@ -33,7 +33,7 @@ spec: template: metadata: annotations: - {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.backend.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/clickhouse/config-map.yaml b/charts/langsmith/templates/clickhouse/config-map.yaml index 5fe5973d..cde389f4 100644 --- a/charts/langsmith/templates/clickhouse/config-map.yaml +++ b/charts/langsmith/templates/clickhouse/config-map.yaml @@ -53,7 +53,6 @@ data: - {{- if .Values.clickhouse.metrics.enabled }} metrics_config.xml: | @@ -65,5 +64,4 @@ data: true - {{- end }} {{- end }} diff --git a/charts/langsmith/templates/clickhouse/service.yaml b/charts/langsmith/templates/clickhouse/service.yaml index a13f18a9..f8a1bc64 100644 --- a/charts/langsmith/templates/clickhouse/service.yaml +++ b/charts/langsmith/templates/clickhouse/service.yaml @@ -29,12 +29,10 @@ spec: port: {{ .Values.clickhouse.service.nativePort }} targetPort: ch-native protocol: TCP - {{- if .Values.clickhouse.metrics.enabled }} - name: metrics port: {{ .Values.clickhouse.metrics.port }} targetPort: {{ .Values.clickhouse.metrics.port }} protocol: TCP - {{- end }} selector: {{- include "langsmith.selectorLabels" . | nindent 4 }} app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.clickhouse.name }} diff --git a/charts/langsmith/templates/clickhouse/stateful-set.yaml b/charts/langsmith/templates/clickhouse/stateful-set.yaml index 00285972..2348ebb3 100644 --- a/charts/langsmith/templates/clickhouse/stateful-set.yaml +++ b/charts/langsmith/templates/clickhouse/stateful-set.yaml @@ -42,7 +42,7 @@ spec: template: metadata: annotations: - {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- with .Values.clickhouse.statefulSet.annotations }} {{- toYaml . | nindent 8 }} {{- end }} @@ -84,11 +84,9 @@ spec: - name: ch-native containerPort: {{ .Values.clickhouse.containerNativePort }} protocol: TCP - {{- if .Values.clickhouse.metrics.enabled }} - name: ch-metrics containerPort: {{ .Values.clickhouse.metrics.port }} protocol: TCP - {{- end }} {{- with .Values.clickhouse.statefulSet.startupProbe }} startupProbe: {{- toYaml . | nindent 12 }} @@ -119,11 +117,9 @@ spec: - mountPath: /etc/clickhouse-server/config.d/logging_config.xml name: clickhouse-conf subPath: logging_config.xml - {{- if .Values.clickhouse.metrics.enabled }} - mountPath: /etc/clickhouse-server/config.d/metrics_config.xml name: clickhouse-conf subPath: metrics_config.xml - {{- end }} {{- with .Values.clickhouse.statefulSet.extraContainerConfig }} {{- toYaml . | nindent 10 }} {{- end }} @@ -155,10 +151,8 @@ spec: path: users.xml - key: logging_config.xml path: logging_config.xml - {{- if .Values.clickhouse.metrics.enabled }} - key: metrics_config.xml path: metrics_config.xml - {{- end }} {{- with .Values.clickhouse.statefulSet.volumes }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/langsmith/templates/frontend/config-map.yaml b/charts/langsmith/templates/frontend/config-map.yaml index 32d28ee2..3ec58f8e 100644 --- a/charts/langsmith/templates/frontend/config-map.yaml +++ b/charts/langsmith/templates/frontend/config-map.yaml @@ -59,12 +59,6 @@ data: location = /nginx_status { stub_status on; access_log off; - # Allow access from private IP ranges used in k8s clusters - allow 127.0.0.1; # localhost - allow 10.0.0.0/8; # Standard private network range - allow 172.16.0.0/12; # Standard private network range - allow 192.168.0.0/16; # Standard private network range - deny all; # Deny all other IPs } location ~ /{{ .Values.ingress.subdomain }}/api/v1/playground/ { @@ -296,12 +290,6 @@ data: location = /nginx_status { stub_status on; access_log off; - # Allow access from private IP ranges used in k8s clusters - allow 127.0.0.1; # localhost - allow 10.0.0.0/8; # Standard private network range - allow 172.16.0.0/12; # Standard private network range - allow 192.168.0.0/16; # Standard private network range - deny all; # Deny all other IPs } error_page 500 502 503 504 /50x.html; diff --git a/charts/langsmith/templates/frontend/deployment.yaml b/charts/langsmith/templates/frontend/deployment.yaml index 5dc63468..fc3baef4 100644 --- a/charts/langsmith/templates/frontend/deployment.yaml +++ b/charts/langsmith/templates/frontend/deployment.yaml @@ -53,7 +53,7 @@ spec: template: metadata: annotations: - {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.frontend.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/host-backend/deployment.yaml b/charts/langsmith/templates/host-backend/deployment.yaml index d19476df..9290439c 100644 --- a/charts/langsmith/templates/host-backend/deployment.yaml +++ b/charts/langsmith/templates/host-backend/deployment.yaml @@ -30,6 +30,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.hostBackend.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/listener/deployment.yaml b/charts/langsmith/templates/listener/deployment.yaml index 2546c06e..685c8d60 100644 --- a/charts/langsmith/templates/listener/deployment.yaml +++ b/charts/langsmith/templates/listener/deployment.yaml @@ -32,6 +32,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.listener.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/operator/deployment.yaml b/charts/langsmith/templates/operator/deployment.yaml index e0b6ab4f..5837ca09 100644 --- a/charts/langsmith/templates/operator/deployment.yaml +++ b/charts/langsmith/templates/operator/deployment.yaml @@ -22,6 +22,7 @@ spec: template: metadata: annotations: + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- with .Values.operator.deployment.annotations }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/langsmith/templates/platform-backend/deployment.yaml b/charts/langsmith/templates/platform-backend/deployment.yaml index 98c08871..cb3fcf62 100644 --- a/charts/langsmith/templates/platform-backend/deployment.yaml +++ b/charts/langsmith/templates/platform-backend/deployment.yaml @@ -33,7 +33,7 @@ spec: template: metadata: annotations: - {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.platformBackend.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/playground/deployment.yaml b/charts/langsmith/templates/playground/deployment.yaml index 77840dd3..cb693c01 100644 --- a/charts/langsmith/templates/playground/deployment.yaml +++ b/charts/langsmith/templates/playground/deployment.yaml @@ -31,7 +31,7 @@ spec: template: metadata: annotations: - {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.playground.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/postgres/stateful-set.yaml b/charts/langsmith/templates/postgres/stateful-set.yaml index f31ce7f7..1170f2b4 100644 --- a/charts/langsmith/templates/postgres/stateful-set.yaml +++ b/charts/langsmith/templates/postgres/stateful-set.yaml @@ -43,12 +43,8 @@ spec: app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.postgres.name }} template: metadata: - {{- $observabilityAnnotations := include "langsmith.observabilityAnnotations" . }} - {{- if or $observabilityAnnotations .Values.postgres.statefulSet.annotations }} annotations: - {{- if $observabilityAnnotations }} - {{- $observabilityAnnotations | nindent 8 }} - {{- end }} + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- with .Values.postgres.statefulSet.annotations }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/langsmith/templates/queue/deployment.yaml b/charts/langsmith/templates/queue/deployment.yaml index 1b4f6cc4..526ccc05 100644 --- a/charts/langsmith/templates/queue/deployment.yaml +++ b/charts/langsmith/templates/queue/deployment.yaml @@ -31,7 +31,7 @@ spec: template: metadata: annotations: - {{- include "langsmith.observabilityAnnotations" . | nindent 8 }} + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- include "langsmith.checksumAnnotations" . | nindent 8 }} {{- with .Values.queue.deployment.annotations }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/redis/stateful-set.yaml b/charts/langsmith/templates/redis/stateful-set.yaml index 4c35c23c..c1e5eb29 100644 --- a/charts/langsmith/templates/redis/stateful-set.yaml +++ b/charts/langsmith/templates/redis/stateful-set.yaml @@ -24,12 +24,8 @@ spec: app.kubernetes.io/component: {{ include "langsmith.fullname" . }}-{{ .Values.redis.name }} template: metadata: - {{- $observabilityAnnotations := include "langsmith.observabilityAnnotations" . }} - {{- if or $observabilityAnnotations .Values.redis.statefulSet.annotations }} annotations: - {{- if $observabilityAnnotations }} - {{- $observabilityAnnotations | nindent 8 }} - {{- end }} + {{- include "langsmith.commonPodAnnotations" . | nindent 8 }} {{- with .Values.redis.statefulSet.annotations }} {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index 5a32179b..b819e2b2 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -6,6 +6,8 @@ nameOverride: "" fullnameOverride: "" # -- Annotations that will be applied to all resources created by the chart commonAnnotations: {} +# -- Annotations that will be applied to all pods created by the chart +commonPodAnnotations: {} # -- Labels that will be applied to all resources created by the chart commonLabels: {} # -- Common environment variables that will be applied to all deployments/statefulsets except for the playground/aceBackend services (which are sandboxed). Be careful not to override values already specified by the chart. @@ -172,11 +174,6 @@ config: coBrandingEnabled: true observability: - # This will add an annotation to your containers telling the OTEL Operator to bring up a sidecar container. Used in the LangSmith Observability helm chart. - sidecarCollector: - enabled: false - # Replace with your LangSmith Observability namespace. - namespace: "langsmith-observability" tracing: enabled: false # Replace this with the endpoint of your trace collector. If you are using the LangSmith Observability helm chart, this will be the endpoint of the OTEL Gateway collector. From 80c8f85128916fc1ef47ae0555c9247c23256bdd Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Wed, 25 Jun 2025 10:15:54 -0700 Subject: [PATCH 24/27] cleanup --- charts/langsmith-observability/README.md | 20 ++++++++++--- .../langsmith-observability/README.md.gotmpl | 4 +-- .../examples/e2e-stack.yaml | 5 ++-- .../examples/metric-exporters-only.yaml | 2 +- .../templates/_helpers.tpl | 28 +++++++++++++++++++ .../templates/mimir/config-map.yaml | 2 +- .../templates/mimir/service.yaml | 4 +-- .../templates/mimir/stateful-set.yaml | 23 ++++++++------- .../templates/otel/gateway.yaml | 10 +++---- .../templates/otel/logs-sidecar.yaml | 5 ++-- .../templates/otel/rbac-gateway.yaml | 16 +++++------ .../templates/otel/rbac-sidecar.yaml | 6 ++-- charts/langsmith-observability/values.yaml | 25 ++++++++++++----- charts/langsmith/README.md | 1 - .../langsmith/examples/telemetry_config.yaml | 6 ++-- charts/langsmith/values.yaml | 1 - 16 files changed, 103 insertions(+), 55 deletions(-) diff --git a/charts/langsmith-observability/README.md b/charts/langsmith-observability/README.md index e2055e48..df99eab8 100644 --- a/charts/langsmith-observability/README.md +++ b/charts/langsmith-observability/README.md @@ -17,15 +17,16 @@ Helm chart to deploy the observability stack for LangSmith. | https://prometheus-community.github.io/helm-charts | redis-exporter(prometheus-redis-exporter) | 6.11.0 | ## Documentation -For information on how to use this chart and how to deploy the full LangSmith Observability stack, please refer to the [documentation](https://docs.smith.langchain.com/self_hosting/observability). +For information on how to use this chart and how to deploy the full LangSmith Observability stack, please refer to the [documentation](https://docs.smith.langchain.com/self_hosting/observability/observability_stack). -NOTE: For any values in dependencies (Loki, Mimir, Tempo, etc.), you can update the values as you see fit. Only a small set of +NOTE: For any values in dependencies (Loki, Tempo, etc.), you can update the values as you see fit. Only a small set of values are listed in the `values.yaml` and this `README`. Refer to the `values.yaml` files listed next to each dependency header for additional values. ## General parameters | Key | Type | Default | Description | |-----|------|---------|-------------| +| commonLabels | object | `{}` | Labels that will be applied to all resources created by the chart | | langSmithReleaseName | string | `"langsmith"` | | | langsmithNamespace | string | `"langsmith"` | | | nameOverride | string | `""` | | @@ -130,8 +131,13 @@ Values for Loki Single Binary: `https://github.com/grafana/loki/blob/main/produc | Key | Type | Default | Description | |-----|------|---------|-------------| +| mimir.affinity | object | `{}` | | +| mimir.annotations | object | `{}` | | | mimir.enabled | bool | `false` | | +| mimir.envFrom | list | `[]` | | | mimir.extraEnv | list | `[]` | | +| mimir.extraVolumeMounts | list | `[]` | | +| mimir.extraVolumes | list | `[]` | | | mimir.image.pullPolicy | string | `"IfNotPresent"` | | | mimir.image.registry | string | `"docker.io"` | | | mimir.image.repository | string | `"grafana/mimir"` | | @@ -142,22 +148,26 @@ Values for Loki Single Binary: `https://github.com/grafana/loki/blob/main/produc | mimir.livenessProbe.initialDelaySeconds | int | `20` | | | mimir.livenessProbe.periodSeconds | int | `10` | | | mimir.livenessProbe.timeoutSeconds | int | `5` | | +| mimir.nodeSelector | object | `{}` | | | mimir.persistence.accessModes[0] | string | `"ReadWriteOnce"` | | | mimir.persistence.annotations | object | `{}` | | | mimir.persistence.enabled | bool | `true` | | | mimir.persistence.selector | object | `{}` | | | mimir.persistence.size | string | `"10Gi"` | | -| mimir.persistence.storageClass | string | `nil` | | +| mimir.persistence.storageClass | string | `""` | | +| mimir.podAnnotations | object | `{}` | | +| mimir.podSecurityContext | object | `{}` | | | mimir.readinessProbe.failureThreshold | int | `3` | | | mimir.readinessProbe.httpGet.path | string | `"/ready"` | | | mimir.readinessProbe.httpGet.port | string | `"http"` | | | mimir.readinessProbe.initialDelaySeconds | int | `20` | | | mimir.readinessProbe.periodSeconds | int | `10` | | | mimir.readinessProbe.timeoutSeconds | int | `5` | | -| mimir.replicas | int | `1` | | +| mimir.securityContext | object | `{}` | | | mimir.service.port | int | `9009` | | | mimir.service.targetPort | string | `"http"` | | | mimir.service.type | string | `"ClusterIP"` | | +| mimir.tolerations | list | `[]` | | | mimir.updateStrategy.type | string | `"RollingUpdate"` | | ## Nginx Exporter @@ -186,6 +196,7 @@ Values for Nginx Exporter: `https://github.com/prometheus-community/helm-charts/ | Key | Type | Default | Description | |-----|------|---------|-------------| +| otelCollector.gatewayNameOverride | string | `""` | | | otelCollector.image.repository | string | `"otel/opentelemetry-collector-contrib"` | | | otelCollector.image.tag | string | `"0.123.0"` | | | otelCollector.logs.enabled | bool | `false` | | @@ -199,6 +210,7 @@ Values for Nginx Exporter: `https://github.com/prometheus-community/helm-charts/ | otelCollector.serviceAccounts[6] | string | `"langsmith-postgres"` | | | otelCollector.serviceAccounts[7] | string | `"langsmith-queue"` | | | otelCollector.serviceAccounts[8] | string | `"langsmith-redis"` | | +| otelCollector.sidecarNameOverride | string | `""` | | | otelCollector.traces.enabled | bool | `false` | | ## Postgres Exporter diff --git a/charts/langsmith-observability/README.md.gotmpl b/charts/langsmith-observability/README.md.gotmpl index 12bb4e4f..00f78032 100644 --- a/charts/langsmith-observability/README.md.gotmpl +++ b/charts/langsmith-observability/README.md.gotmpl @@ -7,9 +7,9 @@ {{ template "chart.requirementsSection" . }} ## Documentation -For information on how to use this chart and how to deploy the full LangSmith Observability stack, please refer to the [documentation](https://docs.smith.langchain.com/self_hosting/observability). +For information on how to use this chart and how to deploy the full LangSmith Observability stack, please refer to the [documentation](https://docs.smith.langchain.com/self_hosting/observability/observability_stack). -NOTE: For any values in dependencies (Loki, Mimir, Tempo, etc.), you can update the values as you see fit. Only a small set of +NOTE: For any values in dependencies (Loki, Tempo, etc.), you can update the values as you see fit. Only a small set of values are listed in the `values.yaml` and this `README`. Refer to the `values.yaml` files listed next to each dependency header for additional values. ## General parameters diff --git a/charts/langsmith-observability/examples/e2e-stack.yaml b/charts/langsmith-observability/examples/e2e-stack.yaml index 582ce888..53070d55 100644 --- a/charts/langsmith-observability/examples/e2e-stack.yaml +++ b/charts/langsmith-observability/examples/e2e-stack.yaml @@ -1,7 +1,6 @@ -# Use this configuration to deploy the full LangSmith observability stack with storage on the filesystem. -# This should not be used as a production observability system, but rather to gain quick insights into your LangSmith deployment. +# Use this configuration to deploy the full LangSmith observability stack with filesystem storage. # You can disable parts as you see fit, such as exporters, or logs/metrics/traces. -# NOTE: This configuration is not recommended for production environments. +# NOTE: This should not be used as a production observability system, but rather to gain quick insights into your LangSmith deployment. langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. diff --git a/charts/langsmith-observability/examples/metric-exporters-only.yaml b/charts/langsmith-observability/examples/metric-exporters-only.yaml index b3c1eec7..9cfbd410 100644 --- a/charts/langsmith-observability/examples/metric-exporters-only.yaml +++ b/charts/langsmith-observability/examples/metric-exporters-only.yaml @@ -1,4 +1,4 @@ -# This configuration is to deploy all of the Prometheus Exporters, but not the LGTM Stack or OTEL collector. +# This configuration is to deploy all of the Prometheus Exporters without any observability stack. # Use this if you already have a collector and just want to scrape all metrics from LangSmith. langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. diff --git a/charts/langsmith-observability/templates/_helpers.tpl b/charts/langsmith-observability/templates/_helpers.tpl index c82ac85a..287fb11a 100644 --- a/charts/langsmith-observability/templates/_helpers.tpl +++ b/charts/langsmith-observability/templates/_helpers.tpl @@ -36,3 +36,31 @@ Selector labels app.kubernetes.io/name: {{ include "langsmith-observability.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} + +{{/* +Mimir Resource Name +*/}} +{{ define "langsmith-mimir.name" -}} +{{- printf "%s-%s" .Release.Name "mimir" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +OTEL Gatway Collector Resource Name +*/}} +{{ define "langsmith-gateway-collector.name" -}} +{{- if .Values.otelCollector.gatewayNameOverride -}} +{{- .Values.otelCollector.gatewayNameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" (include "langsmith-observability.name" .) "collector-gateway" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +OTEL Sidecar Collector Resource Name +*/}} +{{ define "langsmith-sidecar-collector.name" -}} +{{- if .Values.otelCollector.sidecarNameOverride -}} +{{- .Values.otelCollector.sidecarNameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" (include "langsmith-observability.name" .) "collector-sidecar" | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/mimir/config-map.yaml b/charts/langsmith-observability/templates/mimir/config-map.yaml index 9d35c3b4..6128cad3 100644 --- a/charts/langsmith-observability/templates/mimir/config-map.yaml +++ b/charts/langsmith-observability/templates/mimir/config-map.yaml @@ -2,7 +2,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: {{ include "langsmith-observability.name" . }}-mimir + name: {{ include "langsmith-mimir.name" . }} data: mimir.yaml: | multitenancy_enabled: false diff --git a/charts/langsmith-observability/templates/mimir/service.yaml b/charts/langsmith-observability/templates/mimir/service.yaml index e3c910f7..a94f7029 100644 --- a/charts/langsmith-observability/templates/mimir/service.yaml +++ b/charts/langsmith-observability/templates/mimir/service.yaml @@ -2,7 +2,7 @@ apiVersion: v1 kind: Service metadata: - name: {{ .Release.Name }}-mimir + name: {{ include "langsmith-mimir.name" . }} labels: {{- include "langsmith-observability.labels" . | nindent 4 }} spec: @@ -13,5 +13,5 @@ spec: port: {{ .Values.mimir.service.port }} targetPort: {{ .Values.mimir.service.targetPort }} selector: - app: {{ .Release.Name }}-mimir + app: {{ include "langsmith-mimir.name" . }} {{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/mimir/stateful-set.yaml b/charts/langsmith-observability/templates/mimir/stateful-set.yaml index 574007a8..2a5d1275 100644 --- a/charts/langsmith-observability/templates/mimir/stateful-set.yaml +++ b/charts/langsmith-observability/templates/mimir/stateful-set.yaml @@ -2,27 +2,26 @@ apiVersion: apps/v1 kind: StatefulSet metadata: - name: {{ .Release.Name }}-mimir + name: {{ include "langsmith-mimir.name" . }} namespace: {{ .Release.Namespace }} labels: {{- include "langsmith-observability.labels" . | nindent 4 }} - {{- with .Values.annotations }} annotations: - {{- toYaml . | nindent 4 }} - {{- end }} + {{- toYaml .Values.mimir.annotations | nindent 4 }} spec: - replicas: {{ .Values.mimir.replicas }} + replicas: 1 # Replicas must be 1 to use filesystem. selector: matchLabels: - app: {{ .Release.Name }}-mimir - serviceName: {{ include "langsmith-observability.name" . }}-mimir-headless + app: {{ include "langsmith-mimir.name" . }} + serviceName: {{ include "langsmith-mimir.name" . }}-headless template: metadata: labels: {{- include "langsmith-observability.labels" . | nindent 8 }} - app: {{ .Release.Name }}-mimir + app: {{ include "langsmith-mimir.name" . }} annotations: checksum/config: {{ include (print $.Template.BasePath "/mimir/config-map.yaml") . | sha256sum }} + {{- toYaml .Values.mimir.podAnnotations | nindent 8 }} spec: containers: - name: mimir @@ -42,7 +41,7 @@ spec: readinessProbe: {{- toYaml . | nindent 12 }} {{- end }} - {{- with .Values.mimir.securityContext }} + {{- with .Values.mimir.podSecurityContext }} securityContext: {{- toYaml . | nindent 10 }} {{- end }} @@ -80,7 +79,7 @@ spec: {{- end }} - name: mimir-conf configMap: - name: {{ include "langsmith-observability.name" . }}-mimir + name: {{ include "langsmith-mimir.name" . }} items: - key: "mimir.yaml" path: "mimir.yaml" @@ -100,8 +99,8 @@ spec: resources: requests: storage: {{ .Values.mimir.persistence.size | quote }} - {{- if .Values.mimir.persistence.storageClassName }} - storageClassName: {{ .Values.mimir.persistence.storageClassName }} + {{- if .Values.mimir.persistence.storageClass }} + storageClassName: {{ .Values.mimir.persistence.storageClass }} {{- end }} {{- end }} {{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml index 87b1819d..08470330 100644 --- a/charts/langsmith-observability/templates/otel/gateway.yaml +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -2,7 +2,7 @@ apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: - name: langsmith-collector-gateway + name: {{ include "langsmith-gateway-collector.name" . }} spec: mode: deployment image: {{ .Values.otelCollector.image.repository }}:{{ .Values.otelCollector.image.tag }} @@ -23,7 +23,7 @@ spec: relabel_configs: # Keeps all services with the name langsmith-.* - source_labels: [__meta_kubernetes_service_name] - regex: "langsmith-.*" + regex: "{{ include "langsmith-observability.name" .}}-.*" action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] regex: "(backend|platform|playground|host-backend|metrics)" @@ -45,7 +45,7 @@ spec: names: [{{ .Release.Namespace }}] relabel_configs: - source_labels: [__meta_kubernetes_service_name] - regex: "{{ .Values.langSmithReleaseName }}-.*" + regex: "{{ include "langsmith-observability.name" .}}-.*" action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] regex: "(http)" @@ -84,11 +84,11 @@ spec: exporters: {{ if .Values.otelCollector.metrics.enabled }} otlphttp/metrics: - endpoint: http://{{ .Release.Name }}-mimir.{{ .Release.Namespace }}.svc.cluster.local:9009/otlp + endpoint: http://{{ include "langsmith-mimir.name" . }}.{{ .Release.Namespace }}.svc.cluster.local:9009/otlp {{ end }} {{ if .Values.otelCollector.traces.enabled }} otlphttp/traces: - endpoint: http://{{ .Release.Name }}-tempo.{{ .Release.Namespace }}.svc.cluster.local:4318 + endpoint: http://{{ include "langsmith-observability.name"}}-tempo.{{ .Release.Namespace }}.svc.cluster.local:4318 {{ end }} service: diff --git a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml index ad4d8625..b9dd7459 100644 --- a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml @@ -2,7 +2,7 @@ apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: - name: langsmith-collector-sidecar + name: {{ include "langsmith-sidecar-collector.name" . }} spec: mode: sidecar image: {{ .Values.otelCollector.image.repository }}:{{ .Values.otelCollector.image.tag }} @@ -10,6 +10,7 @@ spec: config: receivers: filelog: + # TODO: ignore all logs from the collectors, check once deployed. exclude: - '**/otc-container/*.log' - '**/postgres-metrics-exporter/*.log' @@ -36,7 +37,7 @@ spec: exporters: otlphttp/logs: - endpoint: http://{{ .Release.Name }}-loki-gateway.{{ .Release.Namespace }}.svc.cluster.local:80/otlp + endpoint: http://{{ include "langsmith-observability.name" . }}-loki-gateway.{{ .Release.Namespace }}.svc.cluster.local:80/otlp tls: insecure: false diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml index 1a9d2ae5..b4a2ef6e 100644 --- a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -2,7 +2,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: Role # Role for the main Langsmith namespace metadata: - name: get-pod-metrics + name: {{ include "langsmith-gateway-collector.name" . }}-role namespace: {{ .Values.langsmithNamespace }} rules: - apiGroups: [""] @@ -12,7 +12,7 @@ rules: apiVersion: rbac.authorization.k8s.io/v1 kind: Role # Role for the observability namespace metadata: - name: get-pod-metrics + name: {{ include "langsmith-gateway-collector.name" . }}-role namespace: {{ .Release.Namespace }} rules: - apiGroups: [""] @@ -22,28 +22,28 @@ rules: apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding # RoleBinding for the main Langsmith namespace metadata: - name: get-pod-metrics-binding-langsmith + name: {{ include "langsmith-gateway-collector.name" . }}-rolebinding namespace: {{ .Values.langsmithNamespace }} roleRef: kind: Role - name: get-pod-metrics + name: {{ include "langsmith-gateway-collector.name" . }}-role namespace: {{ .Release.Namespace }} subjects: - kind: ServiceAccount - name: langsmith-collector-gateway-collector + name: {{ include "langsmith-gateway-collector.name" . }} namespace: {{ .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding # Roleinding for the observability namespace metadata: - name: get-pod-metrics-binding-langsmith + name: {{ include "langsmith-gateway-collector.name" . }}-rolebinding namespace: {{ .Release.Namespace }} roleRef: kind: Role - name: get-pod-metrics + name: {{ include "langsmith-gateway-collector.name" . }}-role namespace: {{ .Values.langsmithNamespace }} subjects: - kind: ServiceAccount - name: langsmith-collector-gateway-collector + name: {{ include "langsmith-gateway-collector.name" . }} namespace: {{ .Release.Namespace }} {{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml index 4faaee70..9f030a30 100644 --- a/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml @@ -3,7 +3,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: - name: read-pod-logs + name: {{ include "langsmith-sidecar-collector.name" . }}-role namespace: {{ $namespace }} rules: - apiGroups: [""] @@ -13,11 +13,11 @@ rules: apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: - name: read-pod-logs-binding + name: {{ include "langsmith-sidecar-collector.name" . }}-rolebinding namespace: {{ $namespace }} roleRef: kind: Role - name: read-pod-logs + name: {{ include "langsmith-sidecar-collector.name" . }}-role namespace: {{ $namespace }} subjects: {{- range .Values.otelCollector.serviceAccounts }} diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index c1301844..2135236f 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -1,11 +1,11 @@ # The namespace in which langsmith is deployed. langsmithNamespace: "langsmith" - # The release name of the langsmith release. langSmithReleaseName: "langsmith" - # The name override for the observability stack. nameOverride: "" +# -- Labels that will be applied to all resources created by the chart +commonLabels: {} # ======================== Grafana ======================== @@ -152,8 +152,6 @@ loki: mimir: enabled: false - extraEnv: [] - replicas: 1 # Must be 1 to use filesystem. image: registry: docker.io repository: grafana/mimir @@ -161,14 +159,12 @@ mimir: tag: null persistence: enabled: true - storageClass: + storageClass: "" annotations: {} accessModes: - ReadWriteOnce size: 10Gi selector: {} - updateStrategy: - type: RollingUpdate service: type: ClusterIP port: 9009 @@ -189,6 +185,19 @@ mimir: periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 + updateStrategy: + type: RollingUpdate + annotations: {} + podAnnotations: {} + securityContext: {} + podSecurityContext: {} + nodeSelector: {} + tolerations: [] + affinity: {} + extraEnv: [] + envFrom: [] + extraVolumes: [] + extraVolumeMounts: [] # ======================== Nginx Exporter ======================== @@ -214,6 +223,8 @@ nginx-exporter: # ======================== OTEL Collector ======================== otelCollector: + gatewayNameOverride: "" + sidecarNameOverride: "" image: repository: otel/opentelemetry-collector-contrib tag: "0.123.0" diff --git a/charts/langsmith/README.md b/charts/langsmith/README.md index a322f529..e99e16b8 100644 --- a/charts/langsmith/README.md +++ b/charts/langsmith/README.md @@ -491,7 +491,6 @@ For information on how to use this chart, up-to-date release notes, and other gu | clickhouse.external.tlsSecretKey | string | `"clickhouse_tls"` | | | clickhouse.external.user | string | `"default"` | | | clickhouse.external.userSecretKey | string | `"clickhouse_user"` | | -| clickhouse.metrics.enabled | bool | `true` | | | clickhouse.metrics.port | int | `9363` | | | clickhouse.name | string | `"clickhouse"` | | | clickhouse.pdb.annotations | object | `{}` | | diff --git a/charts/langsmith/examples/telemetry_config.yaml b/charts/langsmith/examples/telemetry_config.yaml index 5c04be66..5c151053 100644 --- a/charts/langsmith/examples/telemetry_config.yaml +++ b/charts/langsmith/examples/telemetry_config.yaml @@ -10,9 +10,9 @@ config: # existingSecretName: "langsmith-config" You can also put the above into a secret if you want to avoid putting the license key in the values file. observability: - sidecarCollector: # Use this for the LangSmith Observability helm chart. This will add an annotation to your containers telling the OTEL Operator to bring up a sidecar container. - enabled: true - namespace: "langsmith-observability" # Replace with your LangSmith Observability namespace. + commonPodAnnotations: + # Use this to inject the OTEL sidecar collector into your containers if you are using the LangSmith Observability helm chart. + sidecar.opentelemetry.io/inject: "${LANGSMITH_OBSERVABILITY_NAMESPACE}/${LANGSMITH_OBSERVABILITY_CRD_NAME}" tracing: enabled: true endpoint: "http://${YOUR_OTEL_GATEWAY_ENDPOINT}/v1/traces" # Replace this with the endpoint of your trace collector. \ No newline at end of file diff --git a/charts/langsmith/values.yaml b/charts/langsmith/values.yaml index b819e2b2..181cdce0 100644 --- a/charts/langsmith/values.yaml +++ b/charts/langsmith/values.yaml @@ -558,7 +558,6 @@ clickhouse: labels: {} annotations: {} metrics: - enabled: true port: 9363 e2eTest: From 0d61fbc73c454adb6c3e6e5bb4fb8891adc8890a Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Wed, 25 Jun 2025 12:17:52 -0700 Subject: [PATCH 25/27] tested end to end --- charts/langsmith-observability/Chart.lock | 4 +- .../dashboards/clickhouse.json | 2 +- .../dashboards/kube-state-metrics.json | 2 +- .../dashboards/nginx.json | 2 +- .../dashboards/postgres.json | 2 +- .../dashboards/redis.json | 2 +- .../templates/_helpers.tpl | 1 + .../templates/mimir/stateful-set.yaml | 42 +++++++++++-------- .../templates/otel/gateway.yaml | 9 ++-- .../templates/otel/logs-sidecar.yaml | 2 - .../templates/otel/rbac-gateway.yaml | 6 +-- charts/langsmith-observability/values.yaml | 21 ++++++++++ ...emetry_config.yaml => tracing_config.yaml} | 3 -- charts/langsmith/templates/_helpers.tpl | 9 ++++ .../templates/postgres/stateful-set.yaml | 1 - .../templates/redis/stateful-set.yaml | 1 - 16 files changed, 70 insertions(+), 39 deletions(-) rename charts/langsmith/examples/{telemetry_config.yaml => tracing_config.yaml} (68%) diff --git a/charts/langsmith-observability/Chart.lock b/charts/langsmith-observability/Chart.lock index 327c7784..a20f475d 100644 --- a/charts/langsmith-observability/Chart.lock +++ b/charts/langsmith-observability/Chart.lock @@ -20,5 +20,5 @@ dependencies: - name: tempo repository: https://grafana.github.io/helm-charts version: 1.23.1 -digest: sha256:f8ee0500201c5091c9ece75f97ee1513235bcb77d763f2e2f995cfad5e45ebad -generated: "2025-06-24T22:03:39.181255-07:00" +digest: sha256:37a0e475faf029162aa4025c48fdb8bfc46f8dbb8d9f6c89e12e132f4d45b3d1 +generated: "2025-06-25T10:33:20.351036-07:00" diff --git a/charts/langsmith-observability/dashboards/clickhouse.json b/charts/langsmith-observability/dashboards/clickhouse.json index 222b4c8a..4a165a6c 100644 --- a/charts/langsmith-observability/dashboards/clickhouse.json +++ b/charts/langsmith-observability/dashboards/clickhouse.json @@ -11510,7 +11510,7 @@ ] }, "time": { - "from": "now-3h", + "from": "now-15m", "to": "now" }, "timepicker": {}, diff --git a/charts/langsmith-observability/dashboards/kube-state-metrics.json b/charts/langsmith-observability/dashboards/kube-state-metrics.json index cb5108f1..dc7c48f9 100644 --- a/charts/langsmith-observability/dashboards/kube-state-metrics.json +++ b/charts/langsmith-observability/dashboards/kube-state-metrics.json @@ -4474,7 +4474,7 @@ ] }, "time": { - "from": "now-30m", + "from": "now-15m", "to": "now" }, "timepicker": { diff --git a/charts/langsmith-observability/dashboards/nginx.json b/charts/langsmith-observability/dashboards/nginx.json index d9c87b9a..18ad3d86 100644 --- a/charts/langsmith-observability/dashboards/nginx.json +++ b/charts/langsmith-observability/dashboards/nginx.json @@ -942,7 +942,7 @@ ] }, "time": { - "from": "now-24h", + "from": "now-15m", "to": "now" }, "timepicker": { diff --git a/charts/langsmith-observability/dashboards/postgres.json b/charts/langsmith-observability/dashboards/postgres.json index e10c518d..387e0a1b 100644 --- a/charts/langsmith-observability/dashboards/postgres.json +++ b/charts/langsmith-observability/dashboards/postgres.json @@ -3068,7 +3068,7 @@ ] }, "time": { - "from": "now-6h", + "from": "now-15m", "to": "now" }, "timepicker": {}, diff --git a/charts/langsmith-observability/dashboards/redis.json b/charts/langsmith-observability/dashboards/redis.json index 6417e22b..0dae46df 100644 --- a/charts/langsmith-observability/dashboards/redis.json +++ b/charts/langsmith-observability/dashboards/redis.json @@ -2945,7 +2945,7 @@ ] }, "time": { - "from": "now-6h", + "from": "now-15m", "to": "now" }, "timepicker": {}, diff --git a/charts/langsmith-observability/templates/_helpers.tpl b/charts/langsmith-observability/templates/_helpers.tpl index 287fb11a..f4bcf1fd 100644 --- a/charts/langsmith-observability/templates/_helpers.tpl +++ b/charts/langsmith-observability/templates/_helpers.tpl @@ -53,6 +53,7 @@ OTEL Gatway Collector Resource Name {{- else -}} {{- printf "%s-%s" (include "langsmith-observability.name" .) "collector-gateway" | trunc 63 | trimSuffix "-" -}} {{- end -}} +{{- end -}} {{/* OTEL Sidecar Collector Resource Name diff --git a/charts/langsmith-observability/templates/mimir/stateful-set.yaml b/charts/langsmith-observability/templates/mimir/stateful-set.yaml index 2a5d1275..834ed4e7 100644 --- a/charts/langsmith-observability/templates/mimir/stateful-set.yaml +++ b/charts/langsmith-observability/templates/mimir/stateful-set.yaml @@ -21,7 +21,9 @@ spec: app: {{ include "langsmith-mimir.name" . }} annotations: checksum/config: {{ include (print $.Template.BasePath "/mimir/config-map.yaml") . | sha256sum }} + {{- if .Values.mimir.podAnnotations }} {{- toYaml .Values.mimir.podAnnotations | nindent 8 }} + {{- end }} spec: containers: - name: mimir @@ -50,13 +52,17 @@ spec: {{- toYaml . | nindent 10 }} {{- end }} volumeMounts: - {{- if .Values.mimir.extraVolumeMounts -}} - {{ toYaml .Values.mimir.extraVolumeMounts | nindent 8 }} + {{- if .Values.mimir.extraVolumeMounts }} + {{- toYaml .Values.mimir.extraVolumeMounts | nindent 12 }} + {{- end }} + - mountPath: /etc/mimir + name: mimir-conf + - mountPath: /tmp/mimir + name: storage + {{- with .Values.mimir.resources }} + resources: + {{- toYaml . | nindent 12 }} {{- end }} - - mountPath: /etc/mimir - name: mimir-conf - - mountPath: /tmp/mimir - name: storage {{- with .Values.mimir.affinity }} affinity: {{- toYaml . | nindent 8 }} @@ -74,19 +80,19 @@ spec: {{- toYaml . | nindent 8 }} {{- end }} volumes: - {{- if .Values.mimir.extraVolumes -}} - {{ toYaml .Values.mimir.extraVolumes | nindent 12 }} + {{- if .Values.mimir.extraVolumes }} + {{- toYaml .Values.mimir.extraVolumes | nindent 8 }} + {{- end }} + - name: mimir-conf + configMap: + name: {{ include "langsmith-mimir.name" . }} + items: + - key: "mimir.yaml" + path: "mimir.yaml" + {{- if not .Values.mimir.persistence.enabled }} + - name: storage + emptyDir: { } {{- end }} - - name: mimir-conf - configMap: - name: {{ include "langsmith-mimir.name" . }} - items: - - key: "mimir.yaml" - path: "mimir.yaml" - {{- if not .Values.mimir.persistence.enabled }} - - name: storage - emptyDir: { } - {{- end }} updateStrategy: {{- toYaml .Values.mimir.updateStrategy | nindent 4 }} {{- if .Values.mimir.persistence.enabled }} diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml index 08470330..d3510f69 100644 --- a/charts/langsmith-observability/templates/otel/gateway.yaml +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -14,7 +14,7 @@ spec: config: scrape_configs: # Fetches all the metrics from the langsmith namespace (LS services + CH) - - job_name: langsmith-services + - job_name: langsmith-metrics metrics_path: /metrics kubernetes_sd_configs: - role: endpoints @@ -23,7 +23,7 @@ spec: relabel_configs: # Keeps all services with the name langsmith-.* - source_labels: [__meta_kubernetes_service_name] - regex: "{{ include "langsmith-observability.name" .}}-.*" + regex: "{{ .Values.langSmithReleaseName }}-.*" action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] regex: "(backend|platform|playground|host-backend|metrics)" @@ -45,7 +45,7 @@ spec: names: [{{ .Release.Namespace }}] relabel_configs: - source_labels: [__meta_kubernetes_service_name] - regex: "{{ include "langsmith-observability.name" .}}-.*" + regex: "{{ include "langsmith-observability.name" . }}-.*" action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] regex: "(http)" @@ -80,6 +80,7 @@ spec: match_type: regexp metric_names: - "go_.*" + - "cortex_.*" exporters: {{ if .Values.otelCollector.metrics.enabled }} @@ -88,7 +89,7 @@ spec: {{ end }} {{ if .Values.otelCollector.traces.enabled }} otlphttp/traces: - endpoint: http://{{ include "langsmith-observability.name"}}-tempo.{{ .Release.Namespace }}.svc.cluster.local:4318 + endpoint: http://{{ include "langsmith-observability.name" .}}-tempo.{{ .Release.Namespace }}.svc.cluster.local:4318 {{ end }} service: diff --git a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml index b9dd7459..69649d74 100644 --- a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml @@ -13,8 +13,6 @@ spec: # TODO: ignore all logs from the collectors, check once deployed. exclude: - '**/otc-container/*.log' - - '**/postgres-metrics-exporter/*.log' - - '**/redis-metrics-exporter/*.log' include: - /var/log/pods/${POD_NAMESPACE}_${POD_NAME}_${POD_UID}/*/*.log include_file_name: false diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml index b4a2ef6e..149652df 100644 --- a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -27,10 +27,10 @@ metadata: roleRef: kind: Role name: {{ include "langsmith-gateway-collector.name" . }}-role - namespace: {{ .Release.Namespace }} + namespace: {{ .Values.langsmithNamespace }} subjects: - kind: ServiceAccount - name: {{ include "langsmith-gateway-collector.name" . }} + name: {{ include "langsmith-gateway-collector.name" . }}-collector namespace: {{ .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 @@ -44,6 +44,6 @@ roleRef: namespace: {{ .Values.langsmithNamespace }} subjects: - kind: ServiceAccount - name: {{ include "langsmith-gateway-collector.name" . }} + name: {{ include "langsmith-gateway-collector.name" . }}-collector namespace: {{ .Release.Namespace }} {{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index 2135236f..99401b34 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -84,6 +84,13 @@ loki: enabled: true size: 10Gi storageClass: null + resources: + limits: + cpu: 3000m + memory: 4Gi + requests: + cpu: 2000m + memory: 2Gi loki: auth_enabled: false commonConfig: @@ -165,6 +172,13 @@ mimir: - ReadWriteOnce size: 10Gi selector: {} + resources: + limits: + cpu: 2000m + memory: 4Gi + requests: + cpu: 1000m + memory: 2Gi service: type: ClusterIP port: 9009 @@ -298,6 +312,13 @@ redis-exporter: tempo: enabled: false tempo: + resources: + limits: + cpu: 2000m + memory: 6Gi + requests: + cpu: 1000m + memory: 4Gi metricsGenerator: enabled: true reportingEnabled: false diff --git a/charts/langsmith/examples/telemetry_config.yaml b/charts/langsmith/examples/tracing_config.yaml similarity index 68% rename from charts/langsmith/examples/telemetry_config.yaml rename to charts/langsmith/examples/tracing_config.yaml index 5c151053..9ea40f85 100644 --- a/charts/langsmith/examples/telemetry_config.yaml +++ b/charts/langsmith/examples/tracing_config.yaml @@ -10,9 +10,6 @@ config: # existingSecretName: "langsmith-config" You can also put the above into a secret if you want to avoid putting the license key in the values file. observability: - commonPodAnnotations: - # Use this to inject the OTEL sidecar collector into your containers if you are using the LangSmith Observability helm chart. - sidecar.opentelemetry.io/inject: "${LANGSMITH_OBSERVABILITY_NAMESPACE}/${LANGSMITH_OBSERVABILITY_CRD_NAME}" tracing: enabled: true endpoint: "http://${YOUR_OTEL_GATEWAY_ENDPOINT}/v1/traces" # Replace this with the endpoint of your trace collector. \ No newline at end of file diff --git a/charts/langsmith/templates/_helpers.tpl b/charts/langsmith/templates/_helpers.tpl index d630769f..b5fadcda 100644 --- a/charts/langsmith/templates/_helpers.tpl +++ b/charts/langsmith/templates/_helpers.tpl @@ -60,6 +60,15 @@ app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end }} +{{/* +Common pod annotations +*/}} +{{- define "langsmith.commonPodAnnotations" -}} +{{- if .Values.commonPodAnnotations }} +{{ toYaml .Values.commonPodAnnotations }} +{{- end }} +{{- end }} + {{/* Selector labels */}} diff --git a/charts/langsmith/templates/postgres/stateful-set.yaml b/charts/langsmith/templates/postgres/stateful-set.yaml index 1170f2b4..897210d5 100644 --- a/charts/langsmith/templates/postgres/stateful-set.yaml +++ b/charts/langsmith/templates/postgres/stateful-set.yaml @@ -48,7 +48,6 @@ spec: {{- with .Values.postgres.statefulSet.annotations }} {{- toYaml . | nindent 8 }} {{- end }} - {{- end }} labels: {{- with.Values.postgres.statefulSet.labels }} {{- toYaml . | nindent 8 }} diff --git a/charts/langsmith/templates/redis/stateful-set.yaml b/charts/langsmith/templates/redis/stateful-set.yaml index c1e5eb29..6eae278c 100644 --- a/charts/langsmith/templates/redis/stateful-set.yaml +++ b/charts/langsmith/templates/redis/stateful-set.yaml @@ -29,7 +29,6 @@ spec: {{- with .Values.redis.statefulSet.annotations }} {{- toYaml . | nindent 8 }} {{- end }} - {{- end }} labels: {{- with.Values.redis.statefulSet.labels }} {{- toYaml . | nindent 8 }} From eefffae092939cec9ade59bbbc3a31a90bc89e17 Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Wed, 25 Jun 2025 12:26:52 -0700 Subject: [PATCH 26/27] readme update for ls-obs --- charts/langsmith-observability/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/charts/langsmith-observability/README.md b/charts/langsmith-observability/README.md index df99eab8..c014214f 100644 --- a/charts/langsmith-observability/README.md +++ b/charts/langsmith-observability/README.md @@ -124,6 +124,10 @@ Values for Loki Single Binary: `https://github.com/grafana/loki/blob/main/produc | loki.singleBinary.persistence.size | string | `"10Gi"` | | | loki.singleBinary.persistence.storageClass | string | `nil` | | | loki.singleBinary.replicas | int | `1` | | +| loki.singleBinary.resources.limits.cpu | string | `"3000m"` | | +| loki.singleBinary.resources.limits.memory | string | `"4Gi"` | | +| loki.singleBinary.resources.requests.cpu | string | `"2000m"` | | +| loki.singleBinary.resources.requests.memory | string | `"2Gi"` | | | loki.test.enabled | bool | `false` | | | loki.write.replicas | int | `0` | | @@ -163,6 +167,10 @@ Values for Loki Single Binary: `https://github.com/grafana/loki/blob/main/produc | mimir.readinessProbe.initialDelaySeconds | int | `20` | | | mimir.readinessProbe.periodSeconds | int | `10` | | | mimir.readinessProbe.timeoutSeconds | int | `5` | | +| mimir.resources.limits.cpu | string | `"2000m"` | | +| mimir.resources.limits.memory | string | `"4Gi"` | | +| mimir.resources.requests.cpu | string | `"1000m"` | | +| mimir.resources.requests.memory | string | `"2Gi"` | | | mimir.securityContext | object | `{}` | | | mimir.service.port | int | `9009` | | | mimir.service.targetPort | string | `"http"` | | @@ -273,3 +281,7 @@ Values for Tempo: `https://github.com/grafana/helm-charts/blob/main/charts/tempo | tempo.tempo.overrides.defaults.metrics_generator.processors[1] | string | `"span-metrics"` | | | tempo.tempo.overrides.defaults.metrics_generator.processors[2] | string | `"local-blocks"` | | | tempo.tempo.reportingEnabled | bool | `false` | | +| tempo.tempo.resources.limits.cpu | string | `"2000m"` | | +| tempo.tempo.resources.limits.memory | string | `"6Gi"` | | +| tempo.tempo.resources.requests.cpu | string | `"1000m"` | | +| tempo.tempo.resources.requests.memory | string | `"4Gi"` | | From fc0f6b970d2e92bbc99da9501af31599e65aeebc Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Wed, 25 Jun 2025 13:24:32 -0700 Subject: [PATCH 27/27] cleanup --- charts/langsmith-observability/examples/e2e-stack.yaml | 2 +- .../examples/metric-exporters-only.yaml | 2 +- charts/langsmith-observability/templates/_helpers.tpl | 2 +- charts/langsmith-observability/templates/mimir/config-map.yaml | 2 +- charts/langsmith-observability/templates/mimir/service.yaml | 2 +- .../langsmith-observability/templates/mimir/stateful-set.yaml | 2 +- charts/langsmith-observability/templates/otel/gateway.yaml | 2 +- .../langsmith-observability/templates/otel/logs-sidecar.yaml | 3 +-- .../langsmith-observability/templates/otel/rbac-gateway.yaml | 2 +- .../langsmith-observability/templates/otel/rbac-sidecar.yaml | 2 +- charts/langsmith-observability/values.yaml | 2 +- charts/langsmith/examples/tracing_config.yaml | 2 +- 12 files changed, 12 insertions(+), 13 deletions(-) diff --git a/charts/langsmith-observability/examples/e2e-stack.yaml b/charts/langsmith-observability/examples/e2e-stack.yaml index 53070d55..24bedb44 100644 --- a/charts/langsmith-observability/examples/e2e-stack.yaml +++ b/charts/langsmith-observability/examples/e2e-stack.yaml @@ -56,4 +56,4 @@ mimir: # Traces storage + retrieval tempo: - enabled: true \ No newline at end of file + enabled: true diff --git a/charts/langsmith-observability/examples/metric-exporters-only.yaml b/charts/langsmith-observability/examples/metric-exporters-only.yaml index 9cfbd410..61dcb233 100644 --- a/charts/langsmith-observability/examples/metric-exporters-only.yaml +++ b/charts/langsmith-observability/examples/metric-exporters-only.yaml @@ -28,4 +28,4 @@ nginx-exporter: redis-exporter: enabled: true # Change this value to match your Redis instance. - redisAddress: "langsmith-redis.langsmith.svc.cluster.local:6379" \ No newline at end of file + redisAddress: "langsmith-redis.langsmith.svc.cluster.local:6379" diff --git a/charts/langsmith-observability/templates/_helpers.tpl b/charts/langsmith-observability/templates/_helpers.tpl index f4bcf1fd..b11bda22 100644 --- a/charts/langsmith-observability/templates/_helpers.tpl +++ b/charts/langsmith-observability/templates/_helpers.tpl @@ -64,4 +64,4 @@ OTEL Sidecar Collector Resource Name {{- else -}} {{- printf "%s-%s" (include "langsmith-observability.name" .) "collector-sidecar" | trunc 63 | trimSuffix "-" -}} {{- end -}} -{{- end -}} \ No newline at end of file +{{- end -}} diff --git a/charts/langsmith-observability/templates/mimir/config-map.yaml b/charts/langsmith-observability/templates/mimir/config-map.yaml index 6128cad3..2bbfc032 100644 --- a/charts/langsmith-observability/templates/mimir/config-map.yaml +++ b/charts/langsmith-observability/templates/mimir/config-map.yaml @@ -47,4 +47,4 @@ data: store_gateway: sharding_ring: replication_factor: 1 -{{- end }} \ No newline at end of file +{{- end }} diff --git a/charts/langsmith-observability/templates/mimir/service.yaml b/charts/langsmith-observability/templates/mimir/service.yaml index a94f7029..25630665 100644 --- a/charts/langsmith-observability/templates/mimir/service.yaml +++ b/charts/langsmith-observability/templates/mimir/service.yaml @@ -14,4 +14,4 @@ spec: targetPort: {{ .Values.mimir.service.targetPort }} selector: app: {{ include "langsmith-mimir.name" . }} -{{- end }} \ No newline at end of file +{{- end }} diff --git a/charts/langsmith-observability/templates/mimir/stateful-set.yaml b/charts/langsmith-observability/templates/mimir/stateful-set.yaml index 834ed4e7..a4545e3a 100644 --- a/charts/langsmith-observability/templates/mimir/stateful-set.yaml +++ b/charts/langsmith-observability/templates/mimir/stateful-set.yaml @@ -109,4 +109,4 @@ spec: storageClassName: {{ .Values.mimir.persistence.storageClass }} {{- end }} {{- end }} -{{- end }} \ No newline at end of file +{{- end }} diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml index d3510f69..91a71483 100644 --- a/charts/langsmith-observability/templates/otel/gateway.yaml +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -106,4 +106,4 @@ spec: processors: [batch, memory_limiter] exporters: [otlphttp/traces] {{ end }} -{{- end }} \ No newline at end of file +{{- end }} diff --git a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml index 69649d74..ac6b63d3 100644 --- a/charts/langsmith-observability/templates/otel/logs-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/logs-sidecar.yaml @@ -10,7 +10,6 @@ spec: config: receivers: filelog: - # TODO: ignore all logs from the collectors, check once deployed. exclude: - '**/otc-container/*.log' include: @@ -67,4 +66,4 @@ spec: - name: varlogpods mountPath: /var/log/pods readOnly: true -{{- end }} \ No newline at end of file +{{- end }} diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml index 149652df..8b99f4ba 100644 --- a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -46,4 +46,4 @@ subjects: - kind: ServiceAccount name: {{ include "langsmith-gateway-collector.name" . }}-collector namespace: {{ .Release.Namespace }} -{{- end }} \ No newline at end of file +{{- end }} diff --git a/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml index 9f030a30..e5720597 100644 --- a/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-sidecar.yaml @@ -25,4 +25,4 @@ subjects: name: {{ . }} namespace: {{ $namespace }} {{- end }} -{{- end }} \ No newline at end of file +{{- end }} diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index 99401b34..7e57a9f4 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -331,4 +331,4 @@ tempo: storageClassName: "" accessModes: - ReadWriteOnce - size: 10Gi \ No newline at end of file + size: 10Gi diff --git a/charts/langsmith/examples/tracing_config.yaml b/charts/langsmith/examples/tracing_config.yaml index 9ea40f85..7367e025 100644 --- a/charts/langsmith/examples/tracing_config.yaml +++ b/charts/langsmith/examples/tracing_config.yaml @@ -12,4 +12,4 @@ config: observability: tracing: enabled: true - endpoint: "http://${YOUR_OTEL_GATEWAY_ENDPOINT}/v1/traces" # Replace this with the endpoint of your trace collector. \ No newline at end of file + endpoint: "http://${YOUR_OTEL_GATEWAY_ENDPOINT}/v1/traces" # Replace this with the endpoint of your trace collector.

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 z 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 diff --git a/charts/langsmith-observability/examples/e2e-stack-minio.yaml b/charts/langsmith-observability/examples/e2e-stack-minio.yaml deleted file mode 100644 index 163e61e9..00000000 --- a/charts/langsmith-observability/examples/e2e-stack-minio.yaml +++ /dev/null @@ -1,91 +0,0 @@ -# Use this configuration to deploy the full LangSmith Observability stack with in-cluster storage. -# You can disable parts as you see fit, such as exporters, or logs/metrics/traces. -# NOTE: This configuration is not recommended for production environments. - -langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. -langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. - -# ======================== Metrics Exporters ======================== -kubestatemetrics: - enabled: true - # Change this value to match your LangSmith namespace. - namespaces: "langsmith" - -postgresexporter: - enabled: true - config: - # Change these values to match your Postgres instance. - datasource: - host: langsmith-postgres.langsmith.svc.cluster.local - user: postgres - password: postgres - database: postgres - port: "5432" - -nginxexporter: - enabled: true - # Change this value to match your LangSmith frontend service. - nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" - -redisexporter: - enabled: true - # Change this value to match your Redis instance. - redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 - -# ======================== OTEL Collector ======================== -otelCollector: - logs: - enabled: true - metrics: - enabled: true - traces: - enabled: true - -# ======================== Minio ======================== -minio: - enabled: true - persistence: - enabled: true - size: 10Gi - auth: - rootUser: "admin" # This value is used to log into the Minio console. - rootPassword: "admin_password" # This value is used to log into the Minio console. - -# ======================== LGTM Stack ======================== - -# Telemetry visualization tool -grafana: - enabled: true - -# Log storage + retrieval -loki: - enabled: true - loki: - storage: - s3: - endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace for the Minio instance. - secretAccessKey: admin_password # This must match the rootPassword in the minio chart - accessKeyId: admin # This must match the rootUser in the minio chart - -# Metric storage + retrieval -mimir: - enabled: true - mimir: - structuredConfig: - common: - storage: - s3: - endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace for the Minio instance. - secret_access_key: admin_password # This must match the rootPassword in the minio chart - access_key_id: admin # This must match the rootUser in the minio chart - -# Trace storage + retrieval -tempo: - enabled: true - storage: - trace: - backend: s3 - s3: - endpoint: "langsmith-observability-minio.langsmith-observability.svc.cluster.local:9000" # Modify to match the correct release and namespace for the Minio instance. - access_key: admin # This must match the rootPassword in the minio chart - secret_key: admin_password # This must match the rootUser in the minio chart \ No newline at end of file diff --git a/charts/langsmith-observability/examples/e2e-stack-s3.yaml b/charts/langsmith-observability/examples/e2e-stack-s3.yaml deleted file mode 100644 index 567caa96..00000000 --- a/charts/langsmith-observability/examples/e2e-stack-s3.yaml +++ /dev/null @@ -1,112 +0,0 @@ -# Use this configuration to deploy the full LangSmith observability stack with in-cluster storage. -# You can disable parts as you see fit, such as exporters, or logs/metrics/traces. -# NOTE: This configuration is not recommended for production environments. - -langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. -langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. - -# ======================== Metrics Exporters ======================== -kubestatemetrics: - enabled: true - # Change this value to match your LangSmith namespace. - namespaces: "langsmith" - -postgresexporter: - enabled: true - config: - # Change these values to match your Postgres instance. - datasource: - host: langsmith-postgres.langsmith.svc.cluster.local - user: postgres - password: postgres - database: postgres - port: "5432" - -nginxexporter: - enabled: true - # Change this value to match your LangSmith frontend service. - nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" - -redisexporter: - enabled: true - # Change this value to match your Redis instance. - redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 - -# ======================== OTEL Collector ======================== -otelCollector: - logs: - enabled: true - metrics: - enabled: true - traces: - enabled: true - -# ======================== LGTM Stack ======================== -# Telemetry visualization tool -grafana: - enabled: true - -# Logging storage + retrieval -loki: - enabled: true - loki: - storage: - type: s3 - # Modify these values do match your S3 bucket. - bucketNames: - chunks: langsmith-lgtm-stack - ruler: langsmith-lgtm-stack - s3: - endpoint: s3.${REGION}.amazonaws.com # Change this value to match your S3 endpoint. - region: ${REGION} # Change this value to match your S3 region. - secretAccessKey: ${SECRET_ACCESS_KEY} # Change this value to match your S3 secret key. - accessKeyId: ${ACCESS_KEY_ID} # Change this value to match your S3 access key. - insecure: false - s3ForcePathStyle: false - - storage_config: - object_prefix: loki - aws: - region: ${REGION} - bucketnames: ${BUCKET_NAME} - s3forcepathstyle: false - -# Metrics storage + retrieval -mimir: - enabled: true - mimir: - structuredConfig: - common: - # Modify these values do match your S3 bucket. - storage: - backend: s3 - s3: - endpoint: "s3.${REGION}.amazonaws.com" # Change this value to match your S3 endpoint. - bucket_name: ${BUCKET_NAME} # Change this value to match your S3 bucket. - region: ${REGION} # Change this value to match your S3 region. - secret_access_key: ${SECRET_ACCESS_KEY} # Change this value to match your S3 secret key. - access_key_id: ${ACCESS_KEY_ID} # Change this value to match your S3 access key. - insecure: false - - blocks_storage: - storage_prefix: mimirBlocks - - alertmanager_storage: - storage_prefix: mimirAlertmanager - - ruler_storage: - storage_prefix: mimirRuler - -# Traces storage + retrieval -tempo: - enabled: true - storage: - trace: - backend: s3 - s3: - access_key: ${ACCESS_KEY_ID} # Change this value to match your S3 access key. - secret_key: ${SECRET_ACCESS_KEY} # Change this value to match your S3 secret key. - bucket: ${BUCKET_NAME} # Change this value to match your S3 bucket. - endpoint: s3.${REGION}.amazonaws.com # Change this value to match your S3 endpoint. - insecure: false - prefix: tempo # Prefix in the s3 bucket to write data to. \ No newline at end of file diff --git a/charts/langsmith-observability/examples/e2e-stack.yaml b/charts/langsmith-observability/examples/e2e-stack.yaml new file mode 100644 index 00000000..cdaecb39 --- /dev/null +++ b/charts/langsmith-observability/examples/e2e-stack.yaml @@ -0,0 +1,60 @@ +# Use this configuration to deploy the full LangSmith observability stack with storage on the filesystem. +# This should not be used as a production observability system, but rather to gain quick insights into your LangSmith deployment. +# You can disable parts as you see fit, such as exporters, or logs/metrics/traces. +# NOTE: This configuration is not recommended for production environments. + +langsmithNamespace: "langsmith" # Change this value to match your LangSmith namespace. +langSmithReleaseName: "langsmith" # Change this value to match your LangSmith release name. + +# ======================== Metrics Exporters ======================== +kubestatemetrics: + enabled: true + # Change this value to match your LangSmith namespace. + namespaces: "langsmith" + +postgresexporter: + enabled: true + config: + # Change these values to match your Postgres instance. + datasource: + host: langsmith-postgres.langsmith.svc.cluster.local + user: postgres + password: postgres + database: postgres + port: "5432" + +nginxexporter: + enabled: true + # Change this value to match your LangSmith frontend service. + nginxServer: "http://langsmith-frontend.langsmith.svc.cluster.local:80/nginx_status" + +redisexporter: + enabled: true + # Change this value to match your Redis instance. + redisAddress: langsmith-redis.langsmith.svc.cluster.local:6379 + +# ======================== OTEL Collector ======================== +otelCollector: + logs: + enabled: true + metrics: + enabled: true + traces: + enabled: true + +# ======================== LGTM Stack ======================== +# Telemetry visualization tool +grafana: + enabled: true + +# Logging storage + retrieval +loki: + enabled: true + +# Metrics storage + retrieval +mimir: + enabled: true + +# Traces storage + retrieval +tempo: + enabled: true \ No newline at end of file diff --git a/charts/langsmith-observability/templates/_helpers.tpl b/charts/langsmith-observability/templates/_helpers.tpl new file mode 100644 index 00000000..c82ac85a --- /dev/null +++ b/charts/langsmith-observability/templates/_helpers.tpl @@ -0,0 +1,38 @@ + +{{/* +Expand the name of the chart. +*/}} +{{- define "langsmith-observability.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "langsmith-observability.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "langsmith-observability.labels" -}} +{{- if .Values.commonLabels }} +{{ toYaml .Values.commonLabels }} +{{- end }} +helm.sh/chart: {{ include "langsmith-observability.chart" . }} +{{ include "langsmith-observability.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "langsmith-observability.selectorLabels" -}} +app.kubernetes.io/name: {{ include "langsmith-observability.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} diff --git a/charts/langsmith-observability/templates/mimir/config-map.yaml b/charts/langsmith-observability/templates/mimir/config-map.yaml new file mode 100644 index 00000000..9d35c3b4 --- /dev/null +++ b/charts/langsmith-observability/templates/mimir/config-map.yaml @@ -0,0 +1,50 @@ +{{- if .Values.mimir.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "langsmith-observability.name" . }}-mimir +data: + mimir.yaml: | + multitenancy_enabled: false + + blocks_storage: + backend: filesystem + bucket_store: + sync_dir: /tmp/mimir/tsdb-sync + filesystem: + dir: /tmp/mimir/data/tsdb + tsdb: + dir: /tmp/mimir/tsdb + + compactor: + data_dir: /tmp/mimir/compactor + sharding_ring: + kvstore: + store: memberlist + + distributor: + ring: + instance_addr: 127.0.0.1 + kvstore: + store: memberlist + + ingester: + ring: + instance_addr: 127.0.0.1 + kvstore: + store: memberlist + replication_factor: 1 + + ruler_storage: + backend: filesystem + filesystem: + dir: /tmp/mimir/rules + + server: + http_listen_port: 9009 + log_level: info + + store_gateway: + sharding_ring: + replication_factor: 1 +{{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/mimir/service.yaml b/charts/langsmith-observability/templates/mimir/service.yaml new file mode 100644 index 00000000..e3c910f7 --- /dev/null +++ b/charts/langsmith-observability/templates/mimir/service.yaml @@ -0,0 +1,17 @@ +{{- if .Values.mimir.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }}-mimir + labels: + {{- include "langsmith-observability.labels" . | nindent 4 }} +spec: + type: ClusterIP + ports: + - name: http + protocol: TCP + port: {{ .Values.mimir.service.port }} + targetPort: {{ .Values.mimir.service.targetPort }} + selector: + app: {{ .Release.Name }}-mimir +{{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/mimir/stateful-set.yaml b/charts/langsmith-observability/templates/mimir/stateful-set.yaml new file mode 100644 index 00000000..574007a8 --- /dev/null +++ b/charts/langsmith-observability/templates/mimir/stateful-set.yaml @@ -0,0 +1,107 @@ +{{- if .Values.mimir.enabled }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Release.Name }}-mimir + namespace: {{ .Release.Namespace }} + labels: + {{- include "langsmith-observability.labels" . | nindent 4 }} + {{- with .Values.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.mimir.replicas }} + selector: + matchLabels: + app: {{ .Release.Name }}-mimir + serviceName: {{ include "langsmith-observability.name" . }}-mimir-headless + template: + metadata: + labels: + {{- include "langsmith-observability.labels" . | nindent 8 }} + app: {{ .Release.Name }}-mimir + annotations: + checksum/config: {{ include (print $.Template.BasePath "/mimir/config-map.yaml") . | sha256sum }} + spec: + containers: + - name: mimir + image: {{ .Values.mimir.image.registry }}/{{ .Values.mimir.image.repository }}{{ if .Values.mimir.image.tag }}:{{ .Values.mimir.image.tag }}{{ end }} + imagePullPolicy: {{ .Values.mimir.image.pullPolicy }} + args: + - -config.file=/etc/mimir/mimir.yaml + ports: + - name: http + containerPort: {{ .Values.mimir.service.port }} + protocol: TCP + {{- with .Values.mimir.livenessProbe }} + livenessProbe: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.mimir.readinessProbe }} + readinessProbe: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.mimir.securityContext }} + securityContext: + {{- toYaml . | nindent 10 }} + {{- end }} + {{- with .Values.mimir.envFrom }} + envFrom: + {{- toYaml . | nindent 10 }} + {{- end }} + volumeMounts: + {{- if .Values.mimir.extraVolumeMounts -}} + {{ toYaml .Values.mimir.extraVolumeMounts | nindent 8 }} + {{- end }} + - mountPath: /etc/mimir + name: mimir-conf + - mountPath: /tmp/mimir + name: storage + {{- with .Values.mimir.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.mimir.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.mimir.securityContext }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.mimir.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + volumes: + {{- if .Values.mimir.extraVolumes -}} + {{ toYaml .Values.mimir.extraVolumes | nindent 12 }} + {{- end }} + - name: mimir-conf + configMap: + name: {{ include "langsmith-observability.name" . }}-mimir + items: + - key: "mimir.yaml" + path: "mimir.yaml" + {{- if not .Values.mimir.persistence.enabled }} + - name: storage + emptyDir: { } + {{- end }} + updateStrategy: + {{- toYaml .Values.mimir.updateStrategy | nindent 4 }} + {{- if .Values.mimir.persistence.enabled }} + volumeClaimTemplates: + - metadata: + name: storage + annotations: {{- toYaml .Values.mimir.persistence.annotations | nindent 10 }} + spec: + accessModes: {{- toYaml .Values.mimir.persistence.accessModes | nindent 10 }} + resources: + requests: + storage: {{ .Values.mimir.persistence.size | quote }} + {{- if .Values.mimir.persistence.storageClassName }} + storageClassName: {{ .Values.mimir.persistence.storageClassName }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/templates/otel/gateway.yaml b/charts/langsmith-observability/templates/otel/gateway.yaml index 20de9d29..87b1819d 100644 --- a/charts/langsmith-observability/templates/otel/gateway.yaml +++ b/charts/langsmith-observability/templates/otel/gateway.yaml @@ -84,11 +84,11 @@ spec: exporters: {{ if .Values.otelCollector.metrics.enabled }} otlphttp/metrics: - endpoint: http://{{ .Release.Name }}-mimir-nginx.{{ .Release.Namespace }}.svc.cluster.local:80/otlp + endpoint: http://{{ .Release.Name }}-mimir.{{ .Release.Namespace }}.svc.cluster.local:9009/otlp {{ end }} {{ if .Values.otelCollector.traces.enabled }} otlphttp/traces: - endpoint: http://{{ .Release.Name }}-tempo-distributor-discovery.{{ .Release.Namespace }}.svc.cluster.local:4318 + endpoint: http://{{ .Release.Name }}-tempo.{{ .Release.Namespace }}.svc.cluster.local:4318 {{ end }} service: diff --git a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml index e47da3a8..ab30d007 100644 --- a/charts/langsmith-observability/templates/otel/rbac-gateway.yaml +++ b/charts/langsmith-observability/templates/otel/rbac-gateway.yaml @@ -30,13 +30,13 @@ roleRef: namespace: {{ .Release.Namespace }} subjects: - kind: ServiceAccount - name: langsmith-collector-gateway + name: langsmith-collector-gateway-collector namespace: {{ .Release.Namespace }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding # RolBinding for the observability namespace metadata: - name: get-pod-metrics-binding-langsmith-observability + name: get-pod-metrics-binding-langsmith namespace: {{ .Release.Namespace }} roleRef: kind: Role @@ -44,6 +44,6 @@ roleRef: namespace: {{ .Values.langsmithNamespace }} subjects: - kind: ServiceAccount - name: langsmith-collector-gateway + name: langsmith-collector-gateway-collector namespace: {{ .Release.Namespace }} {{- end }} \ No newline at end of file diff --git a/charts/langsmith-observability/values.yaml b/charts/langsmith-observability/values.yaml index 6b88d7b2..fab127c2 100644 --- a/charts/langsmith-observability/values.yaml +++ b/charts/langsmith-observability/values.yaml @@ -4,6 +4,8 @@ langsmithNamespace: "langsmith" # The release name of the langsmith release. langSmithReleaseName: "langsmith" +nameOverride: "" + # ======================== Grafana ======================== # Values for Grafana: https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml @@ -16,17 +18,17 @@ grafana: - name: Loki uid: loki type: loki - url: http://{{ .Release.Name }}-loki-gateway + url: http://{{ .Release.Name }}-loki-gateway:80 isDefault: false - name: Mimir uid: prom type: prometheus - url: http://{{ .Release.Name }}-mimir-nginx/prometheus + url: http://{{ .Release.Name }}-mimir:9009/prometheus isDefault: true - name: Tempo uid: tempo type: tempo - url: http://{{ .Release.Name }}-tempo-query-frontend-discovery:3200 + url: http://{{ .Release.Name }}-tempo:3200 isDefault: false jsonData: tracesToLogsV2: @@ -71,135 +73,121 @@ kubestatemetrics: # ======================== Loki ======================== -# Values for Loki: https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml +# Values for Lokig Single Binary: https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml#L1364 loki: enabled: false - deploymentMode: Distributed + deploymentMode: SingleBinary + singleBinary: + replicas: 1 # If you use more than 1 replica, you need to use object storage (minio or s3/gcs...) + persistence: + enabled: true + size: 10Gi + storageClass: null loki: - auth_enabled: false # This just drops tenant based authentication header, and all logs are under tenant "fake" + auth_enabled: false + commonConfig: + replication_factor: 1 + storage: + type: filesystem + filesystem: + chunks_directory: /var/loki/chunks + rules_directory: /var/loki/rules + admin_api_directory: /var/loki/admin schemaConfig: configs: - from: "2024-04-01" store: tsdb - object_store: s3 + object_store: filesystem schema: v13 index: prefix: loki_index_ period: 24h - - storage: - type: s3 - bucketNames: - chunks: langsmith-lgtm-stack - ruler: langsmith-lgtm-stack - s3: - endpoint: "{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000" - secretAccessKey: admin_password - accessKeyId: admin - insecure: true - s3ForcePathStyle: true # Required true for minio - - storage_config: - object_prefix: loki - aws: - region: us-west-2 - bucketnames: langsmith-lgtm-stack - s3forcepathstyle: true # Required true for minio - - ingester: - chunk_encoding: snappy - querier: - # Default is 4, if you have enough memory and CPU you can increase, reduce if OOMing - max_concurrent: 4 + pattern_ingester: + enabled: true + limits_config: + allow_structured_metadata: true + volume_enabled: true + ruler: + enable_api: true - lokiCanary: # Disable as it runs as a daemonset. This is only used to periodically test that Loki is working. Log volume can also tell. + # Canary is testing containers, so disable. + lokiCanary: enabled: false test: enabled: false + # Disable minio since we use filesystem. + minio: + enabled: false + + # Zero out replica counts of other deployment modes. + backend: + replicas: 0 + read: + replicas: 0 + write: + replicas: 0 + ingester: - replicas: 3 + replicas: 0 querier: - replicas: 3 - maxUnavailable: 2 + replicas: 0 queryFrontend: - replicas: 2 - maxUnavailable: 1 + replicas: 0 queryScheduler: - replicas: 2 + replicas: 0 distributor: - replicas: 3 - maxUnavailable: 2 + replicas: 0 compactor: - replicas: 1 + replicas: 0 indexGateway: - replicas: 2 - maxUnavailable: 1 - - # optional experimental components - bloomPlanner: replicas: 0 - bloomBuilder: + bloomCompactor: replicas: 0 bloomGateway: replicas: 0 - # Zero out replica counts of other deployment modes - backend: - replicas: 0 - read: - replicas: 0 - write: - replicas: 0 - - singleBinary: - replicas: 0 - # ======================== Mimir ======================== -# Values for Mimir: https://github.com/grafana/mimir/blob/main/operations/helm/charts/mimir-distributed/values.yaml mimir: enabled: false - minio: - enabled: false - mimir: - structuredConfig: - common: - storage: - backend: s3 - s3: - endpoint: "{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000" - bucket_name: langsmith-lgtm-stack - secret_access_key: admin_password - access_key_id: admin - insecure: true - - blocks_storage: - storage_prefix: mimirBlocks - - alertmanager_storage: - storage_prefix: mimirAlertmanager - - ruler_storage: - storage_prefix: mimirRuler - -# ======================== Minio ======================== - -# Values for Minio: https://github.com/bitnami/charts/blob/main/bitnami/minio/values.yaml -minio: - enabled: false - mode: standalone - replicas: 1 + extraEnv: [] + replicas: 1 # Must be 1 to use filesystem. + image: + registry: docker.io + repository: grafana/mimir + pullPolicy: IfNotPresent + tag: null persistence: enabled: true + storageClass: + annotations: {} + accessModes: + - ReadWriteOnce size: 10Gi + selector: {} + updateStrategy: + type: RollingUpdate + service: + type: ClusterIP + port: 9009 + targetPort: http readinessProbe: - enabled: false - auth: - rootUser: "admin" - rootPassword: "admin_password" - defaultBuckets: "langsmith-lgtm-stack" - + httpGet: + path: /ready + port: http + initialDelaySeconds: 20 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 3 + livenessProbe: + httpGet: + path: /ready + port: http + initialDelaySeconds: 20 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 3 # ======================== Nginx Exporter ======================== @@ -268,44 +256,20 @@ redisexporter: # ======================== Tempo ======================== -# Values for Tempo: https://github.com/grafana/helm-charts/blob/main/charts/tempo-distributed/values.yaml +# Values for Tempo: https://github.com/grafana/helm-charts/blob/main/charts/tempo/values.yaml tempo: enabled: false - storage: - trace: - backend: s3 - s3: - access_key: admin - secret_key: admin_password - bucket: langsmith-lgtm-stack - endpoint: "{{ .Release.Name }}-minio.{{ .Release.Namespace }}.svc.cluster.local:9000" - insecure: true - prefix: tempo - - metricsGenerator: + tempo: + metricsGenerator: + enabled: true + reportingEnabled: false + overrides: + defaults: + metrics_generator: + processors: [service-graphs, span-metrics, local-blocks] + persistence: enabled: true - replicas: 2 - config: - processor: - local_blocks: - filter_server_spans: false - flush_to_storage: true - storage: - path: /var/tempo/generator/wal - traces_storage: - path: /var/tempo/generator/traces - remoteWrite: - enabled: false - - overrides: - defaults: - metrics_generator: - processors: [service-graphs, span-metrics, local-blocks] - - # Specifies which trace protocols to accept by the gateway. - traces: - otlp: - grpc: - enabled: true - http: - enabled: true \ No newline at end of file + storageClassName: "" + accessModes: + - ReadWriteOnce + size: 10Gi \ No newline at end of file From 4091a010b2bc6b48a3933845eb2dadc4a03e279b Mon Sep 17 00:00:00 2001 From: romain-priour-lc Date: Wed, 25 Jun 2025 09:08:09 -0700 Subject: [PATCH 22/27] remove all tgz files in chrt --- .../charts/grafana-9.2.6.tgz | Bin 47972 -> 0 bytes .../charts/kube-state-metrics-5.37.0.tgz | Bin 15422 -> 0 bytes .../charts/loki-6.30.1.tgz | Bin 153235 -> 0 bytes .../charts/prometheus-nginx-exporter-1.6.0.tgz | Bin 58441 -> 0 bytes .../prometheus-postgres-exporter-6.10.2.tgz | Bin 9687 -> 0 bytes .../prometheus-redis-exporter-6.11.0.tgz | Bin 8913 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 charts/langsmith-observability/charts/grafana-9.2.6.tgz delete mode 100644 charts/langsmith-observability/charts/kube-state-metrics-5.37.0.tgz delete mode 100644 charts/langsmith-observability/charts/loki-6.30.1.tgz delete mode 100644 charts/langsmith-observability/charts/prometheus-nginx-exporter-1.6.0.tgz delete mode 100644 charts/langsmith-observability/charts/prometheus-postgres-exporter-6.10.2.tgz delete mode 100644 charts/langsmith-observability/charts/prometheus-redis-exporter-6.11.0.tgz diff --git a/charts/langsmith-observability/charts/grafana-9.2.6.tgz b/charts/langsmith-observability/charts/grafana-9.2.6.tgz deleted file mode 100644 index 602aaaee17b05677c54fc953bb5f5dbd630ba117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47972 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