webapp: migrate from Spring Web to Armeria (#9592)

diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml
index b86214e..580f52e 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -40,7 +40,7 @@
         with:
           submodules: true
       - name: Check license header
-        uses: apache/skywalking-eyes@985866ce7e324454f61e22eb2db2e998db09d6f3
+        uses: apache/skywalking-eyes@442d4621d10ae9e92a859d873e6e63664622a50d
 
   code-style:
     if: (github.event_name == 'schedule' && github.repository == 'apache/skywalking') || (github.event_name != 'schedule')
@@ -77,7 +77,7 @@
           go-version: "1.16"
       - name: Check Dependencies Licenses
         run: |
-          go install github.com/apache/skywalking-eyes/cmd/license-eye@7a3e90b
+          go install github.com/apache/skywalking-eyes/cmd/license-eye@442d462
           license-eye dependency resolve --summary ./dist-material/release-docs/LICENSE.tpl || exit 1
           if [ ! -z "$(git diff -U0 ./dist-material/release-docs/LICENSE)" ]; then
             echo "LICENSE file is not updated correctly"
diff --git a/.licenserc.yaml b/.licenserc.yaml
index c57e4a0..fa03493 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -74,6 +74,7 @@
     - skywalking-ui/package.json
   excludes:
     - name: org.openjdk.jmh:jmh-core # We don't distribute the dependencies, they are just for the build process
+      recursive: true
     - name: org.apache.skywalking:* # Exclude self dependencies
   licenses:
     - name: org.slf4j:slf4j-api
diff --git a/README.md b/README.md
index a410449..e83fc40 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@
 The core features are following.
 
 - Service, service instance, endpoint(URI) metrics analysis
-- Root cause analysis. 
+- Root cause analysis.
   - Profile the code on the runtime powered by in-process agent and ebpf profiler.
   - Network profiler for TCP, TCP/TLS, HTTP(s) traffic
 - Service topology map analysis
@@ -41,7 +41,7 @@
 including
 1. Java, .NET Core, NodeJS, PHP, and Python auto-instrument agents.
 2. Go, C++, and Rust SDKs.
-3. [Agent profiling](https://skywalking.apache.org/docs/main/latest/en/concepts-and-designs/sdk-profiling/) for Java and Python.
+3. [Agent profiling](https://skywalking.apache.org/docs/main/next/en/concepts-and-designs/sdk-profiling/) for Java and Python.
 4. [ebpf](https://github.com/apache/skywalking-rover) network profling and ON/OFF CPU profiling.
 5. LUA agent especially for Nginx, OpenResty and Apache APISIX.
 6. Browser agent.
@@ -50,7 +50,7 @@
 9. Logs.
 10. Zipkin v1/v2 trace.(No Analysis)
 
-SkyWalking OAP is using the STAM(Streaming Topology Analysis Method) to analysis topology in the tracing based agent scenario 
+SkyWalking OAP is using the STAM(Streaming Topology Analysis Method) to analysis topology in the tracing based agent scenario
 for better performance. Read [the paper of STAM](https://wu-sheng.github.io/STAM/) for more details.
 
 # Documentation
@@ -70,7 +70,7 @@
 
 # Live Demo
 - Find the [live demo](https://skywalking.apache.org/#demo) and [screenshots](https://skywalking.apache.org/#arch) on our website.
-- Follow the [showcase](https://skywalking.apache.org/docs/skywalking-showcase/latest/readme/) to set up preview deployment quickly.
+- Follow the [showcase](https://skywalking.apache.org/docs/skywalking-showcase/next/readme/) to set up preview deployment quickly.
 
 # Contact Us
 * Mail list: **dev@skywalking.apache.org**. Mail to `dev-subscribe@skywalking.apache.org`, follow the reply to subscribe the mail list.
diff --git a/apm-dist/src/main/assembly/binary.xml b/apm-dist/src/main/assembly/binary.xml
index e92f776..9f4cef1 100644
--- a/apm-dist/src/main/assembly/binary.xml
+++ b/apm-dist/src/main/assembly/binary.xml
@@ -125,7 +125,12 @@
             <fileMode>0644</fileMode>

         </file>

         <file>

-            <source>${project.basedir}/../apm-webapp/src/main/assembly/webapp.yml</source>

+            <source>${project.basedir}/../apm-webapp/src/main/resources/application.yml</source>

+            <outputDirectory>webapp</outputDirectory>

+            <fileMode>0644</fileMode>

+        </file>

+        <file>

+            <source>${project.basedir}/../apm-webapp/src/main/assembly/log4j2.xml</source>

             <outputDirectory>webapp</outputDirectory>

             <fileMode>0644</fileMode>

         </file>

diff --git a/apm-webapp/pom.xml b/apm-webapp/pom.xml
index 9eb5757..686be7e 100644
--- a/apm-webapp/pom.xml
+++ b/apm-webapp/pom.xml
@@ -31,15 +31,7 @@
     <properties>
         <java.version>1.8</java.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <spring.boot.version>2.6.6</spring.boot.version>
-        <gson.version>2.9.0</gson.version>
-        <apache-httpclient.version>4.5.13</apache-httpclient.version>
-        <spring-cloud-dependencies.version>2021.0.2</spring-cloud-dependencies.version>
         <frontend-maven-plugin.version>1.12.1</frontend-maven-plugin.version>
-        <logback-classic.version>1.2.11</logback-classic.version>
-        <jackson-version>2.13.2.2</jackson-version>
-        <yaml.version>1.31</yaml.version>
-        <netty.version>4.1.77.Final</netty.version>
 
         <ui.path>${project.parent.basedir}/skywalking-ui</ui.path>
     </properties>
@@ -47,16 +39,9 @@
     <dependencyManagement>
         <dependencies>
             <dependency>
-                <groupId>org.springframework.cloud</groupId>
-                <artifactId>spring-cloud-dependencies</artifactId>
-                <version>${spring-cloud-dependencies.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-bom</artifactId>
-                <version>${netty.version}</version>
+                <groupId>org.apache.skywalking</groupId>
+                <artifactId>oap-server-bom</artifactId>
+                <version>${project.version}</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
@@ -65,68 +50,40 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-gateway</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-actuator</artifactId>
-            <version>${spring.boot.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-databind</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-logging</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <!-- https://www.cvedetails.com/cve/CVE-2019-17267/ -->
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-            <version>${jackson-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>${gson.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-            <version>${apache-httpclient.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>${logback-classic.version}</version>
-        </dependency>
-        <dependency>
             <groupId>org.yaml</groupId>
             <artifactId>snakeyaml</artifactId>
-            <version>${yaml.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <version>${spring.boot.version}</version>
-            <scope>test</scope>
+            <groupId>org.slf4j</groupId>
+            <artifactId>log4j-over-slf4j</artifactId>
         </dependency>
-        <!-- Add for JDK9+ -->
         <dependency>
-            <groupId>com.sun.activation</groupId>
-            <artifactId>javax.activation</artifactId>
-            <version>1.2.0</version>
-            <scope>provided</scope>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-slf4j-impl</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.linecorp.armeria</groupId>
+            <artifactId>armeria</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.aayushatharva.brotli4j</groupId>
+                    <artifactId>native-linux-x86_64</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.aayushatharva.brotli4j</groupId>
+                    <artifactId>native-osx-x86_64</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
     </dependencies>
 
@@ -194,19 +151,40 @@
                 </configuration>
             </plugin>
             <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>${spring.boot.version}</version>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.4.2</version>
+                <configuration>
+                    <descriptorRefs>
+                        <descriptorRef>jar-with-dependencies</descriptorRef>
+                    </descriptorRefs>
+                    <archive>
+                        <manifest>
+                            <mainClass>org.apache.skywalking.oap.server.webapp.ApplicationStartUp</mainClass>
+                        </manifest>
+                    </archive>
+                    <appendAssemblyId>false</appendAssemblyId>
+                </configuration>
                 <executions>
                     <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
                         <goals>
-                            <goal>
-                                repackage
-                            </goal>
+                            <goal>single</goal>
                         </goals>
                     </execution>
                 </executions>
             </plugin>
+
+            <plugin>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>application.yml</exclude>
+                        <exclude>log4j2.xml</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/apm-webapp/src/main/assembly/log4j2.xml b/apm-webapp/src/main/assembly/log4j2.xml
new file mode 100644
index 0000000..40fdfb9
--- /dev/null
+++ b/apm-webapp/src/main/assembly/log4j2.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+<Configuration status="info">
+    <Properties>
+        <Property name="log-path">${sys:webapp.logDir}</Property>
+    </Properties>
+    <Appenders>
+        <RollingFile name="RollingFile" fileName="${log-path}/skywalking-webapp.log"
+                     filePattern="${log-path}/skywalking-webapp-%d{yyyy-MM-dd}-%i.log">
+            <PatternLayout>
+                <pattern>%d - %c - %L [%t] %-5p %x - %m%n</pattern>
+            </PatternLayout>
+            <Policies>
+                <SizeBasedTriggeringPolicy size="102400KB"/>
+            </Policies>
+            <DefaultRolloverStrategy max="30"/>
+        </RollingFile>
+    </Appenders>
+    <Loggers>
+        <logger name="org.apache.zookeeper" level="INFO"/>
+        <logger name="io.grpc.netty" level="INFO"/>
+        <Root level="info">
+            <AppenderRef ref="RollingFile"/>
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/apm-webapp/src/main/assembly/webapp.yml b/apm-webapp/src/main/assembly/webapp.yml
deleted file mode 100644
index 301a347..0000000
--- a/apm-webapp/src/main/assembly/webapp.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-server:
-  port: 8080
-
-spring:
-  cloud:
-    gateway:
-      routes:
-        - id: oap-route
-          uri: lb://oap-service
-          predicates:
-            - Path=/graphql/**
-    discovery:
-      client:
-        simple:
-          instances:
-            oap-service:
-              - uri: http://127.0.0.1:12800
-            # - uri: http://<oap-host-1>:<oap-port1>
-            # - uri: http://<oap-host-2>:<oap-port2>
-
-  mvc:
-    throw-exception-if-no-handler-found: true
-
-  web:
-    resources:
-      add-mappings: true
-
-management:
-  server:
-    base-path: /manage
diff --git a/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/ApplicationStartUp.java b/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/ApplicationStartUp.java
index 8906ae7..4ef5e9d 100644
--- a/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/ApplicationStartUp.java
+++ b/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/ApplicationStartUp.java
@@ -18,12 +18,56 @@
 
 package org.apache.skywalking.oap.server.webapp;
 
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
+import static org.yaml.snakeyaml.env.EnvScalarConstructor.ENV_FORMAT;
+import static org.yaml.snakeyaml.env.EnvScalarConstructor.ENV_TAG;
 
-@SpringBootApplication
+import java.util.Collections;
+
+import org.yaml.snakeyaml.LoaderOptions;
+import org.yaml.snakeyaml.TypeDescription;
+import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.env.EnvScalarConstructor;
+
+import com.linecorp.armeria.common.SessionProtocol;
+import com.linecorp.armeria.server.HttpService;
+import com.linecorp.armeria.server.Server;
+import com.linecorp.armeria.server.file.FileService;
+import com.linecorp.armeria.server.file.HttpFile;
+import com.linecorp.armeria.server.healthcheck.HealthCheckService;
+
 public class ApplicationStartUp {
-    public static void main(String[] args) {
-        SpringApplication.run(ApplicationStartUp.class, args);
+    public static void main(String[] args) throws Exception {
+        final Yaml yaml = new Yaml(
+            new EnvScalarConstructor(
+                new TypeDescription(Configuration.class),
+                Collections.emptyList(),
+                new LoaderOptions()));
+        yaml.addImplicitResolver(ENV_TAG, ENV_FORMAT, "$");
+
+        final Configuration configuration = yaml.loadAs(
+            ApplicationStartUp.class.getResourceAsStream("/application.yml"),
+            Configuration.class);
+
+        final int port = configuration.port();
+        final String[] oapServices = configuration.oapServices();
+
+        final HttpService indexPage =
+            HttpFile
+                .of(ApplicationStartUp.class.getClassLoader(), "/public/index.html")
+                .asService();
+
+        Server
+            .builder()
+            .port(port, SessionProtocol.HTTP)
+            .service("/graphql", new OapProxyService(oapServices))
+            .service("/internal/l7check", HealthCheckService.of())
+            .serviceUnder("/",
+                FileService.of(
+                    ApplicationStartUp.class.getClassLoader(),
+                    "/public")
+                    .orElse(indexPage))
+            .build()
+            .start()
+            .join();
     }
 }
diff --git a/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/Configuration.java b/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/Configuration.java
new file mode 100644
index 0000000..ae61a54
--- /dev/null
+++ b/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/Configuration.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.skywalking.oap.server.webapp;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Configuration {
+  private String serverPort;
+  private String oapServices;
+
+  public int port() {
+    return serverPort == null || serverPort.trim().length() == 0
+      ? 80
+      : Integer.parseInt(serverPort);
+  }
+
+  public String[] oapServices() {
+    if (oapServices == null || oapServices.trim().length() == 0) {
+      throw new IllegalArgumentException("oapServices cannot be null or empty");
+    }
+    return oapServices.split(",");
+  }
+}
diff --git a/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/GlobalErrorWebExceptionHandler.java b/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/GlobalErrorWebExceptionHandler.java
deleted file mode 100644
index 7119939..0000000
--- a/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/GlobalErrorWebExceptionHandler.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.skywalking.oap.server.webapp;
-
-import java.io.IOException;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.annotation.Order;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.buffer.DataBufferFactory;
-import org.springframework.http.MediaType;
-import org.springframework.http.server.reactive.ServerHttpResponse;
-import org.springframework.util.StreamUtils;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Mono;
-
-@Slf4j
-@Order(-1)
-@Configuration
-public class GlobalErrorWebExceptionHandler implements ErrorWebExceptionHandler {
-
-    @Override
-    public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
-        ServerHttpResponse response = exchange.getResponse();
-        response.getHeaders().setContentType(MediaType.TEXT_HTML);
-        return response.writeWith(Mono.fromSupplier(() -> {
-            DataBufferFactory bufferFactory = response.bufferFactory();
-            try {
-                return bufferFactory.wrap(StreamUtils.copyToByteArray(
-                    new ClassPathResource("/public/index.html").getInputStream()));
-            } catch (IOException e) {
-                log.error("There was an error completing the action.", ex);
-                return bufferFactory.wrap(new byte[0]);
-            }
-        }));
-    }
-}
\ No newline at end of file
diff --git a/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/OapProxyService.java b/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/OapProxyService.java
new file mode 100644
index 0000000..bffd1a5
--- /dev/null
+++ b/apm-webapp/src/main/java/org/apache/skywalking/oap/server/webapp/OapProxyService.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.skywalking.oap.server.webapp;
+
+import static java.util.stream.Collectors.toList;
+import java.net.URI;
+import java.time.Duration;
+import java.util.List;
+import java.util.stream.Stream;
+import com.linecorp.armeria.client.Endpoint;
+import com.linecorp.armeria.client.WebClient;
+import com.linecorp.armeria.client.endpoint.EndpointGroup;
+import com.linecorp.armeria.client.endpoint.EndpointSelectionStrategy;
+import com.linecorp.armeria.client.endpoint.healthcheck.HealthCheckedEndpointGroup;
+import com.linecorp.armeria.client.logging.LoggingClient;
+import com.linecorp.armeria.common.HttpRequest;
+import com.linecorp.armeria.common.HttpResponse;
+import com.linecorp.armeria.common.SessionProtocol;
+import com.linecorp.armeria.server.AbstractHttpService;
+import com.linecorp.armeria.server.ServiceRequestContext;
+import lombok.SneakyThrows;
+
+public final class OapProxyService extends AbstractHttpService {
+    private final WebClient loadBalancingClient;
+
+    public OapProxyService(String[] oapServices) throws Exception {
+        final List<Endpoint> endpoints =
+            Stream
+                .of(oapServices)
+                .map(URI::create)
+                .map(URI::getAuthority)
+                .map(Endpoint::parse)
+                .collect(toList());
+        loadBalancingClient = newLoadBalancingClient(
+            EndpointGroup.of(
+                EndpointSelectionStrategy.roundRobin(),
+                endpoints));
+    }
+
+    @SneakyThrows
+    private static WebClient newLoadBalancingClient(EndpointGroup oapGroup) {
+        final HealthCheckedEndpointGroup healthCheckedGroup =
+            HealthCheckedEndpointGroup
+                .builder(oapGroup, "/internal/l7check")
+                .protocol(SessionProtocol.HTTP)
+                .retryInterval(Duration.ofSeconds(10))
+                .build();
+
+        // Wait until the initial health check is finished.
+        healthCheckedGroup.whenReady().get();
+
+        return WebClient
+            .builder(SessionProtocol.HTTP, oapGroup)
+            .decorator(LoggingClient.newDecorator())
+            .build();
+    }
+
+    @Override
+    protected HttpResponse doPost(ServiceRequestContext ctx, HttpRequest req) throws Exception {
+        return loadBalancingClient.execute(req);
+    }
+}
diff --git a/apm-webapp/src/main/resources/application.yml b/apm-webapp/src/main/resources/application.yml
index 12bb6d9..67630f8 100755
--- a/apm-webapp/src/main/resources/application.yml
+++ b/apm-webapp/src/main/resources/application.yml
@@ -14,34 +14,7 @@
 # limitations under the License.
 
 
-server:
-  port: 8080
-  compression:
-    enabled: true
-spring:
-  cloud:
-    gateway:
-      routes:
-        - id: oap-route
-          uri: lb://oap-service
-          predicates:
-            - Path=/graphql/**
-    discovery:
-      client:
-        simple:
-          instances:
-            oap-service:
-              - uri: http://127.0.0.1:12800
-            # - uri: http://<oap-host-1>:<oap-port1>
-            # - uri: http://<oap-host-2>:<oap-port2>
+serverPort: ${SW_SERVER_PORT:-8080}
 
-  mvc:
-    throw-exception-if-no-handler-found: true
-
-  web:
-    resources:
-      add-mappings: true
-
-management:
-  server:
-    base-path: /manage
+# Comma seperated list of OAP addresses.
+oapServices: ${SW_OAP_ADDRESS:-localhost:12800}
diff --git a/apm-webapp/src/main/resources/logback-spring.xml b/apm-webapp/src/main/resources/log4j2.xml
similarity index 61%
rename from apm-webapp/src/main/resources/logback-spring.xml
rename to apm-webapp/src/main/resources/log4j2.xml
index e73214f..2ae2817 100644
--- a/apm-webapp/src/main/resources/logback-spring.xml
+++ b/apm-webapp/src/main/resources/log4j2.xml
@@ -16,11 +16,20 @@
   ~ limitations under the License.
   ~
   -->
-<configuration>
-    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
-    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
-    <include resource="org/springframework/boot/logging/logback/file-appender.xml"/>
-    <root level="INFO">
-        <appender-ref ref="FILE"/>
-    </root>
-</configuration>
\ No newline at end of file
+
+<Configuration status="DEBUG">
+    <Appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <PatternLayout>
+                <LevelPatternSelector defaultPattern="%d %c %L [%t] %-5p %x - %m%n">
+                    <PatternMatch key="ERROR" pattern="%d %c %L [%t] %-5p %x - [%swversion] %m%n" />
+                </LevelPatternSelector>
+            </PatternLayout>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Root level="INFO">
+            <AppenderRef ref="Console"/>
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/apm-webapp/src/test/java/org/apache/skywalking/oap/server/webapp/ApplicationContextTest.java b/apm-webapp/src/test/java/org/apache/skywalking/oap/server/webapp/ApplicationContextTest.java
deleted file mode 100644
index 693d184..0000000
--- a/apm-webapp/src/test/java/org/apache/skywalking/oap/server/webapp/ApplicationContextTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.oap.server.webapp;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@SpringBootTest
-@RunWith(SpringRunner.class)
-public class ApplicationContextTest {
-
-    @Test
-    public void contextShouldLoad() {
-    }
-
-}
\ No newline at end of file
diff --git a/dist-material/bin/webappService.bat b/dist-material/bin/webappService.bat
index a1ca98c..e5629bf 100644
--- a/dist-material/bin/webappService.bat
+++ b/dist-material/bin/webappService.bat
@@ -26,8 +26,6 @@
     mkdir "%WEBAPP_LOG_DIR%"
 )
 
-set LOG_FILE_LOCATION=%WEBAPP_LOG_DIR%\webapp.log
-
 if defined JAVA_HOME (
  set _EXECJAVA="%JAVA_HOME%\bin\java"
 )
@@ -37,5 +35,5 @@
  set _EXECJAVA=java
 )
 
-start "%WEBAPP_PROCESS_TITLE%" %_EXECJAVA%  -jar %JARPATH%/skywalking-webapp.jar --spring.config.location=%JARPATH%/webapp.yml --logging.file=%LOG_FILE_LOCATION%
+start "%WEBAPP_PROCESS_TITLE%" %_EXECJAVA% -Dwebapp.logDir=%WEBAPP_LOG_DIR% -cp %JARPATH%/skywalking-webapp.jar;%JARPATH% org.apache.skywalking.oap.server.webapp.ApplicationStartUp
 endlocal
diff --git a/dist-material/bin/webappService.sh b/dist-material/bin/webappService.sh
index dde778c..9766a94 100644
--- a/dist-material/bin/webappService.sh
+++ b/dist-material/bin/webappService.sh
@@ -20,7 +20,7 @@
 [ -z "$WEBAPP_HOME" ] && WEBAPP_HOME=$(cd "$PRGDIR/.." > /dev/null || exit 1; pwd)
 
 WEBAPP_LOG_DIR="${WEBAPP_LOG_DIR:-${WEBAPP_HOME}/logs}"
-JAVA_OPTS="${JAVA_OPTS:-  -Xms256M -Xmx512M}"
+JAVA_OPTS="${JAVA_OPTS:-  -Xms256M -Xmx512M} -Dwebapp.logDir=${WEBAPP_LOG_DIR}"
 JAR_PATH="${WEBAPP_HOME}/webapp"
 
 if [ ! -d "${WEBAPP_LOG_DIR}" ]; then
@@ -32,9 +32,8 @@
 _RUNJAVA=${JAVA_HOME}/bin/java
 [ -z "$JAVA_HOME" ] && _RUNJAVA=java
 
-eval exec "\"$_RUNJAVA\" ${JAVA_OPTS} -jar ${JAR_PATH}/skywalking-webapp.jar \
-         --spring.config.location=${JAR_PATH}/webapp.yml \
-         --logging.file=${LOG_FILE_LOCATION} \
+eval exec "\"$_RUNJAVA\" ${JAVA_OPTS} -cp ${JAR_PATH}/skywalking-webapp.jar:$JAR_PATH \
+         org.apache.skywalking.oap.server.webapp.ApplicationStartUp \
         2>${WEBAPP_LOG_DIR}/webapp-console.log 1> /dev/null &"
 
 if [ $? -eq 0 ]; then
diff --git a/dist-material/release-docs/LICENSE b/dist-material/release-docs/LICENSE
index 4a54d6a..36e206d 100755
--- a/dist-material/release-docs/LICENSE
+++ b/dist-material/release-docs/LICENSE
@@ -214,18 +214,18 @@
     https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-common/1.4.2 Apache-2.0
     https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-client/1.8.0 Apache-2.0
     https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-core/1.8.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations/2.13.2 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.13.2 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.13.2.2 Apache-2.0
+    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations/2.13.4 Apache-2.0
+    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations/2.13.3 Apache-2.0
+    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.13.4 Apache-2.0
+    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.13.3 Apache-2.0
+    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.13.4 Apache-2.0
+    https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.13.3 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-guava/2.9.10 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-guava/2.9.5 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.9.10 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.13.1 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.9.5 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.13.2 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.13.2 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-kotlin/2.13.1 Apache-2.0
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-parameter-names/2.13.2 Apache-2.0
     https://mvnrepository.com/artifact/com.fasterxml/classmate/1.5.1 Apache-2.0
     https://mvnrepository.com/artifact/com.google.android/annotations/4.1.1.4 Apache-2.0
     https://mvnrepository.com/artifact/com.google.api.grpc/proto-google-common-protos/2.9.0 Apache-2.0
@@ -242,10 +242,10 @@
     https://mvnrepository.com/artifact/com.google.inject/guice/4.1.0 Apache-2.0
     https://mvnrepository.com/artifact/com.google.j2objc/j2objc-annotations/1.3 Apache-2.0
     https://mvnrepository.com/artifact/com.graphql-java/java-dataloader/3.1.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.linecorp.armeria/armeria/1.16.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.linecorp.armeria/armeria-graphql/1.16.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.linecorp.armeria/armeria-graphql-protocol/1.16.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.linecorp.armeria/armeria-protobuf/1.16.0 Apache-2.0
+    https://mvnrepository.com/artifact/com.linecorp.armeria/armeria/1.18.0 Apache-2.0
+    https://mvnrepository.com/artifact/com.linecorp.armeria/armeria-graphql/1.18.0 Apache-2.0
+    https://mvnrepository.com/artifact/com.linecorp.armeria/armeria-graphql-protocol/1.18.0 Apache-2.0
+    https://mvnrepository.com/artifact/com.linecorp.armeria/armeria-protobuf/1.18.0 Apache-2.0
     https://mvnrepository.com/artifact/com.orbitz.consul/consul-client/1.4.2 Apache-2.0
     https://mvnrepository.com/artifact/com.orbitz.consul/consul-client/1.2.6 Apache-2.0
     https://mvnrepository.com/artifact/com.squareup.okhttp3/logging-interceptor/4.9.2 Apache-2.0
@@ -257,10 +257,10 @@
     https://mvnrepository.com/artifact/com.squareup.retrofit2/converter-jackson/2.3.0 Apache-2.0
     https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit/2.5.0 Apache-2.0
     https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit/2.3.0 Apache-2.0
-    https://mvnrepository.com/artifact/com.stoyanr/evictor/1.0.0 Apache-2.0
     https://mvnrepository.com/artifact/com.zaxxer/HikariCP/3.1.0 Apache-2.0
     https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils/1.9.4 Apache-2.0
     https://mvnrepository.com/artifact/commons-codec/commons-codec/1.11 Apache-2.0
+    https://mvnrepository.com/artifact/commons-codec/commons-codec/1.15 Apache-2.0
     https://mvnrepository.com/artifact/commons-io/commons-io/2.7 Apache-2.0
     https://mvnrepository.com/artifact/commons-logging/commons-logging/1.2 Apache-2.0
     https://npmjs.com/package/d3-flame-graph/v/4.1.3 4.1.3 Apache-2.0
@@ -280,43 +280,54 @@
     https://mvnrepository.com/artifact/io.kubernetes/client-java/16.0.0 Apache-2.0
     https://mvnrepository.com/artifact/io.kubernetes/client-java-api/16.0.0 Apache-2.0
     https://mvnrepository.com/artifact/io.kubernetes/client-java-proto/16.0.0 Apache-2.0
-    https://mvnrepository.com/artifact/io.micrometer/micrometer-core/1.8.5 Apache-2.0
-    https://mvnrepository.com/artifact/io.micrometer/micrometer-core/1.8.4 Apache-2.0
+    https://mvnrepository.com/artifact/io.micrometer/micrometer-core/1.9.2 Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-buffer/4.1.77.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-buffer/4.1.81.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-codec-dns/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-codec-dns/4.1.76.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-codec-haproxy/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-codec-haproxy/4.1.76.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-codec/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-codec-dns/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-codec-dns/4.1.79.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-codec-haproxy/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-codec-haproxy/4.1.79.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec-http/4.1.77.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-codec-http/4.1.81.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec-http2/4.1.77.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-codec-http2/4.1.81.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-codec-socks/4.1.77.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-codec-socks/4.1.81.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-common/4.1.77.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-common/4.1.81.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-handler/4.1.77.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-handler/4.1.81.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-handler-proxy/4.1.77.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-handler-proxy/4.1.81.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-resolver/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns/4.1.76.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-classes-macos/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-classes-macos/4.1.76.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-native-macos/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-native-macos/4.1.76.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-resolver/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-resolver/4.1.79.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns/4.1.79.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-classes-macos/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-classes-macos/4.1.79.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-native-macos/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-native-macos/4.1.79.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-tcnative-boringssl-static/2.0.52.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-tcnative-boringssl-static/2.0.51.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-tcnative-boringssl-static/2.0.54.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-tcnative-boringssl-static/2.0.53.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-tcnative-classes/2.0.52.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-tcnative-classes/2.0.54.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-tcnative-classes/2.0.53.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-transport/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-transport-classes-epoll/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-transport-classes-epoll/4.1.76.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll/4.1.76.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-transport/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-transport/4.1.79.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-transport-classes-epoll/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-transport-classes-epoll/4.1.79.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll/4.1.81.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll/4.1.45.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll/4.1.79.Final Apache-2.0
     https://mvnrepository.com/artifact/io.netty/netty-transport-native-unix-common/4.1.77.Final Apache-2.0
-    https://mvnrepository.com/artifact/io.netty/netty-transport-native-unix-common/4.1.76.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-transport-native-unix-common/4.1.81.Final Apache-2.0
+    https://mvnrepository.com/artifact/io.netty/netty-transport-native-unix-common/4.1.79.Final Apache-2.0
     https://mvnrepository.com/artifact/io.perfmark/perfmark-api/0.25.0 Apache-2.0
-    https://mvnrepository.com/artifact/io.projectreactor.addons/reactor-extra/3.4.8 Apache-2.0
-    https://mvnrepository.com/artifact/io.projectreactor.netty/reactor-netty-core/1.0.18 Apache-2.0
-    https://mvnrepository.com/artifact/io.projectreactor.netty/reactor-netty-http/1.0.18 Apache-2.0
-    https://mvnrepository.com/artifact/io.projectreactor/reactor-core/3.4.17 Apache-2.0
     https://mvnrepository.com/artifact/io.prometheus/simpleclient/0.6.0 Apache-2.0
     https://mvnrepository.com/artifact/io.prometheus/simpleclient_common/0.15.0 Apache-2.0
     https://mvnrepository.com/artifact/io.prometheus/simpleclient_common/0.6.0 Apache-2.0
@@ -326,7 +337,6 @@
     https://mvnrepository.com/artifact/io.vavr/vavr/0.10.3 Apache-2.0
     https://mvnrepository.com/artifact/io.vavr/vavr-match/0.10.3 Apache-2.0
     https://mvnrepository.com/artifact/io.zipkin.zipkin2/zipkin/2.23.16 Apache-2.0
-    https://mvnrepository.com/artifact/jakarta.validation/jakarta.validation-api/2.0.2 Apache-2.0
     https://mvnrepository.com/artifact/javax.inject/javax.inject/1 Apache-2.0
     https://mvnrepository.com/artifact/joda-time/joda-time/2.10.5 Apache-2.0
     https://mvnrepository.com/artifact/net.jodah/failsafe/2.3.4 Apache-2.0
@@ -345,15 +355,12 @@
     https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api/2.17.1 Apache-2.0
     https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.17.1 Apache-2.0
     https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl/2.17.1 Apache-2.0
-    https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-el/9.0.62 Apache-2.0
     https://mvnrepository.com/artifact/org.apache.yetus/audience-annotations/0.5.0 Apache-2.0
     https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper/3.5.7 Apache-2.0
     https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper-jute/3.5.7 Apache-2.0
     https://mvnrepository.com/artifact/org.bitbucket.b_c/jose4j/0.7.12 Apache-2.0
     https://mvnrepository.com/artifact/org.codehaus.groovy/groovy/3.0.8 Apache-2.0
     https://mvnrepository.com/artifact/org.freemarker/freemarker/2.3.31 Apache-2.0
-    https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator/6.2.3.Final Apache-2.0
-    https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging/3.4.1.Final Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-reflect/1.5.0 Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib/1.4.10 Apache-2.0
     https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib/1.5.0 Apache-2.0
@@ -373,49 +380,11 @@
     https://mvnrepository.com/artifact/org.slf4j/jcl-over-slf4j/1.7.30 Apache-2.0
     https://mvnrepository.com/artifact/org.slf4j/log4j-over-slf4j/1.7.30 Apache-2.0
     https://mvnrepository.com/artifact/org.slf4j/slf4j-api/1.7.30 Apache-2.0
-    https://mvnrepository.com/artifact/org.slf4j/slf4j-api/1.7.32 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot/2.6.6 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-actuator/2.6.6 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-actuator-autoconfigure/2.6.6 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-autoconfigure/2.6.6 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter/2.6.6 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator/2.6.6 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-cache/2.6.7 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-json/2.6.7 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-reactor-netty/2.6.7 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation/2.6.7 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webflux/2.6.7 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-commons/3.1.2 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-context/3.1.2 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-gateway-server/3.1.2 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-loadbalancer/3.1.2 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter/3.1.2 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway/3.1.2 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-loadbalancer/3.1.2 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.security/spring-security-crypto/5.6.3 Apache-2.0
-    https://mvnrepository.com/artifact/org.springframework.security/spring-security-rsa/1.0.10.RELEASE Apache-2.0
     https://mvnrepository.com/artifact/org.xerial.snappy/snappy-java/1.1.7.3 Apache-2.0
     https://mvnrepository.com/artifact/org.yaml/snakeyaml/1.31 Apache-2.0
     https://npmjs.com/package/typescript/v/4.4.4 4.4.4 Apache-2.0
 
 ========================================================================
-Apache-2.0 and BSD-3-Clause licenses
-========================================================================
-The following components are provided under the Apache-2.0 and BSD-3-Clause License. See project link for details.
-The text of each license is also included in licenses/LICENSE-[project].txt.
-
-    https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-afterburner/2.12.2 Apache-2.0 and BSD-3-Clause
-    https://mvnrepository.com/artifact/org.springframework/spring-aop/5.3.19 Apache-2.0 and BSD-3-Clause
-    https://mvnrepository.com/artifact/org.springframework/spring-beans/5.3.19 Apache-2.0 and BSD-3-Clause
-    https://mvnrepository.com/artifact/org.springframework/spring-context/5.3.19 Apache-2.0 and BSD-3-Clause
-    https://mvnrepository.com/artifact/org.springframework/spring-context-support/5.3.19 Apache-2.0 and BSD-3-Clause
-    https://mvnrepository.com/artifact/org.springframework/spring-core/5.3.18 Apache-2.0 and BSD-3-Clause
-    https://mvnrepository.com/artifact/org.springframework/spring-expression/5.3.19 Apache-2.0 and BSD-3-Clause
-    https://mvnrepository.com/artifact/org.springframework/spring-jcl/5.3.18 Apache-2.0 and BSD-3-Clause
-    https://mvnrepository.com/artifact/org.springframework/spring-web/5.3.19 Apache-2.0 and BSD-3-Clause
-    https://mvnrepository.com/artifact/org.springframework/spring-webflux/5.3.19 Apache-2.0 and BSD-3-Clause
-
-========================================================================
 Apache-2.0 and CDDL-1.1 and BSD-3-Clause and BSD-2-Clause licenses
 ========================================================================
 The following components are provided under the Apache-2.0 and CDDL-1.1 and BSD-3-Clause and BSD-2-Clause License. See project link for details.
@@ -461,7 +430,6 @@
 The text of each license is also included in licenses/LICENSE-[project].txt.
 
     https://mvnrepository.com/artifact/org.latencyutils/LatencyUtils/2.0.3 CC0-1.0
-    https://mvnrepository.com/artifact/org.reactivestreams/reactive-streams/1.0.3 CC0-1.0
     https://mvnrepository.com/artifact/org.reactivestreams/reactive-streams/1.0.2 CC0-1.0
 
 ========================================================================
@@ -481,23 +449,6 @@
     https://mvnrepository.com/artifact/junit/junit/4.13.1 EPL-1.0
 
 ========================================================================
-EPL-1.0 and LGPL-2.1 licenses
-========================================================================
-The following components are provided under the EPL-1.0 and LGPL-2.1 License. See project link for details.
-The text of each license is also included in licenses/LICENSE-[project].txt.
-
-    https://mvnrepository.com/artifact/ch.qos.logback/logback-classic/1.2.11 EPL-1.0 and LGPL-2.1
-    https://mvnrepository.com/artifact/ch.qos.logback/logback-core/1.2.11 EPL-1.0 and LGPL-2.1
-
-========================================================================
-EPL-2.0 and GPL-2.0 licenses
-========================================================================
-The following components are provided under the EPL-2.0 and GPL-2.0 License. See project link for details.
-The text of each license is also included in licenses/LICENSE-[project].txt.
-
-    https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api/1.3.5 EPL-2.0 and GPL-2.0
-
-========================================================================
 ISC licenses
 ========================================================================
 The following components are provided under the ISC License. See project link for details.
@@ -613,9 +564,7 @@
     https://npmjs.com/package/moment/v/2.24.0 2.24.0 MIT
     https://npmjs.com/package/monaco-editor/v/0.27.0 0.27.0 MIT
     https://npmjs.com/package/nanoid/v/3.3.4 3.3.4 MIT
-    https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on/1.68 MIT
     https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk18on/1.71 MIT
-    https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on/1.68 MIT
     https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk18on/1.71 MIT
     https://mvnrepository.com/artifact/org.bouncycastle/bcutil-jdk18on/1.71 MIT
     https://mvnrepository.com/artifact/org.checkerframework/checker-qual/3.12.0 MIT
@@ -669,3 +618,11 @@
 
     https://npmjs.com/package/robust-predicates/v/3.0.1 3.0.1 Unlicense
 
+========================================================================
+https://spdx.org/licenses/MIT-0.html licenses
+========================================================================
+The following components are provided under the https://spdx.org/licenses/MIT-0.html License. See project link for details.
+The text of each license is also included in licenses/LICENSE-[project].txt.
+
+    https://mvnrepository.com/artifact/org.reactivestreams/reactive-streams/1.0.4 https://spdx.org/licenses/MIT-0.html
+
diff --git a/dist-material/release-docs/README.txt b/dist-material/release-docs/README.txt
index 8359bbe..0787cba 100644
--- a/dist-material/release-docs/README.txt
+++ b/dist-material/release-docs/README.txt
@@ -20,10 +20,10 @@
 To help you get started, try the following links:
 
 Getting Started
-    https://skywalking.apache.org/docs/main/latest/readme/
+    https://skywalking.apache.org/docs/main/next/readme/
 
 Building
-    https://skywalking.apache.org/docs/main/latest/en/guides/how-to-build/
+    https://skywalking.apache.org/docs/main/next/en/guides/how-to-build/
 
 We welcome contributions of all kinds, for details of how you can help
     https://github.com/apache/skywalking/blob/master/CONTRIBUTING.md
diff --git a/docker/ui/Dockerfile b/docker/ui/Dockerfile
index a7cbbca..8c1bd75 100644
--- a/docker/ui/Dockerfile
+++ b/docker/ui/Dockerfile
@@ -17,7 +17,7 @@
 FROM eclipse-temurin:11-jre
 
 ENV JAVA_OPTS=" -Xms256M " \
-    SW_OAP_ADDRESS="http://127.0.0.1:12800"
+    SW_OAP_ADDRESS="127.0.0.1:12800"
 
 WORKDIR skywalking
 
@@ -32,7 +32,7 @@
     rm -rf "agent";
 
 COPY docker-entrypoint.sh .
-COPY logback.xml webapp/
+COPY log4j2.xml webapp/
 
 EXPOSE 8080
 
diff --git a/docker/ui/docker-entrypoint.sh b/docker/ui/docker-entrypoint.sh
index 807bb71..19bab89 100755
--- a/docker/ui/docker-entrypoint.sh
+++ b/docker/ui/docker-entrypoint.sh
@@ -18,14 +18,4 @@
 
 set -e
 
-export LOGGING_CONFIG="webapp/logback.xml"
-
-if [[ ! -z "$SW_OAP_ADDRESS" ]]; then
-  address_arr=(${SW_OAP_ADDRESS//,/ })
-  for i in "${!address_arr[@]}"
-  do
-      JAVA_OPTS="${JAVA_OPTS} -Dspring.cloud.discovery.client.simple.instances.oap-service[$i].uri=${address_arr[$i]}"
-  done
-fi
-
-exec java  ${JAVA_OPTS} -jar webapp/skywalking-webapp.jar "$@"
+exec java ${JAVA_OPTS} -cp webapp/skywalking-webapp.jar:webapp org.apache.skywalking.oap.server.webapp.ApplicationStartUp "$@"
diff --git a/docker/ui/logback.xml b/docker/ui/log4j2.xml
similarity index 61%
rename from docker/ui/logback.xml
rename to docker/ui/log4j2.xml
index c9490a8..2ae2817 100644
--- a/docker/ui/logback.xml
+++ b/docker/ui/log4j2.xml
@@ -16,6 +16,20 @@
   ~ limitations under the License.
   ~
   -->
-<configuration>
-    <include resource="org/springframework/boot/logging/logback/base.xml"/>
-</configuration>
\ No newline at end of file
+
+<Configuration status="DEBUG">
+    <Appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <PatternLayout>
+                <LevelPatternSelector defaultPattern="%d %c %L [%t] %-5p %x - %m%n">
+                    <PatternMatch key="ERROR" pattern="%d %c %L [%t] %-5p %x - [%swversion] %m%n" />
+                </LevelPatternSelector>
+            </PatternLayout>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Root level="INFO">
+            <AppenderRef ref="Console"/>
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/docs/en/changes/changes-9.0.0.md b/docs/en/changes/changes-9.0.0.md
index d3b59d3..d2806be 100644
--- a/docs/en/changes/changes-9.0.0.md
+++ b/docs/en/changes/changes-9.0.0.md
@@ -44,7 +44,7 @@
 * Upgrade H2 version to 2.0.206 to fix CVE-2021-23463 and GHSA-h376-j262-vhq6.
 * Extend column name override mechanism working for `ValueColumnMetadata`.
 * Introduce new concept `Layer` and removed `NodeType`. More details refer
-  to [v9-version-upgrade](https://skywalking.apache.org/docs/main/latest/en/faq/v9-version-upgrade/).
+  to [v9-version-upgrade](https://skywalking.apache.org/docs/main/next/en/faq/v9-version-upgrade/).
 * Fix query sort metrics failure in H2 Storage.
 * Bump up grpc to 1.43.2 and protobuf to 3.19.2 to fix CVE-2021-22569.
 * Add source layer and dest layer to relation.
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index af1e9e2..70df7a6 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -12,9 +12,12 @@
 
 #### UI
 
-* Fix: tab active incorrectly, when click tab space 
+* Fix: tab active incorrectly, when click tab space
 * Add impala icon for impala JDBC Java agent plugin.
 * (Webapp)Bump up snakeyaml to 1.31 for fixing CVE-2022-25857
+* [Breaking Change]: migrate from Spring Web to Armeria, now you should use the environment variable name `SW_OAP_ADDRESS`
+  to change the OAP backend service addresses, like `SW_OAP_ADDRESS=localhost:12800,localhost:12801`, and use environment
+  variable `SW_SERVER_PORT` to change the port. Other Spring-related configurations don't take effect anymore.
 
 
 #### Documentation
diff --git a/docs/en/guides/README.md b/docs/en/guides/README.md
index 155c7aa..91fb382 100755
--- a/docs/en/guides/README.md
+++ b/docs/en/guides/README.md
@@ -83,10 +83,10 @@
 Follow these steps:
 1. Decide what (and how many) containers will be needed. For example, for cluster testing, you'll need > 2 OAP nodes, coordinators (e.g. zookeeper), storage (e.g. ElasticSearch), and instrumented services;
 1. Define the containers in `docker-compose.yml`, and carefully specify the dependencies, starting orders, and most importantly, link them together, e.g. set the correct OAP address on the agent end, and set the correct coordinator address in OAP, etc.
-1. Define the e2e case [config](https://skywalking.apache.org/docs/skywalking-infra-e2e/latest/en/setup/configuration-file/) in `e2e.yaml`.
+1. Define the e2e case [config](https://skywalking.apache.org/docs/skywalking-infra-e2e/next/en/setup/configuration-file/) in `e2e.yaml`.
 1. Write the expected data(yml) for verify.
 
-- [Run e2e test](https://skywalking.apache.org/docs/skywalking-infra-e2e/latest/en/setup/run-e2e-tests/)
+- [Run e2e test](https://skywalking.apache.org/docs/skywalking-infra-e2e/next/en/setup/run-e2e-tests/)
 
 All e2e cases should under `skywalking/test/e2e-v2/cases`. You could execute e2e run command in `skywalking/` e.g.
 ```
diff --git a/docs/en/guides/backend-oal-scripts.md b/docs/en/guides/backend-oal-scripts.md
index 811addc..d9b2fce 100644
--- a/docs/en/guides/backend-oal-scripts.md
+++ b/docs/en/guides/backend-oal-scripts.md
@@ -27,9 +27,8 @@
 {
   "logic-span": true
 }
-``` 
+```
 
 ### References
-1. [Java plugin API](https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/java-plugin-development-guide/#extension-logic-endpoint-tag-key-x-le) guides users to write plugins with logic endpoint.
-2. Java agent's plugins include native included logic endpoints, also it provides ways to set the tag of logic span. The document could be found [here](https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/logic-endpoint/).
-
+1. [Java plugin API](https://skywalking.apache.org/docs/skywalking-java/next/en/setup/service-agent/java-agent/java-plugin-development-guide/#extension-logic-endpoint-tag-key-x-le) guides users to write plugins with logic endpoint.
+2. Java agent's plugins include native included logic endpoints, also it provides ways to set the tag of logic span. The document could be found [here](https://skywalking.apache.org/docs/skywalking-java/next/en/setup/service-agent/java-agent/logic-endpoint/).
diff --git a/docs/en/protocols/README.md b/docs/en/protocols/README.md
index ded1c50..3d5c1aa 100644
--- a/docs/en/protocols/README.md
+++ b/docs/en/protocols/README.md
@@ -24,8 +24,8 @@
 SkyWalking has a native metrics format, and supports widely used metric formats, such as Prometheus, OpenCensus, OpenTelemetry, and Zabbix.
 
 The native metrics format definition could be found [here](https://github.com/apache/skywalking-data-collect-protocol/blob/master/language-agent/Meter.proto).
-Typically, the agent meter plugin (e.g. [Java Meter Plugin](https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/java-plugin-development-guide/#meter-plugin)) and
-Satellite [Prometheus fetcher](https://skywalking.apache.org/docs/skywalking-satellite/latest/en/setup/plugins/fetcher_prometheus-metrics-fetcher/)
+Typically, the agent meter plugin (e.g. [Java Meter Plugin](https://skywalking.apache.org/docs/skywalking-java/next/en/setup/service-agent/java-agent/java-plugin-development-guide/#meter-plugin)) and
+Satellite [Prometheus fetcher](https://skywalking.apache.org/docs/skywalking-satellite/next/en/setup/plugins/fetcher_prometheus-metrics-fetcher/)
 would convert metrics into native format and forward them to SkyWalking OAP server.
 
 To learn more about receiving 3rd party formats metrics, see [Meter receiver](../setup/backend/backend-meter.md) and [OpenTelemetry receiver](../setup/backend/opentelemetry-receiver.md).
diff --git a/docs/en/setup/backend/backend-docker.md b/docs/en/setup/backend/backend-docker.md
index e14c960..cc8bcaa 100644
--- a/docs/en/setup/backend/backend-docker.md
+++ b/docs/en/setup/backend/backend-docker.md
@@ -14,7 +14,7 @@
 
 # Configuration
 
-We could set up environment variables to configure this image. They are defined in [backend-setup](https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-setup/).
+We could set up environment variables to configure this image. They are defined in [backend-setup](https://skywalking.apache.org/docs/main/next/en/setup/backend/backend-setup/).
 
 # Extend image
 
diff --git a/docs/en/setup/backend/backend-k8s-network-monitoring.md b/docs/en/setup/backend/backend-k8s-network-monitoring.md
index 63c9968..4cc35d5 100644
--- a/docs/en/setup/backend/backend-k8s-network-monitoring.md
+++ b/docs/en/setup/backend/backend-k8s-network-monitoring.md
@@ -1,5 +1,5 @@
 # Kubernetes Network monitoring
-SkyWalking leverages [SkyWalking Rover](https://github.com/apache/skywalking-rover) [network profiling feature](https://skywalking.apache.org/docs/skywalking-rover/latest/en/setup/configuration/profiling/#network) for collecting metrics data from the network. SkyWalking Rover converts data from socket data to metrics using eBPF technology.
+SkyWalking leverages [SkyWalking Rover](https://github.com/apache/skywalking-rover) [network profiling feature](https://skywalking.apache.org/docs/skywalking-rover/next/en/setup/configuration/profiling/#network) for collecting metrics data from the network. SkyWalking Rover converts data from socket data to metrics using eBPF technology.
 
 ## Data flow
 1. SkyWalking OAP server observes which specific k8s pod needs to monitor the network.
@@ -7,7 +7,7 @@
 3. The SkyWalking OAP Server accesses K8s's `API Server` to fetch meta info and parses the expression with [MAL](../../concepts-and-designs/mal.md) to aggregate.
 
 ## Setup
-1. Setup [SkyWalking Rover](https://skywalking.apache.org/docs/skywalking-rover/latest/en/setup/overview/).
+1. Setup [SkyWalking Rover](https://skywalking.apache.org/docs/skywalking-rover/next/en/setup/overview/).
 2. Enable the network profiling MAL file in the OAP server.
 ```yaml
 agent-analyzer:
diff --git a/docs/en/setup/backend/backend-storage.md b/docs/en/setup/backend/backend-storage.md
index 5d09ed0..34f470e 100644
--- a/docs/en/setup/backend/backend-storage.md
+++ b/docs/en/setup/backend/backend-storage.md
@@ -47,7 +47,7 @@
 version 7.11. So please choose the suitable ElasticSearch version according to your usage.
 If you have concerns about SSPL, choose the versions before 7.11 or switch to OpenSearch.
 
-Since 9.2.0, SkyWalking provides no-sharding/one-index mode to merge all metrics/meter and records(without super datasets) 
+Since 9.2.0, SkyWalking provides no-sharding/one-index mode to merge all metrics/meter and records(without super datasets)
 indices into one physical index template `metrics-all` and `records-all` on the default setting.
 In the current one index mode, users still could choose to adjust ElasticSearch's shard number(`SW_STORAGE_ES_INDEX_SHARDS_NUMBER`) to scale out.
 After merge all indices, the following indices are available:
@@ -61,7 +61,7 @@
 * sw_records-all-`${day-format}`
 
 ___
-Provide system environment variable(`SW_STORAGE_ES_LOGIC_SHARDING`). Set it to `true` could shard metrics indices into multi-physical indices 
+Provide system environment variable(`SW_STORAGE_ES_LOGIC_SHARDING`). Set it to `true` could shard metrics indices into multi-physical indices
 as same as the versions(one index template per metric/meter aggregation function) before 9.2.0.
 ___
 
@@ -108,7 +108,7 @@
 
 ### ElasticSearch With Https SSL Encrypting communications.
 
-Example: 
+Example:
 
 ```yaml
 storage:
@@ -133,17 +133,17 @@
 But in some cases, users may want to set a long TTL value, such as more than 60 days. However, their ElasticSearch cluster may not be powerful enough due to low traffic in the production environment.
 This value could be increased to 5 (or more) if users could ensure a single index could support the metrics and traces for these days (5 in this case).
 
-For example, if dayStep == 11, 
+For example, if dayStep == 11,
 1. Data in [2000-01-01, 2000-01-11] will be merged into the index-20000101.
 1. Data in [2000-01-12, 2000-01-22] will be merged into the index-20000112.
 
 `storage/elasticsearch/superDatasetDayStep` overrides the `storage/elasticsearch/dayStep` if the value is positive.
 This would affect the record-related entities, such as trace segments. In some cases, the size of metrics is much smaller than the record (trace). This would improve the shards balance in the ElasticSearch cluster.
- 
+
 NOTE: TTL deletion would be affected by these steps. You should set an extra dayStep in your TTL. For example, if you want to have TTL == 30 days and dayStep == 10, you are recommended to set TTL = 40.
 
 ### Secrets Management File Of ElasticSearch Authentication
-The value of `secretsManagementFile` should point to the secrets management file absolute path. 
+The value of `secretsManagementFile` should point to the secrets management file absolute path.
 The file includes the username, password, and JKS password of the ElasticSearch server in the properties format.
 ```properties
 user=xxx
@@ -151,8 +151,8 @@
 trustStorePass=zzz
 ```
 
-The major difference between using `user, password, trustStorePass` configs in the `application.yaml` file is that the **Secrets Management File** is being watched by the OAP server. 
-Once it is changed manually or through a 3rd party tool, such as [Vault](https://github.com/hashicorp/vault), 
+The major difference between using `user, password, trustStorePass` configs in the `application.yaml` file is that the **Secrets Management File** is being watched by the OAP server.
+Once it is changed manually or through a 3rd party tool, such as [Vault](https://github.com/hashicorp/vault),
 the storage provider will use the new username, password, and JKS password to establish the connection and close the old one. If the information exists in the file,
 the `user/password` will be overridden.
 
@@ -186,9 +186,9 @@
 When a namespace is set, all index names in ElasticSearch will use it as the prefix.
 
 ## MySQL
-Activate MySQL as storage, and set storage provider to **mysql**. 
+Activate MySQL as storage, and set storage provider to **mysql**.
 
-**NOTE:** MySQL driver is NOT allowed in Apache official distribution and source codes. 
+**NOTE:** MySQL driver is NOT allowed in Apache official distribution and source codes.
 Please download the MySQL driver on your own. Copy the connection driver jar to `oap-libs`.
 
 ```yaml
@@ -207,13 +207,13 @@
     maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}
     asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}
 ```
-All connection-related settings, including URL link, username, and password, are found in `application.yml`. 
+All connection-related settings, including URL link, username, and password, are found in `application.yml`.
 Only part of the settings is listed here. See the [HikariCP](https://github.com/brettwooldridge/HikariCP) connection pool document for full settings.
 To understand the function of the parameter `rewriteBatchedStatements=true` in MySQL, see the [MySQL official document](https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-connp-props-performance-extensions.html#cj-conn-prop_rewriteBatchedStatements).
 
 ## TiDB
 Tested TiDB Server 4.0.8 version, and MySQL Client driver 8.0.13 version is currently available.
-Activate TiDB as storage, and set storage provider to **tidb**. 
+Activate TiDB as storage, and set storage provider to **tidb**.
 
 ```yaml
 storage:
@@ -234,13 +234,13 @@
     maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}
     asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}
 ```
-All connection-related settings, including URL link, username, and password are found in `application.yml`. 
+All connection-related settings, including URL link, username, and password are found in `application.yml`.
 For details on settings, refer to the configuration of *MySQL* above.
 To understand the function of the parameter `rewriteBatchedStatements=true` in TiDB, see the document of [TiDB best practices](https://docs.pingcap.com/tidb/stable/java-app-best-practices#use-batch-api).
 
 ## PostgreSQL
 PostgreSQL JDBC driver uses version 42.3.2. It supports PostgreSQL 8.2 or newer.
-Activate PostgreSQL as storage, and set storage provider to **postgresql**. 
+Activate PostgreSQL as storage, and set storage provider to **postgresql**.
 
 ```yaml
 storage:
@@ -260,7 +260,7 @@
     maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}
     asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}
 ```
-All connection-related settings, including URL link, username, and password, are found in `application.yml`. 
+All connection-related settings, including URL link, username, and password, are found in `application.yml`.
 Only part of the settings is listed here. Please follow [HikariCP](https://github.com/brettwooldridge/HikariCP) connection pool document for full settings.
 
 ## BanyanDB
@@ -281,9 +281,9 @@
     profileTaskQueryMaxSize: ${SW_STORAGE_BANYANDB_PROFILE_TASK_QUERY_MAX_SIZE:200} # the max number of fetch task in a request
 ```
 
-For more details, please refer to the documents of [BanyanDB](https://skywalking.apache.org/docs/skywalking-banyandb/latest/readme/) 
+For more details, please refer to the documents of [BanyanDB](https://skywalking.apache.org/docs/skywalking-banyandb/next/readme/)
 and [BanyanDB Java Client](https://github.com/apache/skywalking-banyandb-java-client) subprojects.
 
 ## More storage extension solutions
-Follow the [Storage extension development guide](../../guides/storage-extention.md) 
+Follow the [Storage extension development guide](../../guides/storage-extention.md)
 in the [Project Extensions document](../../guides/README.md#project-extensions).
diff --git a/docs/en/setup/backend/ui-setup.md b/docs/en/setup/backend/ui-setup.md
index 2121cec..5bcf14f 100644
--- a/docs/en/setup/backend/ui-setup.md
+++ b/docs/en/setup/backend/ui-setup.md
@@ -1,5 +1,5 @@
 # UI
-SkyWalking UI distribution is already included in our Apache official release. 
+SkyWalking UI distribution is already included in our Apache official release.
 
 ## Startup
 Startup script is also in `/bin/webappService.sh`(.bat). UI runs as an OS Java process, powered-by Zuul.
@@ -11,25 +11,10 @@
 1. Backend connect info.
 
 ```yaml
-server:
-  port: 8080
-spring:
-  cloud:
-    gateway:
-      routes:
-        - id: oap-route
-          uri: lb://oap-service
-          predicates:
-            - Path=/graphql/**
-    discovery:
-      client:
-        simple:
-          instances:
-            oap-service:
-              # Point to all backend's restHost:restPort, split by URI arrays.
-              - uri: http://127.0.0.1:12800
-              - uri: http://instance-2:12800
+serverPort: ${SW_SERVER_PORT:-8080}
 
+# Comma seperated list of OAP addresses, without http:// prefix.
+oapServices: ${SW_OAP_ADDRESS:-localhost:12800}
 ```
 
 ## Start with Docker Image
@@ -46,4 +31,4 @@
 
 ### SW_OAP_ADDRESS
 
-The address of your OAP server. The default value is `http://127.0.0.1:12800`.
\ No newline at end of file
+The address of your OAP server. The default value is `http://127.0.0.1:12800`.
diff --git a/docs/en/setup/service-agent/server-agents.md b/docs/en/setup/service-agent/server-agents.md
index ac140d4..93a711f 100644
--- a/docs/en/setup/service-agent/server-agents.md
+++ b/docs/en/setup/service-agent/server-agents.md
@@ -6,13 +6,13 @@
 
 ## Installing language agents in services
 
-- [Java agent](https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/readme/). Learn how to install the Java agent in your service without affecting your code.
+- [Java agent](https://skywalking.apache.org/docs/skywalking-java/next/en/setup/service-agent/java-agent/readme/). Learn how to install the Java agent in your service without affecting your code.
 
 - [LUA agent](https://github.com/apache/skywalking-nginx-lua). Learn how to install the Lua agent in Nginx + LUA module or OpenResty.
 
 - [Kong agent](https://github.com/apache/skywalking-kong). Learn how to install the Lua agent in Kong.
 
-- [Python Agent](https://skywalking.apache.org/docs/skywalking-python/latest/en/setup/cli/). Learn how to install the Python Agent in a Python service without affecting your code.
+- [Python Agent](https://skywalking.apache.org/docs/skywalking-python/next/en/setup/cli/). Learn how to install the Python Agent in a Python service without affecting your code.
 
 - [Node.js agent](https://github.com/apache/skywalking-nodejs). Learn how to install the NodeJS Agent in a NodeJS service.
 
diff --git a/oap-server-bom/pom.xml b/oap-server-bom/pom.xml
index c123daf..8500cfed 100644
--- a/oap-server-bom/pom.xml
+++ b/oap-server-bom/pom.xml
@@ -49,9 +49,7 @@
         <kubernetes.version>16.0.0</kubernetes.version>
         <hikaricp.version>3.1.0</hikaricp.version>
         <zipkin.version>2.23.16</zipkin.version>
-        <jackson-core.version>2.13.2</jackson-core.version>
-        <jackson-annotations.version>2.13.2</jackson-annotations.version>
-        <jackson-databind.version>2.13.2.2</jackson-databind.version>
+        <jackson.version>2.13.4</jackson.version>
         <commons-text.version>1.4</commons-text.version>
         <simpleclient.version>0.6.0</simpleclient.version>
         <apollo.version>1.8.0</apollo.version>
@@ -59,7 +57,6 @@
         <curator.version>4.3.0</curator.version>
         <curator-test.version>2.12.0</curator-test.version>
         <etcd4j.version>2.18.0</etcd4j.version>
-        <jackson-module-afterburner.version>2.12.2</jackson-module-afterburner.version>
         <antlr.version>4.9.2</antlr.version>
         <freemarker.version>2.3.31</freemarker.version>
         <javaassist.version>3.25.0-GA</javaassist.version>
@@ -71,7 +68,7 @@
         <postgresql.version>42.4.1</postgresql.version>
         <jetcd.version>0.5.3</jetcd.version>
         <testcontainers.version>1.15.3</testcontainers.version>
-        <armeria.version>1.16.0</armeria.version>
+        <armeria.version>1.18.0</armeria.version>
         <awaitility.version>3.0.0</awaitility.version>
         <httpcore.version>4.4.13</httpcore.version>
         <commons-compress.version>1.21</commons-compress.version>
@@ -308,17 +305,17 @@
             <dependency>
                 <groupId>com.fasterxml.jackson.core</groupId>
                 <artifactId>jackson-core</artifactId>
-                <version>${jackson-core.version}</version>
+                <version>${jackson.version}</version>
             </dependency>
             <dependency>
                 <groupId>com.fasterxml.jackson.core</groupId>
                 <artifactId>jackson-annotations</artifactId>
-                <version>${jackson-annotations.version}</version>
+                <version>${jackson.version}</version>
             </dependency>
             <dependency>
                 <groupId>com.fasterxml.jackson.core</groupId>
                 <artifactId>jackson-databind</artifactId>
-                <version>${jackson-databind.version}</version>
+                <version>${jackson.version}</version>
             </dependency>
             <dependency>
                 <groupId>commons-codec</groupId>
@@ -379,12 +376,6 @@
             </dependency>
 
             <dependency>
-                <groupId>com.fasterxml.jackson.module</groupId>
-                <artifactId>jackson-module-afterburner</artifactId>
-                <version>${jackson-module-afterburner.version}</version>
-            </dependency>
-
-            <dependency>
                 <groupId>org.apache.skywalking</groupId>
                 <artifactId>banyandb-java-client</artifactId>
                 <version>${banyandb-java-client.version}</version>
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/HTTPServerTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/HTTPServerTest.java
index 68e5f90..70372a2 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/HTTPServerTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/HTTPServerTest.java
@@ -100,11 +100,6 @@
             WebClient.of().options(testHandlerURI).aggregate().get().status().code(),
             405
         );
-
-        Assert.assertEquals(
-            WebClient.of().head(testHandlerURI).aggregate().get().status().code(),
-            405
-        );
     }
 
     static class TestPostHandler {
diff --git a/oap-server/server-library/library-server/src/main/java/org/apache/skywalking/oap/server/library/server/http/HTTPServer.java b/oap-server/server-library/library-server/src/main/java/org/apache/skywalking/oap/server/library/server/http/HTTPServer.java
index f6749e1..536eca2 100644
--- a/oap-server/server-library/library-server/src/main/java/org/apache/skywalking/oap/server/library/server/http/HTTPServer.java
+++ b/oap-server/server-library/library-server/src/main/java/org/apache/skywalking/oap/server/library/server/http/HTTPServer.java
@@ -18,16 +18,17 @@
 
 package org.apache.skywalking.oap.server.library.server.http;
 
+import com.google.common.collect.Sets;
 import com.linecorp.armeria.common.HttpMethod;
 import com.linecorp.armeria.common.HttpResponse;
 import com.linecorp.armeria.common.HttpStatus;
 import com.linecorp.armeria.server.Route;
 import com.linecorp.armeria.server.ServerBuilder;
 import com.linecorp.armeria.server.docs.DocService;
+import com.linecorp.armeria.server.healthcheck.HealthCheckService;
 import com.linecorp.armeria.server.logging.LoggingService;
 import java.net.InetSocketAddress;
 import java.time.Duration;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import lombok.extern.slf4j.Slf4j;
@@ -39,7 +40,8 @@
 public class HTTPServer implements Server {
     private final HTTPServerConfig config;
     private ServerBuilder sb;
-    private final Set<HttpMethod> allowedMethods = new HashSet<>();
+    // Health check service, supports HEAD, GET method.
+    private final Set<HttpMethod> allowedMethods = Sets.newHashSet(HttpMethod.HEAD);
 
     public HTTPServer(HTTPServerConfig config) {
         this.config = config;
@@ -52,6 +54,7 @@
         sb = com.linecorp.armeria.server.Server
             .builder()
             .serviceUnder(contextPath + "/docs", DocService.builder().build())
+            .service("/internal/l7check", HealthCheckService.of())
             .workerGroup(config.getMaxThreads())
             .http(new InetSocketAddress(
                 config.getHost(),
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/pom.xml b/oap-server/server-query-plugin/query-graphql-plugin/pom.xml
index c9b2643..5f3a467 100644
--- a/oap-server/server-query-plugin/query-graphql-plugin/pom.xml
+++ b/oap-server/server-query-plugin/query-graphql-plugin/pom.xml
@@ -59,10 +59,6 @@
             <groupId>com.linecorp.armeria</groupId>
             <artifactId>armeria-graphql</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.module</groupId>
-            <artifactId>jackson-module-afterburner</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>io.kubernetes</groupId>
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/LogTestQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/LogTestQuery.java
index 95a30ae..50921c6 100644
--- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/LogTestQuery.java
+++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/LogTestQuery.java
@@ -55,7 +55,7 @@
         if (!config.isEnableLogTestTool()) {
             throw new IllegalAccessException(
                 "LAL debug tool is not enabled. To enable, please set SW_QUERY_GRAPHQL_ENABLE_LOG_TEST_TOOL=true," +
-                    "for more details, refer to https://skywalking.apache.org/docs/main/latest/en/setup/backend/configuration-vocabulary/");
+                    "for more details, refer to https://skywalking.apache.org/docs/main/next/en/setup/backend/configuration-vocabulary/");
         }
 
         requireNonNull(request, "request");
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/UIConfigurationManagement.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/UIConfigurationManagement.java
index 5bbd0ba..2b94473 100644
--- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/UIConfigurationManagement.java
+++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/UIConfigurationManagement.java
@@ -68,7 +68,7 @@
                                        .id("")
                                        .message(
                                            "The dashboard creation has been disabled. Check SW_ENABLE_UPDATE_UI_TEMPLATE on " +
-                                               "configuration-vocabulary.md(https://skywalking.apache.org/docs/main/latest/en/setup/backend/configuration-vocabulary/#configuration-vocabulary) " +
+                                               "configuration-vocabulary.md(https://skywalking.apache.org/docs/main/next/en/setup/backend/configuration-vocabulary/#configuration-vocabulary) " +
                                                "to activate it.")
                                        .build();
         }
@@ -85,7 +85,7 @@
                                        .id(setting.getId())
                                        .message(
                                            "The dashboard update has been disabled. Check SW_ENABLE_UPDATE_UI_TEMPLATE on " +
-                                               "configuration-vocabulary.md(https://skywalking.apache.org/docs/main/latest/en/setup/backend/configuration-vocabulary/#configuration-vocabulary) " +
+                                               "configuration-vocabulary.md(https://skywalking.apache.org/docs/main/next/en/setup/backend/configuration-vocabulary/#configuration-vocabulary) " +
                                                "to activate it.")
                                        .build();
         }
@@ -98,7 +98,7 @@
                                        .id(id)
                                        .message(
                                            "The dashboard disable has been disabled. Check SW_ENABLE_UPDATE_UI_TEMPLATE on " +
-                                               "configuration-vocabulary.md(https://skywalking.apache.org/docs/main/latest/en/setup/backend/configuration-vocabulary/#configuration-vocabulary) " +
+                                               "configuration-vocabulary.md(https://skywalking.apache.org/docs/main/next/en/setup/backend/configuration-vocabulary/#configuration-vocabulary) " +
                                                "to activate it.")
                                        .build();
         }
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
index aba0de1..2c541be 160000
--- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
+++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/resources/query-protocol
@@ -1 +1 @@
-Subproject commit aba0de18fc934f6a20fd075ffe1a3df01ad1c80f
+Subproject commit 2c541beae657306127f07af127d179492a1d7cf9
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-root.json
index 7a25562..f8fdce7 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-root.json
@@ -79,7 +79,7 @@
             "content": "Provide Browser-Side monitoring of Web-App, Versions and Pages, through Apache SkyWalking Client JS.",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/service-agent/browser-agent/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/service-agent/browser-agent/"
           },
           "moved": false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/general/general-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/general/general-root.json
index 5c675f2..414523c 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/general/general-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/general/general-root.json
@@ -262,7 +262,7 @@
             "content": "Observe Service through telemetry data collected from SkyWalking Agent.",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/service-agent/server-agents/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/service-agent/server-agents/"
           },
           "moved": false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/general/general-service.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/general/general-service.json
index 21f6129..0a44e48 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/general/general-service.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/general/general-service.json
@@ -914,7 +914,7 @@
                     "content": "eBPF Profiling support services written in C, C++, Golang, and Rust. SkyWalking Rover provides this profiling capability. ",
                     "fontSize": 14,
                     "textAlign": "left",
-                    "url": "https://skywalking.apache.org/docs/skywalking-rover/latest/readme/"
+                    "url": "https://skywalking.apache.org/docs/skywalking-rover/next/readme/"
                   }
                 },
                 {
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s/k8s-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s/k8s-root.json
index 8c0dd8b..1383779 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s/k8s-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s/k8s-root.json
@@ -95,7 +95,7 @@
             "content": "Provide monitoring of the status and resources of the K8S Cluster.",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-k8s-monitoring/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/backend/backend-k8s-monitoring/"
           },
           "moved": false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-root.json
index 25a9ef6..f9b6963 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-root.json
@@ -82,7 +82,7 @@
             "content": "Observe Service status and resources from Kubernetes.",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-k8s-monitoring/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/backend/backend-k8s-monitoring/"
           },
           "moved": false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-service.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-service.json
index 45875a5..55d0e3f 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-service.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-service.json
@@ -247,7 +247,7 @@
                     "content": "eBPF Profiling support services written in C, C++, Golang, and Rust. SkyWalking Rover provides this profiling capability. ",
                     "fontSize": 14,
                     "textAlign": "left",
-                    "url": "https://skywalking.apache.org/docs/skywalking-rover/latest/readme/"
+                    "url": "https://skywalking.apache.org/docs/skywalking-rover/next/readme/"
                   }
                 }
               ]
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh/mesh-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh/mesh-root.json
index e483e27..5b2c6a6 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh/mesh-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh/mesh-root.json
@@ -226,7 +226,7 @@
             "content": "Observe Service Mesh through telemetry data collected from Envoy Access Log Service (ALS).",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/envoy/als_setting/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/envoy/als_setting/"
           },
           "moved": false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh/mesh-service.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh/mesh-service.json
index 113267c..c633adf 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh/mesh-service.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh/mesh-service.json
@@ -881,7 +881,7 @@
                     "content": "eBPF Profiling support services written in C, C++, Golang, and Rust. SkyWalking Rover provides this profiling capability. ",
                     "fontSize": 14,
                     "textAlign": "left",
-                    "url": "https://skywalking.apache.org/docs/skywalking-rover/latest/readme/"
+                    "url": "https://skywalking.apache.org/docs/skywalking-rover/next/readme/"
                   }
                 }
               ]
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_cp/mesh-control-plane-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_cp/mesh-control-plane-root.json
index 3e3c99a..fa33aa0 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_cp/mesh-control-plane-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_cp/mesh-control-plane-root.json
@@ -95,7 +95,7 @@
             "content": "Provide monitoring of the behavior of Istio through its self-monitoring metrics.",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/istio/readme/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/istio/readme/"
           },
           "moved": false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_dp/mesh-data-plane-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_dp/mesh-data-plane-root.json
index 3fa911a..1472696 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_dp/mesh-data-plane-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_dp/mesh-data-plane-root.json
@@ -66,7 +66,7 @@
             "content": "Observe Envoy Proxy through Envoy Metrics Service.",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/envoy/metrics_service_setting/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/envoy/metrics_service_setting/"
           },
           "moved": false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_dp/mesh-data-plane-service.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_dp/mesh-data-plane-service.json
index 2ab485f..71b6337 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_dp/mesh-data-plane-service.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mesh_dp/mesh-data-plane-service.json
@@ -86,7 +86,7 @@
                     "content": "eBPF Profiling support services written in C, C++, Golang, and Rust. SkyWalking Rover provides this profiling capability. ",
                     "fontSize": 14,
                     "textAlign": "left",
-                    "url": "https://skywalking.apache.org/docs/skywalking-rover/latest/readme/"
+                    "url": "https://skywalking.apache.org/docs/skywalking-rover/next/readme/"
                   }
                 },
                 {
@@ -109,4 +109,4 @@
       "isRoot": false
     }
   }
-]
\ No newline at end of file
+]
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mysql/mysql-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mysql/mysql-root.json
index b28ae7f..5aab25a 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/mysql/mysql-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/mysql/mysql-root.json
@@ -49,7 +49,7 @@
                   "content":"Provide MySQL Server monitoring through OpenTelemetry's Prometheus Receiver",
                   "fontSize":14,
                   "textAlign":"left",
-                  "url":"https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-mysql-monitoring/"
+                  "url":"https://skywalking.apache.org/docs/main/next/en/setup/backend/backend-mysql-monitoring/"
                }
             }
          ],
@@ -60,4 +60,4 @@
          "isRoot":true
       }
    }
-]
\ No newline at end of file
+]
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/os_linux/linux-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/os_linux/linux-root.json
index 435a85d..f88ed06 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/os_linux/linux-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/os_linux/linux-root.json
@@ -72,7 +72,7 @@
             "content": "Provide Linux OS monitoring.",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-vm-monitoring/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/backend/backend-vm-monitoring/"
           },
           "moved": false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/postgresql/postgresql-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/postgresql/postgresql-root.json
index 7604011..6291485 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/postgresql/postgresql-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/postgresql/postgresql-root.json
@@ -33,7 +33,7 @@
                   "content":"Provide PostgreSQL monitoring through OpenTelemetry's Prometheus Receiver",
                   "fontSize":14,
                   "textAlign":"left",
-                  "url":"https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-postgresql-monitoring/"
+                  "url":"https://skywalking.apache.org/docs/main/next/en/setup/backend/backend-postgresql-monitoring/"
                }
             },
             {
@@ -60,4 +60,4 @@
          "isRoot":true
       }
    }
-]
\ No newline at end of file
+]
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/so11y_oap/so11y-service.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/so11y_oap/so11y-service.json
index 42f5d98..30e21bd 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/so11y_oap/so11y-service.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/so11y_oap/so11y-service.json
@@ -77,7 +77,7 @@
             "content": "The OAP backend cluster itself is a distributed streaming process system, this is the monitoring for the OAP backend itself.",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-telemetry/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/backend/backend-telemetry/"
           },
           "moved": false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/so11y_satellite/so11y-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/so11y_satellite/so11y-root.json
index 4d96efb..a27d0dd 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/so11y_satellite/so11y-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/so11y_satellite/so11y-root.json
@@ -241,7 +241,7 @@
             "content":"Satellite: an open-source agent designed for the cloud-native infrastructures, which provides a low-cost, high-efficient, and more secure way to collect telemetry data. It is the recommended load balancer for telemetry collecting.",
             "fontSize":14,
             "textAlign":"left",
-            "url":"https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-load-balancer/"
+            "url":"https://skywalking.apache.org/docs/main/next/en/setup/backend/backend-load-balancer/"
           },
           "moved":false
         }
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/virtual_database/virtual-database-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/virtual_database/virtual-database-root.json
index 7a4e731..6f23738 100644
--- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/virtual_database/virtual-database-root.json
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/virtual_database/virtual-database-root.json
@@ -86,7 +86,7 @@
             "content": "Observe the Virtual Database which is conjectured by language agent through various plugins.",
             "fontSize": 14,
             "textAlign": "left",
-            "url": "https://skywalking.apache.org/docs/main/latest/en/setup/service-agent/virtual-database/"
+            "url": "https://skywalking.apache.org/docs/main/next/en/setup/service-agent/virtual-database/"
           },
           "moved": false
         }
diff --git a/pom.xml b/pom.xml
index 00c8fdc..aaf2228 100755
--- a/pom.xml
+++ b/pom.xml
@@ -156,7 +156,7 @@
 
         <!-- core lib dependency -->
         <grpc.version>1.49.0</grpc.version>
-        <netty.version>4.1.77.Final</netty.version>
+        <netty.version>4.1.81.Final</netty.version>
         <netty-tcnative-boringssl-static.version>2.0.52.Final</netty-tcnative-boringssl-static.version>
         <gson.version>2.9.0</gson.version>
         <os-maven-plugin.version>1.6.2</os-maven-plugin.version>