This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new dddc3b51be Support Elasticsearch 9.x as storage (#13957)
dddc3b51be is described below

commit dddc3b51be9d027755d48e99f72b362e969ccecd
Author: kezhenxu94 <[email protected]>
AuthorDate: Fri Jul 24 20:19:39 2026 +0800

    Support Elasticsearch 9.x as storage (#13957)
    
    The ES client version gate capped at major == 8, so a server reporting
    major 9 fell through to UnsupportedOperationException and OAP refused to
    start against an Elasticsearch 9 cluster. ES 9 keeps the same REST
    surface the ES 8 path already uses (typeless document writes and
    composable index templates), so admit major >= 8 to that path.
    
    Add ES 9.3.0 to the module IT (ElasticSearchIT) and a new Storage ES
    9.3.0 e2e case alongside the existing 8.18.8 coverage; update the storage
    docs and changelog.
---
 .github/workflows/skywalking.yaml                                  | 3 +++
 docs/en/changes/changes.md                                         | 1 +
 docs/en/setup/backend/storages/elasticsearch.md                    | 2 +-
 .../skywalking/library/elasticsearch/ElasticSearchVersion.java     | 2 +-
 .../apache/skywalking/library/elasticsearch/ElasticSearchIT.java   | 7 +++++++
 5 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/skywalking.yaml 
b/.github/workflows/skywalking.yaml
index ae0e30d2b5..dc8d21f766 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -377,6 +377,9 @@ jobs:
           - name: Storage ES 8.18.8
             config: test/e2e-v2/cases/storage/es/e2e.yaml
             env: ES_VERSION=8.18.8
+          - name: Storage ES 9.3.0
+            config: test/e2e-v2/cases/storage/es/e2e.yaml
+            env: ES_VERSION=9.3.0
           - name: Storage OpenSearch 2.4.0
             config: test/e2e-v2/cases/storage/opensearch/e2e.yaml
             env: OPENSEARCH_VERSION=2.4.0
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 12ff3aae95..e90572a995 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -255,6 +255,7 @@
   admin-host only" entry above for the public REST retirement.
 
 #### OAP Server
+* Support Elasticsearch 9.x as storage.
 * Add Node.js runtime metrics via the Node.js agent **`MeterReportService`** 
pipeline (`meter_instance_nodejs_*`, 1s collect/report). OAP analyzes raw 
meters through `nodejs-runtime.yaml`. Node.js E2E asserts six 
`meter_instance_nodejs_*` metrics (`test/e2e-v2/cases/nodejs/e2e.yaml`).
 * Add PHP runtime PHM meter analyzer (`php-runtime.yaml`) for SkyWalking PHP 
agent process
   metrics (CPU, memory, virtual memory, thread count, open file descriptors 
sampled from
diff --git a/docs/en/setup/backend/storages/elasticsearch.md 
b/docs/en/setup/backend/storages/elasticsearch.md
index 2f6ec21ba5..e83892fe7d 100644
--- a/docs/en/setup/backend/storages/elasticsearch.md
+++ b/docs/en/setup/backend/storages/elasticsearch.md
@@ -37,7 +37,7 @@ SkyWalking rebuilds the ElasticSearch client on top of 
ElasticSearch REST API an
 correct request formats according to the server-side version, hence you don't 
need to download different binaries
 and don't need to configure different storage selectors for different 
ElasticSearch server-side versions anymore.
 
-For now, SkyWalking supports ElasticSearch 7.x, ElasticSearch 8.x, and 
OpenSearch 1.x, their
+For now, SkyWalking supports ElasticSearch 7.x, ElasticSearch 8.x, 
ElasticSearch 9.x, and OpenSearch 1.x, their
 configurations are as follows:
 
 _Notice, ElasticSearch 6 worked and is not promised due to end of life 
officially._
diff --git 
a/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/ElasticSearchVersion.java
 
b/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/ElasticSearchVersion.java
index 97cd695fa3..d673cb91e9 100644
--- 
a/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/ElasticSearchVersion.java
+++ 
b/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/ElasticSearchVersion.java
@@ -64,7 +64,7 @@ public final class ElasticSearchVersion {
                 }
                 return;
             }
-            if (major == 8) {
+            if (major >= 8) { // 8.x, 9.x and later: typeless docs + 
composable index templates
                 requestFactory = new V81RequestFactory(this);
                 codec = V78Codec.INSTANCE;
                 return;
diff --git 
a/oap-server/server-library/library-elasticsearch-client/src/test/java/org/apache/skywalking/library/elasticsearch/ElasticSearchIT.java
 
b/oap-server/server-library/library-elasticsearch-client/src/test/java/org/apache/skywalking/library/elasticsearch/ElasticSearchIT.java
index 295a9eb81a..659954f60b 100644
--- 
a/oap-server/server-library/library-elasticsearch-client/src/test/java/org/apache/skywalking/library/elasticsearch/ElasticSearchIT.java
+++ 
b/oap-server/server-library/library-elasticsearch-client/src/test/java/org/apache/skywalking/library/elasticsearch/ElasticSearchIT.java
@@ -90,6 +90,13 @@ public class ElasticSearchIT {
                                    .withTag("8.9.0"))
                     .withEnv("xpack.security.enabled", "false")
             },
+            {
+                "ElasticSearch 9.3.0",
+                new ElasticsearchContainer(
+                    
DockerImageName.parse("docker.elastic.co/elasticsearch/elasticsearch")
+                                   .withTag("9.3.0"))
+                    .withEnv("xpack.security.enabled", "false")
+            },
             {
                 "OpenSearch 1.0.0",
                 new ElasticsearchContainer(

Reply via email to