diff --git a/charts/plane-enterprise/README.md b/charts/plane-enterprise/README.md index 1aecb6eb..c229bfa5 100644 --- a/charts/plane-enterprise/README.md +++ b/charts/plane-enterprise/README.md @@ -489,6 +489,23 @@ Note: When the email service is enabled, the cert-issuer will be automatically c | env.storageClass | <k8s-default-storage-class> | | Creating the persitant volumes for the stateful deployments needs the `storageClass` name. Set the correct value as per your kubernetes cluster configuration. | | env.secret_key | 60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5 | Yes | This must a random string which is used for hashing/encrypting the sensitive data within the application. Once set, changing this might impact the already hashed/encrypted data | +### Metrics and Telemetry Configuration + +| Setting | Default | Required | Description | +| ---------------------------------------- | :---------------------------------------------------: | :------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| metrics.enabled | true | No | Enable or disable metrics collection and telemetry. Set to `false` to completely disable all metrics functionality. | +| metrics.telemetry.http_endpoint | https://telemetry.plane.so/v1/metrics | No | Primary OTLP HTTP endpoint for metrics export. Must include the full path `/v1/metrics` for the OTLP exporter to work correctly. This is used for backward compatibility with v1 telemetry. | +| metrics.telemetry.http_v2_endpoint | https://v2.telemetry.plane.so/v1/metrics | No | V2 OTLP HTTP endpoint for enhanced metrics collection. Must include the full path `/v1/metrics`. The API service uses this endpoint to push instance and workspace-level metrics via the OpenTelemetry Protocol. | +| metrics.telemetry.push_interval_minutes | "" | No | Optional interval (in minutes) for pushing metrics. Leave empty for default behavior (every 6 hours). Set to a value like `1` or `5` for testing/development to push metrics more frequently. Only applicable when metrics.enabled is `true`. | +| metrics.telemetry.headers | {} | No | Optional custom headers to include with telemetry requests. Useful for authentication or routing purposes when using custom telemetry backends. | + +**Notes:** +- Metrics are collected by the API service and pushed to the configured OTLP endpoint using the OpenTelemetry Protocol over HTTP +- The endpoint URLs must include the full path `/v1/metrics` - the OTLP exporter will not automatically append this path +- Metrics include instance-level data (users, workspaces, projects, issues) and workspace-level data +- When `metrics.enabled=false`, no metrics collection or export will occur +- For self-hosted deployments pointing to your own telemetry infrastructure, update the endpoint URLs accordingly + ### Extra Environment Variables | Setting | Default | Required | Description | diff --git a/charts/plane-enterprise/templates/config-secrets/app-env.yaml b/charts/plane-enterprise/templates/config-secrets/app-env.yaml index 0d8d1137..7e23f379 100644 --- a/charts/plane-enterprise/templates/config-secrets/app-env.yaml +++ b/charts/plane-enterprise/templates/config-secrets/app-env.yaml @@ -78,4 +78,13 @@ data: CORS_ALLOWED_ORIGINS: "http://{{ .Values.license.licenseDomain }},https://{{ .Values.license.licenseDomain }},{{ .Values.env.cors_allowed_origins }}" {{- else}} CORS_ALLOWED_ORIGINS: "http://{{ .Values.license.licenseDomain }},https://{{ .Values.license.licenseDomain }}" + {{- end }} + + {{- if .Values.metrics.enabled }} + OTLP_ENDPOINT: {{ .Values.metrics.telemetry.http_endpoint | default "" | quote }} + OTLP_V2_ENDPOINT: {{ .Values.metrics.telemetry.http_v2_endpoint | default "" | quote }} + OTEL_EXPORTER_OTLP_PROTOCOL: "http/protobuf" + {{- if .Values.metrics.telemetry.push_interval_minutes }} + METRICS_PUSH_INTERVAL_MINUTES: {{ .Values.metrics.telemetry.push_interval_minutes | quote }} + {{- end }} {{- end }} \ No newline at end of file diff --git a/charts/plane-enterprise/templates/config-secrets/silo.yaml b/charts/plane-enterprise/templates/config-secrets/silo.yaml index 1f3bc132..a379608c 100644 --- a/charts/plane-enterprise/templates/config-secrets/silo.yaml +++ b/charts/plane-enterprise/templates/config-secrets/silo.yaml @@ -10,7 +10,7 @@ stringData: {{- if .Values.env.silo_envs.hmac_secret_key }} SILO_HMAC_SECRET_KEY: {{ .Values.env.silo_envs.hmac_secret_key | quote }} {{- else if (lookup "v1" "Secret" .Release.Namespace (printf "%s-silo-secrets" .Release.Name)) }} - SILO_HMAC_SECRET_KEY: {{ (lookup "v1" "Secret" .Release.Namespace (printf "%s-silo-secrets" .Release.Name)).data.SILO_HMAC_SECRET_KEY | default (randAlphaNum 32) | quote }} + SILO_HMAC_SECRET_KEY: {{ (lookup "v1" "Secret" .Release.Namespace (printf "%s-silo-secrets" .Release.Name)).data.SILO_HMAC_SECRET_KEY | b64dec | default (randAlphaNum 32) | quote }} {{- else }} SILO_HMAC_SECRET_KEY: {{ randAlphaNum 32 | quote }} {{- end }} diff --git a/charts/plane-enterprise/values.yaml b/charts/plane-enterprise/values.yaml index 217d2e5a..4879a8c8 100644 --- a/charts/plane-enterprise/values.yaml +++ b/charts/plane-enterprise/values.yaml @@ -396,3 +396,18 @@ extraEnv: [] # value: "http://proxy.example.com:8080" # - name: NO_PROXY # value: "localhost,127.0.0.1,.example.com" + +# Metrics collection configuration +metrics: + enabled: true + + # Telemetry server configuration + telemetry: + # Primary telemetry endpoint (OTLP HTTP) + # Note: Must include full path /v1/metrics for OTLP exporter + http_endpoint: "https://telemetry.plane.so/v1/metrics" + # V2 telemetry endpoint for enhanced metrics (OTLP HTTP) + # Note: Must include full path /v1/metrics for OTLP exporter + http_v2_endpoint: "https://v2.telemetry.plane.so/v1/metrics" + headers: {} + push_interval_minutes: "" # Optional interval for testing (e.g., "5")