openova/platform/opensearch
hatiyildiz ae540269c4 docs(pass-11): banners on 7 more components + MinIO ILM label disambiguation
7 more component READMEs got role-in-Catalyst banners:

Per-host-cluster infrastructure:
- minio (§3.5): S3 fast-tier; tiers cold to cloud archival.
- velero (§3.5): K8s backup to archival S3 (NOT MinIO — that's
  fast-tier; backups land in cloud archival).
- failover-controller (§3.6): lease-based split-brain protection
  layered on k8gb; pointers to SRE §2.4 (witness pattern) +
  SECURITY §5.2 (OpenBao DR promotion).
- trivy (§3.3): CI + registry + runtime scan chain.

Application Blueprints (NOT control plane):
- opensearch (§4.1): explicitly framed as Application Blueprint —
  installed when an Org wants SIEM / full-text search / log analytics.
- clickhouse (§4.1): used by bp-fabric and SIEM cold-storage tier.
- ferretdb (§4.1): replication piggybacks on underlying CNPG.

MinIO ILM disambiguation:
- The Mermaid diagram had `ILM[Lifecycle Manager]` — confusable with
  the rejected Catalyst sub-product (per banned-terms list).
  Relabeled to `ILM[Information Lifecycle Manager - MinIO ILM]` to
  make clear it's MinIO's own feature, not the deprecated Catalyst
  Lifecycle Manager noun.

VALIDATION-LOG: Pass 11 entry added.

Refs #37
2026-04-27 21:45:28 +02:00
..
README.md docs(pass-11): banners on 7 more components + MinIO ILM label disambiguation 2026-04-27 21:45:28 +02:00

OpenSearch

Search engine, analytics, and hot SIEM backend. Application Blueprint (see docs/PLATFORM-TECH-STACK.md §4.1) — installed by Organizations that want SIEM, full-text search, or log analytics. Not a Catalyst control-plane component.

Status: Accepted | Updated: 2026-04-27


Overview

OpenSearch is an open-source search and analytics engine forked from Elasticsearch 7.10.2 after Elastic changed its license from Apache 2.0 to the Business Source License (BSL). Licensed under the Apache License 2.0, OpenSearch is maintained by AWS and a growing community, providing full-text search, log analytics, and security analytics (SIEM) capabilities without licensing restrictions.

In the OpenOva platform, OpenSearch serves two distinct roles. First, it provides full-text search capabilities for applications that need search-as-a-service (product search, document indexing, autocomplete). Second, and critically, it serves as the SIEM backend for runtime security events collected by Falco. OpenSearch Dashboards provides the visualization and alerting layer for both use cases.

OpenSearch is NOT a replacement for Loki in the OpenOva observability stack. Loki handles operational log aggregation from all platform components with label-based indexing optimized for cost-efficient storage. OpenSearch handles application-level search and security event correlation (SIEM) where full-text indexing and complex query capabilities are required.


Architecture

Search and SIEM

flowchart TB
    subgraph Sources["Data Sources"]
        Falco[Falco Runtime Security]
        Apps[Application Data]
        Audit[K8s Audit Logs]
    end

    subgraph OpenSearch["OpenSearch Cluster"]
        Master1[Master Node 1]
        Master2[Master Node 2]
        Master3[Master Node 3]
        Data1[Data Node 1]
        Data2[Data Node 2]
        Data3[Data Node 3]
        Ingest[Ingest Node]
    end

    subgraph Visualization
        Dashboards[OpenSearch Dashboards]
        Alerting[Alerting Plugin]
    end

    Falco -->|"Falcosidekick"| Ingest
    Apps -->|"Index API"| Ingest
    Audit -->|"Filebeat"| Ingest
    Ingest --> Data1
    Ingest --> Data2
    Ingest --> Data3
    Data1 --> Dashboards
    Dashboards --> Alerting

SIEM Pipeline

flowchart LR
    subgraph Detection["Runtime Detection"]
        Falco[Falco eBPF]
    end

    subgraph Routing["Event Routing"]
        Sidekick[Falcosidekick]
    end

    subgraph Storage["SIEM Storage"]
        OS[OpenSearch]
    end

    subgraph Analysis["Security Analysis"]
        OSD[OpenSearch Dashboards]
        SIEM[Security Analytics Plugin]
        Alerts[Alerting + Notifications]
    end

    Falco --> Sidekick
    Sidekick --> OS
    OS --> OSD
    OS --> SIEM
    SIEM --> Alerts

Why OpenSearch?

Factor OpenSearch Elasticsearch Loki
License Apache 2.0 BSL (proprietary) AGPL 3.0
Full-text search Yes Yes No (label-based)
SIEM capabilities Security Analytics plugin X-Pack (paid) No
Application search Yes Yes No
Log aggregation Possible but expensive Possible but expensive Optimized for this
Storage cost Index-heavy Index-heavy Label-only (cheaper)
Dashboards OpenSearch Dashboards Kibana (BSL) Grafana
API compatibility ES 7.10 compatible Native LogQL

Decision: Use OpenSearch for full-text application search and SIEM. Use Loki for operational log aggregation. They serve complementary purposes.


Key Features

Feature Description
Full-Text Search BM25 scoring, analyzers, fuzzy matching, autocomplete
Security Analytics SIEM plugin with detection rules, correlation, and threat intelligence
Index State Management Automated index lifecycle (hot/warm/cold/delete)
Anomaly Detection ML-based anomaly detection on time-series data
Alerting Rule-based and anomaly-based alerting with webhook/email notifications
Snapshot/Restore Automated backups to MinIO/S3
Cross-Cluster Search Query across multiple OpenSearch clusters
Security Plugin Fine-grained RBAC, field-level and document-level security
OpenSearch Dashboards Visualization, dashboards, and notebook interface
Ingest Pipelines Transform and enrich data during ingestion

Configuration

OpenSearch Cluster (Helm)

apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: opensearch
  namespace: search
spec:
  interval: 10m
  chart:
    spec:
      chart: opensearch
      version: "2.x"
      sourceRef:
        kind: HelmRepository
        name: opensearch
        namespace: flux-system
  values:
    clusterName: opensearch
    masterService: opensearch
    nodeGroup: master

    replicas: 3
    minimumMasterNodes: 2

    roles:
      - master
      - ingest
      - data

    resources:
      requests:
        cpu: 1
        memory: 4Gi
      limits:
        cpu: 4
        memory: 8Gi

    persistence:
      enabled: true
      storageClass: <storage-class>
      size: 200Gi

    config:
      opensearch.yml: |
        cluster.name: opensearch
        network.host: 0.0.0.0
        plugins.security.ssl.transport.pemcert_filepath: certs/tls.crt
        plugins.security.ssl.transport.pemkey_filepath: certs/tls.key
        plugins.security.ssl.transport.pemtrustedcas_filepath: certs/ca.crt
        plugins.security.ssl.http.enabled: true
        plugins.security.ssl.http.pemcert_filepath: certs/tls.crt
        plugins.security.ssl.http.pemkey_filepath: certs/tls.key
        plugins.security.ssl.http.pemtrustedcas_filepath: certs/ca.crt        

    extraEnvs:
      - name: OPENSEARCH_INITIAL_ADMIN_PASSWORD
        valueFrom:
          secretKeyRef:
            name: opensearch-credentials
            key: admin-password

OpenSearch Dashboards

apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: opensearch-dashboards
  namespace: search
spec:
  interval: 10m
  chart:
    spec:
      chart: opensearch-dashboards
      version: "2.x"
      sourceRef:
        kind: HelmRepository
        name: opensearch
        namespace: flux-system
  values:
    opensearchHosts: "https://opensearch.search.svc:9200"
    replicaCount: 2
    resources:
      requests:
        cpu: 250m
        memory: 512Mi
      limits:
        cpu: 1
        memory: 1Gi

Index State Management (ISM) Policy

{
  "policy": {
    "policy_id": "siem-lifecycle",
    "description": "SIEM index lifecycle: hot -> warm -> cold -> delete",
    "default_state": "hot",
    "states": [
      {
        "name": "hot",
        "actions": [],
        "transitions": [
          { "state_name": "warm", "conditions": { "min_index_age": "7d" } }
        ]
      },
      {
        "name": "warm",
        "actions": [
          { "read_only": {} },
          { "force_merge": { "max_num_segments": 1 } }
        ],
        "transitions": [
          { "state_name": "cold", "conditions": { "min_index_age": "30d" } }
        ]
      },
      {
        "name": "cold",
        "actions": [
          { "snapshot": { "repository": "minio-backups", "snapshot": "siem-{{ctx.index}}" } }
        ],
        "transitions": [
          { "state_name": "delete", "conditions": { "min_index_age": "90d" } }
        ]
      },
      {
        "name": "delete",
        "actions": [{ "delete": {} }]
      }
    ],
    "ism_template": [
      { "index_patterns": ["falco-*", "security-*"], "priority": 100 }
    ]
  }
}

Falco Integration (SIEM)

Falco runtime security events are shipped to OpenSearch via Falcosidekick:

# Falcosidekick output configuration
outputs:
  opensearch:
    hostPort: https://opensearch.search.svc:9200
    index: falco
    type: _doc
    minimumPriority: notice
    username: falco-writer
    password:
      secretKeyRef:
        name: opensearch-falco-credentials
        key: password
    createIndexTemplate: true

SIEM Detection Rules

{
  "name": "Container Escape Attempt",
  "enabled": true,
  "schedule": { "period": { "interval": 1, "unit": "MINUTES" } },
  "inputs": [
    {
      "search": {
        "indices": ["falco-*"],
        "query": {
          "bool": {
            "must": [
              { "match": { "rule": "Container Escape" } },
              { "range": { "time": { "gte": "now-5m" } } }
            ]
          }
        }
      }
    }
  ],
  "triggers": [
    {
      "name": "critical-security-alert",
      "severity": "1",
      "condition": { "script": { "source": "ctx.results[0].hits.total.value > 0" } },
      "actions": [
        {
          "name": "notify-security-team",
          "destination_id": "slack-security-channel",
          "message_template": {
            "source": "Container escape attempt detected. {{ctx.results[0].hits.total.value}} events in the last 5 minutes."
          }
        }
      ]
    }
  ]
}

Monitoring

Metric Description
opensearch_cluster_health_status Cluster health (green/yellow/red)
opensearch_cluster_health_number_of_nodes Node count
opensearch_indices_indexing_index_total Total documents indexed
opensearch_indices_search_query_total Total search queries
opensearch_jvm_mem_heap_used_percent JVM heap usage
opensearch_indices_store_size_bytes Total index storage size

Consequences

Positive:

  • Apache 2.0 license with no proprietary feature gates
  • Comprehensive SIEM capabilities when paired with Falco
  • Full-text search for application use cases that Loki cannot serve
  • Built-in security plugin with fine-grained access control
  • Index lifecycle management automates data retention and archival

Negative:

  • JVM-based, requires significant memory for indexing and search
  • Full-text indexing is storage-intensive compared to label-based systems (Loki)
  • Requires careful capacity planning for shard count and node sizing
  • Two search/analytics systems to operate (OpenSearch + Loki) increases complexity
  • Security plugin configuration can be complex for multi-tenant setups

Part of OpenOva