diff --git a/observability-logs-openobserve/README.md b/observability-logs-openobserve/README.md index 1562e1c..fd8d904 100644 --- a/observability-logs-openobserve/README.md +++ b/observability-logs-openobserve/README.md @@ -4,7 +4,7 @@ | ------------- |-----------| | Code coverage | [![Codecov](https://codecov.io/gh/openchoreo/community-modules/branch/main/graph/badge.svg?component=observability_logs_openobserve)](https://codecov.io/gh/openchoreo/community-modules) | -This module collects container logs using Fluent Bit and stores them in OpenObserve. +This module collects container logs using Fluent Bit and stores them in [OpenObserve](https://openobserve.ai). ## Prerequisites @@ -20,10 +20,17 @@ Before installing, create Kubernetes Secrets with the OpenObserve admin credenti ```bash kubectl create secret generic openobserve-admin-credentials \ --namespace openchoreo-observability-plane \ - --from-literal=username='root@example.com' \ - --from-literal=password='YOUR_PASSWORD' + --from-literal=ZO_ROOT_USER_EMAIL='root@example.com' \ + --from-literal=ZO_ROOT_USER_PASSWORD='YOUR_PASSWORD' ``` +## OpenObserve deployment modes + +This chart includes two OpenObserve Helm chart dependencies: + +- **`openobserve-standalone`** — A single-node deployment that uses local disk storage. This is enabled by default and suitable for most use cases. +- **`openobserve`** — A distributed, high-availability (HA) deployment with separate components (router, ingester, querier, etc.) that requires object storage (e.g. S3, MinIO). This is disabled by default. + Install this module in your OpenChoreo cluster using: ```bash @@ -31,9 +38,23 @@ helm upgrade --install observability-logs-openobserve \ oci://ghcr.io/openchoreo/helm-charts/observability-logs-openobserve \ --create-namespace \ --namespace openchoreo-observability-plane \ - --version 0.3.10 + --version 0.4.0 +``` + +To switch to HA mode, disable the standalone chart and enable the distributed chart: + +```bash +helm upgrade --install observability-logs-openobserve \ + oci://ghcr.io/openchoreo/helm-charts/observability-logs-openobserve \ + --namespace openchoreo-observability-plane \ + --version 0.4.0 \ + --reuse-values \ + --set openobserve-standalone.enabled=false \ + --set openobserve.enabled=true ``` +Refer to the [openobserve Helm chart documentation](https://github.com/openobserve/openobserve-helm-chart/tree/main/charts/openobserve) to configure the distributed deployment. + ## Enable log collection ### Single-cluster topology @@ -45,7 +66,7 @@ to start collecting logs from the cluster and publish them to OpenObserve: helm upgrade observability-logs-openobserve \ oci://ghcr.io/openchoreo/helm-charts/observability-logs-openobserve \ --namespace openchoreo-observability-plane \ - --version 0.3.10 \ + --version 0.4.0 \ --reuse-values \ --set fluent-bit.enabled=true ``` @@ -60,9 +81,9 @@ helm upgrade --install observability-logs-openobserve \ oci://ghcr.io/openchoreo/helm-charts/observability-logs-openobserve \ --create-namespace \ --namespace openchoreo-observability-plane \ - --version 0.3.10 \ + --version 0.4.0 \ --set fluent-bit.enabled=true \ - --set openObserve.enabled=false \ + --set openobserve-standalone.enabled=false \ --set openObserveSetup.enabled=false \ --set adapter.enabled=false ``` diff --git a/observability-logs-openobserve/helm/Chart.lock b/observability-logs-openobserve/helm/Chart.lock index 15f2250..cb759be 100644 --- a/observability-logs-openobserve/helm/Chart.lock +++ b/observability-logs-openobserve/helm/Chart.lock @@ -2,5 +2,11 @@ dependencies: - name: fluent-bit repository: https://fluent.github.io/helm-charts version: 0.56.0 -digest: sha256:e120960dbb5fbcfb6bccdd7bb486bd94fd013387bfd4490fada383d43f492cf5 -generated: "2026-03-09T12:36:21.83531+05:30" +- name: openobserve-standalone + repository: https://charts.openobserve.ai + version: 0.60.3 +- name: openobserve + repository: https://charts.openobserve.ai + version: 0.60.3 +digest: sha256:cc9a336d17c32c1e3a31406ac107ff08c1b14898355b0efa7a333a8291978915 +generated: "2026-03-18T17:34:53.607968+05:30" diff --git a/observability-logs-openobserve/helm/Chart.yaml b/observability-logs-openobserve/helm/Chart.yaml index 1530db9..d1d3cf9 100644 --- a/observability-logs-openobserve/helm/Chart.yaml +++ b/observability-logs-openobserve/helm/Chart.yaml @@ -5,8 +5,8 @@ apiVersion: v2 name: observability-logs-openobserve description: A Helm chart for OpenChoreo Logs Module for OpenObserve type: application -version: 0.3.10 -appVersion: "0.3.10" +version: 0.4.0 +appVersion: "0.4.0" keywords: - openobserve - openchoreo @@ -19,3 +19,11 @@ dependencies: version: "0.56.0" repository: https://fluent.github.io/helm-charts condition: fluent-bit.enabled + - name: openobserve-standalone + version: "0.60.3" + repository: https://charts.openobserve.ai + condition: openobserve-standalone.enabled + - name: openobserve + version: "0.60.3" + repository: https://charts.openobserve.ai + condition: openobserve.enabled diff --git a/observability-logs-openobserve/helm/templates/adapter/deployment.yaml b/observability-logs-openobserve/helm/templates/adapter/deployment.yaml index 08c967d..a94c71d 100644 --- a/observability-logs-openobserve/helm/templates/adapter/deployment.yaml +++ b/observability-logs-openobserve/helm/templates/adapter/deployment.yaml @@ -39,12 +39,12 @@ spec: valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: username + key: ZO_ROOT_USER_EMAIL - name: OPENOBSERVE_PASSWORD valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: password + key: ZO_ROOT_USER_PASSWORD resources: limits: cpu: {{ .Values.adapter.resources.limits.cpu }} diff --git a/observability-logs-openobserve/helm/templates/fluent-bit/config.yaml b/observability-logs-openobserve/helm/templates/fluent-bit/config.yaml index 5375015..51df18e 100644 --- a/observability-logs-openobserve/helm/templates/fluent-bit/config.yaml +++ b/observability-logs-openobserve/helm/templates/fluent-bit/config.yaml @@ -53,7 +53,7 @@ data: Format json http_user ${OPENOBSERVE_USERNAME} http_passwd ${OPENOBSERVE_PASSWORD} - tls On + tls {{ index .Values "fluent-bit" "openObserveTls" }} parsers.conf: | [PARSER] diff --git a/observability-logs-openobserve/helm/templates/openobserve-setup/job.yaml b/observability-logs-openobserve/helm/templates/openobserve-setup/job.yaml index 338c3bf..3e29356 100644 --- a/observability-logs-openobserve/helm/templates/openobserve-setup/job.yaml +++ b/observability-logs-openobserve/helm/templates/openobserve-setup/job.yaml @@ -29,12 +29,12 @@ spec: valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: username + key: ZO_ROOT_USER_EMAIL - name: OPENOBSERVE_PASSWORD valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: password + key: ZO_ROOT_USER_PASSWORD - name: OPENOBSERVE_ORG value: {{ .Values.common.openObserveOrg | quote }} {{- end }} diff --git a/observability-logs-openobserve/helm/templates/openobserve/httproute.yaml b/observability-logs-openobserve/helm/templates/openobserve/httproute.yaml index d36a817..c13da71 100644 --- a/observability-logs-openobserve/helm/templates/openobserve/httproute.yaml +++ b/observability-logs-openobserve/helm/templates/openobserve/httproute.yaml @@ -1,7 +1,7 @@ # Copyright 2026 The OpenChoreo Authors # SPDX-License-Identifier: Apache-2.0 -{{- if .Values.openObserve.enabled }} +{{- if (index .Values "openobserve-standalone" "enabled") }} apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: @@ -11,7 +11,7 @@ spec: parentRefs: - name: gateway-default namespace: {{ .Release.Namespace }} - {{- with .Values.openObserve.httpRouteHostnames }} + {{- with (index .Values "openobserve-standalone" "httpRouteHostnames") }} hostnames: {{- range . }} - {{ . | quote }} diff --git a/observability-logs-openobserve/helm/templates/openobserve/service.yaml b/observability-logs-openobserve/helm/templates/openobserve/service.yaml deleted file mode 100644 index 0c581b1..0000000 --- a/observability-logs-openobserve/helm/templates/openobserve/service.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2026 The OpenChoreo Authors -# SPDX-License-Identifier: Apache-2.0 - -{{- if .Values.openObserve.enabled }} -apiVersion: v1 -kind: Service -metadata: - name: openobserve - namespace: {{ .Release.Namespace }} -spec: - type: {{ .Values.openObserve.service.type | default "ClusterIP" }} - selector: - app: openobserve - ports: - - name: http - port: 5080 - targetPort: 5080 -{{- end }} diff --git a/observability-logs-openobserve/helm/templates/openobserve/statefulset.yaml b/observability-logs-openobserve/helm/templates/openobserve/statefulset.yaml deleted file mode 100644 index bab6efe..0000000 --- a/observability-logs-openobserve/helm/templates/openobserve/statefulset.yaml +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright 2026 The OpenChoreo Authors -# SPDX-License-Identifier: Apache-2.0 - -{{- if .Values.openObserve.enabled }} -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: openobserve - namespace: {{ .Release.Namespace }} - labels: - name: openobserve -spec: - serviceName: openobserve - replicas: 1 - selector: - matchLabels: - name: openobserve - app: openobserve - template: - metadata: - labels: - name: openobserve - app: openobserve - spec: - securityContext: - fsGroup: 2000 - runAsUser: 10000 - runAsGroup: 3000 - runAsNonRoot: true - containers: - - name: openobserve - image: o2cr.ai/openobserve/openobserve:v0.40.4 - env: - - name: ZO_ROOT_USER_EMAIL - valueFrom: - secretKeyRef: - name: openobserve-admin-credentials - key: username - - name: ZO_ROOT_USER_PASSWORD - valueFrom: - secretKeyRef: - name: openobserve-admin-credentials - key: password - - name: ZO_DATA_DIR - value: /data - imagePullPolicy: Always - resources: - limits: - cpu: {{ .Values.openObserve.resources.limits.cpu }} - memory: {{ .Values.openObserve.resources.limits.memory }} - requests: - cpu: {{ .Values.openObserve.resources.requests.cpu }} - memory: {{ .Values.openObserve.resources.requests.memory }} - ports: - - containerPort: 5080 - name: http - volumeMounts: - - name: data - mountPath: /data - volumeClaimTemplates: - - metadata: - name: data - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: {{ .Values.openObserve.storage.size | quote }} -{{- end }} diff --git a/observability-logs-openobserve/helm/values.yaml b/observability-logs-openobserve/helm/values.yaml index eea78ee..903e0c1 100644 --- a/observability-logs-openobserve/helm/values.yaml +++ b/observability-logs-openobserve/helm/values.yaml @@ -18,12 +18,12 @@ fluent-bit: valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: username + key: ZO_ROOT_USER_EMAIL - name: OPENOBSERVE_PASSWORD valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: password + key: ZO_ROOT_USER_PASSWORD fullnameOverride: "fluent-bit" @@ -90,10 +90,19 @@ fluent-bit: # Values for fluent-bit config map openObserveHost: "openobserve" openObservePort: 5080 + openObserveTls: "Off" -openObserve: +openobserve-standalone: enabled: true - httpRouteHostnames: [] + fullnameOverride: "openobserve" + auth: + ZO_ROOT_USER_EMAIL: "" + ZO_ROOT_USER_PASSWORD: "" + existingRootUserSecret: + name: "openobserve-admin-credentials" + persistence: + enabled: true + size: 10Gi resources: limits: cpu: 500m @@ -101,10 +110,13 @@ openObserve: requests: cpu: 20m memory: 500Mi - service: - type: ClusterIP - storage: - size: 10Gi + + ## OpenChoreo specific values. These are not passed to the upstream chart + httpRouteHostnames: [] + +openobserve: + enabled: false + fullnameOverride: "openobserve" ## ----------------------------------------------------------- ## Values for OpenChoreo specific customizations and workloads diff --git a/observability-tracing-openobserve/README.md b/observability-tracing-openobserve/README.md index a745ee3..b79770f 100644 --- a/observability-tracing-openobserve/README.md +++ b/observability-tracing-openobserve/README.md @@ -4,7 +4,7 @@ | ------------- |-----------| | Code coverage | [![Codecov](https://codecov.io/gh/openchoreo/community-modules/branch/main/graph/badge.svg?component=observability_tracing_openobserve)](https://codecov.io/gh/openchoreo/community-modules) | -This module collects distributed traces using OpenTelemetry collector and stores them in OpenObserve. +This module collects distributed traces using OpenTelemetry collector and stores them in [OpenObserve](https://openobserve.ai). ## Prerequisites @@ -19,10 +19,17 @@ Before installing, create Kubernetes Secrets with the OpenObserve admin credenti ```bash kubectl create secret generic openobserve-admin-credentials \ --namespace openchoreo-observability-plane \ - --from-literal=username='root@example.com' \ - --from-literal=password='YOUR_PASSWORD' + --from-literal=ZO_ROOT_USER_EMAIL='root@example.com' \ + --from-literal=ZO_ROOT_USER_PASSWORD='YOUR_PASSWORD' ``` +## OpenObserve deployment modes + +This chart includes two OpenObserve Helm chart dependencies: + +- **`openobserve-standalone`** — A single-node deployment that uses local disk storage. This is enabled by default and suitable for most use cases. +- **`openobserve`** — A distributed, high-availability (HA) deployment with separate components (router, ingester, querier, etc.) that requires object storage (e.g. S3, MinIO). This is disabled by default. + Install this module in your OpenChoreo cluster using: ```bash @@ -30,9 +37,23 @@ helm upgrade --install observability-tracing-openobserve \ oci://ghcr.io/openchoreo/helm-charts/observability-tracing-openobserve \ --create-namespace \ --namespace openchoreo-observability-plane \ - --version 0.1.5 + --version 0.2.0 ``` +To switch to HA mode, disable the standalone chart and enable the distributed chart: + +```bash +helm upgrade --install observability-tracing-openobserve \ + oci://ghcr.io/openchoreo/helm-charts/observability-tracing-openobserve \ + --namespace openchoreo-observability-plane \ + --version 0.2.0 \ + --reuse-values \ + --set openobserve-standalone.enabled=false \ + --set openobserve.enabled=true +``` + +Refer to the [openobserve Helm chart documentation](https://github.com/openobserve/openobserve-helm-chart/tree/main/charts/openobserve) to configure the distributed deployment. + > **Note:** If OpenObserve is already installed by another module (e.g., `observability-logs-openobserve`), disable it to avoid conflicts: > > ```bash @@ -40,6 +61,6 @@ helm upgrade --install observability-tracing-openobserve \ > oci://ghcr.io/openchoreo/helm-charts/observability-tracing-openobserve \ > --create-namespace \ > --namespace openchoreo-observability-plane \ -> --version 0.1.5 \ -> --set openObserve.enabled=false +> --version 0.2.0 \ +> --set openobserve-standalone.enabled=false >``` diff --git a/observability-tracing-openobserve/helm/Chart.lock b/observability-tracing-openobserve/helm/Chart.lock index d4ff9ff..4dd07eb 100644 --- a/observability-tracing-openobserve/helm/Chart.lock +++ b/observability-tracing-openobserve/helm/Chart.lock @@ -2,5 +2,11 @@ dependencies: - name: opentelemetry-collector repository: https://open-telemetry.github.io/opentelemetry-helm-charts version: 0.146.1 -digest: sha256:5c2e1ccda7de58680e652026f89d9f8c004493920cef11720fd8b2da584195ff -generated: "2026-03-09T12:37:55.691904+05:30" +- name: openobserve-standalone + repository: https://charts.openobserve.ai + version: 0.60.3 +- name: openobserve + repository: https://charts.openobserve.ai + version: 0.60.3 +digest: sha256:cd1df75167cbc6225f3032dc0ecdf9a6bafe14f3d1ef530e16d49b2d11adcc2e +generated: "2026-03-18T18:00:14.02564+05:30" diff --git a/observability-tracing-openobserve/helm/Chart.yaml b/observability-tracing-openobserve/helm/Chart.yaml index f728b11..ac5835d 100644 --- a/observability-tracing-openobserve/helm/Chart.yaml +++ b/observability-tracing-openobserve/helm/Chart.yaml @@ -5,8 +5,8 @@ apiVersion: v2 name: observability-tracing-openobserve description: A Helm chart for OpenChoreo Tracing Module for OpenObserve type: application -version: 0.1.5 -appVersion: "0.1.5" +version: 0.2.0 +appVersion: "0.2.0" keywords: - openobserve - openchoreo @@ -19,3 +19,11 @@ dependencies: repository: https://open-telemetry.github.io/opentelemetry-helm-charts version: 0.146.1 condition: opentelemetry-collector.enabled + - name: openobserve-standalone + version: "0.60.3" + repository: https://charts.openobserve.ai + condition: openobserve-standalone.enabled + - name: openobserve + version: "0.60.3" + repository: https://charts.openobserve.ai + condition: openobserve.enabled diff --git a/observability-tracing-openobserve/helm/templates/adapter/deployment.yaml b/observability-tracing-openobserve/helm/templates/adapter/deployment.yaml index 984907f..0f697be 100644 --- a/observability-tracing-openobserve/helm/templates/adapter/deployment.yaml +++ b/observability-tracing-openobserve/helm/templates/adapter/deployment.yaml @@ -41,12 +41,12 @@ spec: valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: username + key: ZO_ROOT_USER_EMAIL - name: OPENOBSERVE_PASSWORD valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: password + key: ZO_ROOT_USER_PASSWORD resources: limits: cpu: {{ .Values.adapter.resources.limits.cpu }} diff --git a/observability-tracing-openobserve/helm/templates/openobserve/service.yaml b/observability-tracing-openobserve/helm/templates/openobserve/service.yaml deleted file mode 100644 index defddd7..0000000 --- a/observability-tracing-openobserve/helm/templates/openobserve/service.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2026 The OpenChoreo Authors -# SPDX-License-Identifier: Apache-2.0 - -{{- if .Values.openObserve.enabled }} -apiVersion: v1 -kind: Service -metadata: - name: openobserve - namespace: {{ .Release.Namespace }} -spec: - type: {{ .Values.openObserve.service.type | default "ClusterIP" }} - selector: - app: openobserve - ports: - - name: http - port: 5080 - targetPort: 5080 -{{- end }} diff --git a/observability-tracing-openobserve/helm/templates/openobserve/statefulset.yaml b/observability-tracing-openobserve/helm/templates/openobserve/statefulset.yaml deleted file mode 100644 index bab6efe..0000000 --- a/observability-tracing-openobserve/helm/templates/openobserve/statefulset.yaml +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright 2026 The OpenChoreo Authors -# SPDX-License-Identifier: Apache-2.0 - -{{- if .Values.openObserve.enabled }} -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: openobserve - namespace: {{ .Release.Namespace }} - labels: - name: openobserve -spec: - serviceName: openobserve - replicas: 1 - selector: - matchLabels: - name: openobserve - app: openobserve - template: - metadata: - labels: - name: openobserve - app: openobserve - spec: - securityContext: - fsGroup: 2000 - runAsUser: 10000 - runAsGroup: 3000 - runAsNonRoot: true - containers: - - name: openobserve - image: o2cr.ai/openobserve/openobserve:v0.40.4 - env: - - name: ZO_ROOT_USER_EMAIL - valueFrom: - secretKeyRef: - name: openobserve-admin-credentials - key: username - - name: ZO_ROOT_USER_PASSWORD - valueFrom: - secretKeyRef: - name: openobserve-admin-credentials - key: password - - name: ZO_DATA_DIR - value: /data - imagePullPolicy: Always - resources: - limits: - cpu: {{ .Values.openObserve.resources.limits.cpu }} - memory: {{ .Values.openObserve.resources.limits.memory }} - requests: - cpu: {{ .Values.openObserve.resources.requests.cpu }} - memory: {{ .Values.openObserve.resources.requests.memory }} - ports: - - containerPort: 5080 - name: http - volumeMounts: - - name: data - mountPath: /data - volumeClaimTemplates: - - metadata: - name: data - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: {{ .Values.openObserve.storage.size | quote }} -{{- end }} diff --git a/observability-tracing-openobserve/helm/values.yaml b/observability-tracing-openobserve/helm/values.yaml index 56028a7..db10b44 100644 --- a/observability-tracing-openobserve/helm/values.yaml +++ b/observability-tracing-openobserve/helm/values.yaml @@ -6,8 +6,17 @@ common: openObserveStream: "default" -openObserve: +openobserve-standalone: enabled: true + fullnameOverride: "openobserve" + auth: + ZO_ROOT_USER_EMAIL: "" + ZO_ROOT_USER_PASSWORD: "" + existingRootUserSecret: + name: "openobserve-admin-credentials" + persistence: + enabled: true + size: 10Gi resources: limits: cpu: 500m @@ -15,11 +24,10 @@ openObserve: requests: cpu: 20m memory: 500Mi - service: - type: ClusterIP - storage: - size: 10Gi +openobserve: + enabled: false + fullnameOverride: "openobserve" opentelemetry-collector: enabled: true @@ -43,12 +51,12 @@ opentelemetry-collector: valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: username + key: ZO_ROOT_USER_EMAIL - name: OPENOBSERVE_PASSWORD valueFrom: secretKeyRef: name: openobserve-admin-credentials - key: password + key: ZO_ROOT_USER_PASSWORD fullnameOverride: "opentelemetry-collector"