Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7aaafe7
docs: add the Elasticsearch upgrade guide for ACP 4.4
Sep 10, 2026
33947b7
docs: refine Elasticsearch upgrade uninstall steps
Sep 14, 2026
9c6e504
docs: align ES upgrade with legacy migration gates
Sep 14, 2026
373fece
docs: make the ES upgrade guide implementation-ready
Sep 14, 2026
c824377
docs: merge ES upgrade guide into upgrade index
Sep 14, 2026
13ff3a3
docs: clarify OpenSearch endpoints semantics
Sep 14, 2026
c43497b
docs: add ES target prerequisites and post-upgrade checks
Sep 14, 2026
575e2de
docs: record ES upgrade validation findings
Sep 14, 2026
7912800
docs: clarify target writes during ES migration
Sep 14, 2026
82052a1
Revert "docs: clarify target writes during ES migration"
Sep 14, 2026
9544ae2
docs: refine ES upgrade preparation, alignment, and acceptance
Sep 14, 2026
9f55448
docs: add Chinese translation for the ES upgrade guide
Sep 15, 2026
3eb0b66
Revert "docs: add Chinese translation for the ES upgrade guide"
Sep 15, 2026
7cc13a9
docs: drop INFO callouts from the ES upgrade guide
Sep 15, 2026
5c0e062
docs: trim redundant scope and audience guidance
Sep 15, 2026
b2c647b
docs: use the product name instead of the internal plugin name
Sep 15, 2026
8b1e712
docs: remove internal chart references from the ES upgrade guide
Sep 15, 2026
82dd97f
docs: clarify migration creation and data copy order
Sep 15, 2026
319e04b
docs: remove misleading wording in the ES upgrade guide
Sep 15, 2026
9a9b06c
docs: use the ACP 4.4 Log Storage Manager product name
Sep 15, 2026
59547bf
docs: limit the 4.4 product name to product references
Sep 15, 2026
08cf0e6
docs: keep the source product name in the upgrade introduction
Sep 15, 2026
37ba925
docs: roll back the Log Storage Manager renaming
Sep 15, 2026
1fe9bbe
docs: add the environment preparation guide for external log storage
Sep 16, 2026
b5e4c28
docs: make the environment preparation guide runnable in the field
Sep 16, 2026
c174ff4
docs: run the ClickHouse Keeper inside the ClickHouseInstallation
Sep 16, 2026
bec0c2d
docs: keep ClickHouse Keeper state on the persistent volume
Sep 16, 2026
ba645b7
docs: close the OpenSearch and Kafka gaps against the knowledge base
Sep 16, 2026
3a02e43
docs: fix ordering and wording in the OpenSearch account steps
Sep 16, 2026
ae7def9
docs: reserve node-local volumes for their claims
Sep 17, 2026
e950980
docs: move the external storage install path into the installation ch…
Sep 17, 2026
e8dad3d
docs: give the external storage install its own chapter and fix the C…
Sep 17, 2026
eebf850
docs(zh): add the Chinese installation and preparation chapters
Sep 17, 2026
14bf531
docs: split the migration out of the upgrade chapter
Sep 17, 2026
7b70bfc
docs(zh): add the migration chapter and split the Chinese upgrade cha…
Sep 17, 2026
eca8314
docs: trim the upgrade and migration preamble
Sep 17, 2026
c356e57
docs: prepare and install external logging storage
Sep 18, 2026
bcc2262
docs: guard the fresh install against an auto-generated Adopt PLF
Sep 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
382 changes: 382 additions & 0 deletions docs/en/install/index.mdx

Large diffs are not rendered by default.

129 changes: 129 additions & 0 deletions docs/en/migration/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
---
weight: 16
---

# Historical Data Migration

This chapter migrates the historical log, event, and audit data that the legacy Elasticsearch storage plugin holds into the ClickHouse or OpenSearch target that the new data path uses. Run it as part of the upgrade; the upgrade chapter links to it at the point where it applies.

## Supported scope

| Item | Supported |
| --- | --- |
| Source | The PVCs of the legacy Elasticsearch storage plugin. Leave `source.pvcRefs` out and the operator discovers them while the legacy StatefulSet and its PVCs are still present; list them explicitly when discovery is no longer possible, for example after the plugin is uninstalled. |
| Data | The indices selected by `source.indexScope`. It accepts exact index names and globs and must match at least one index; an empty list is rejected. |
| Target | `clickhouse` or `opensearch`. `target.secretRef` uses the same connection Secret as the `PlatformLogForward`. |
| Timing | The migration boundary is captured when you create the resource, and the copy runs after the legacy plugin is uninstalled. |
| Concurrency | ClickHouse targets always run one job at a time. OpenSearch targets accept `options.maxConcurrentJobs: 2`; the default is `1`. |
| Batch size | `options.batchSize` accepts `1..100000`; `options.syncIntervalSeconds` sets the minimum wait between batches. |

:::warning
Provide the source volumes in time. Discovery only works while the legacy StatefulSet and its PVCs are still present. If they are already gone, or if discovery fails, list the PVCs yourself in `source.pvcRefs` — the operator never guesses a source volume. Once the source PVCs are deleted, or their PVs are released and cleaned up, the historical data can no longer be migrated, so create the migration resource, or supply `pvcRefs`, before anything releases those volumes.
:::

## Before you start

1. The new data path is `Ready` and its `PlatformLogForward` points at the target you migrate into. The migration image for this release is available, with its complete registry, tag, or digest (`spec.image` is required).
2. **The migrated time range is still inside the retention of the target tables.** The migration does not widen, pause, or bypass the retention that the `PlatformLogForward` and razor already applied, so records older than the target TTL can be written and then removed by the normal merge. Confirm the range first, or raise the target retention and confirm the table definitions took effect, before you create this resource.

## Step 1: Create the migration resource

Create the `LegacyESMigration` **before** you uninstall the legacy plugin. Creating it earlier is what records the final source state and the source volumes; a resource created after the uninstall has to name the source volumes explicitly and cannot use that final capture.

### Target OpenSearch

```yaml
apiVersion: log.alauda.io/v1alpha1
kind: LegacyESMigration
metadata:
name: platform-es-history # Stable migration name, used by the commands below
namespace: cpaas-system
spec:
image: <migration-worker-image> # Required; migration image provided for this release, with registry and tag or digest
source:
indexScope: # Required, selects the historical indices to migrate
- "log-workload-*"
- "log-platform-*"
- "log-system-*"
- "log-kubernetes-*"
- "event-*"
- "audit-*"
target:
type: opensearch # Must match the PlatformLogForward target
secretRef:
name: platform-default-os-conn # The same connection Secret as PlatformLogForward
namespace: cpaas-system
options:
batchSize: 250 # Documents written per batch, 1~100000; default 250
syncIntervalSeconds: 5 # Minimum wait between batches; omit to use the default (no fixed wait for OpenSearch)
maxConcurrentJobs: 1 # Concurrent jobs; default 1, up to 2 for OpenSearch
```

### Target ClickHouse

Change `target.type` to `clickhouse` and point the Secret at `platform-default-ch-conn`.

```yaml
apiVersion: log.alauda.io/v1alpha1
kind: LegacyESMigration
metadata:
name: platform-es-history # Stable migration name, used by the commands below
namespace: cpaas-system
spec:
image: <migration-worker-image> # Required; migration image provided for this release, with registry and tag or digest
source:
indexScope: # Required, selects the historical indices to migrate
- "log-workload-*"
- "log-platform-*"
- "log-system-*"
- "log-kubernetes-*"
- "event-*"
- "audit-*"
target:
type: clickhouse # Must match the PlatformLogForward target
secretRef:
name: platform-default-ch-conn # The same connection Secret as PlatformLogForward
namespace: cpaas-system
options:
batchSize: 250 # Documents written per batch, 1~100000; default 250
syncIntervalSeconds: 5 # Minimum wait between batches; omit to use the default (1 second for ClickHouse)
maxConcurrentJobs: 1 # Concurrent jobs; ClickHouse is always serial (1)
```

Save the YAML as `legacy-es-migration.yaml` and apply it:

```bash
kubectl apply -f legacy-es-migration.yaml
```

## Step 2: Wait for the capture to finish

The copy does not start until the legacy plugin is uninstalled, so the phase stops at `PrecaptureReady` for now:

```bash
kubectl -n cpaas-system get legacyesmigration platform-es-history -w
```

In this flow, data copy starts only after the legacy plugin is uninstalled, so the phase stays at `PrecaptureReady` until then. Continue to Step 3 only when the phase is `PrecaptureReady` (or `Succeeded` for an already completed migration). If the phase is `Blocked`, do not delete or recreate the migration resource; read the condition message and contact support.

The new data path continues to receive log, event, and audit data while the migration runs. Keep the new data path and its target connection unchanged. If the migration does not complete, stop and contact support.

Use the migration image provided for this ACP 4.4 Logging release. If the target data is complete but the migration stays in `Running`, stop and contact support; do not delete the migration resource or the source volumes.

## Step 3: Verify the migration

Once the legacy plugin is uninstalled, the worker copies the data. Watch the same resource until it succeeds:

```bash
kubectl -n cpaas-system get legacyesmigration platform-es-history \
-o jsonpath='{.status.phase}{"\n"}' # wait for: Succeeded
```

If the phase is `Blocked`, do not delete or recreate the resource; read the condition message and contact support.

Then confirm the migrated data in the target: run the same log, event, and audit queries you use in production and check that the historical range is present.

## Retained volumes

Keep the protected source volumes until the verification passes and the approved change window closes. `status.phase: Succeeded` is not by itself approval to release them.

Loading