You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/03/23 03:03:26 UTC

[shardingsphere] branch master updated: add metrics e2e test for JDBC that use agent (#24769)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 858305dc04b add metrics e2e test for JDBC that use agent (#24769)
858305dc04b is described below

commit 858305dc04b8ceb19b68a56f558b2659d864c722
Author: jiangML <10...@qq.com>
AuthorDate: Thu Mar 23 11:03:19 2023 +0800

    add metrics e2e test for JDBC that use agent (#24769)
---
 .github/workflows/e2e-agent.yml                    |   3 +
 test/e2e/agent/jdbc-project/pom.xml                |   6 -
 .../agent/jdbc/project/JdbcProjectApplication.java |  20 ---
 .../jdbc/project/controller/OrderController.java   |   7 +-
 .../e2e/agent/jdbc/project/mapper/OrderMapper.java |  97 ---------------
 .../agent/jdbc/project/service/OrderService.java   |   3 +-
 .../project/service/impl/OrderServiceImpl.java     | 134 +++++++++++++++------
 .../agent/jdbc/project/vo/response/HttpResult.java |   1 -
 .../jdbc/project/vo/{ => response}/ResponseVo.java |   2 +-
 .../resources/META-INF/mappers/OrderMapper.xml     |  73 -----------
 .../src/main/resources/application.yml             |   4 -
 .../e2e/agent/common/AgentTestActionExtension.java |   7 +-
 .../e2e/agent/common/env/E2ETestEnvironment.java   |  17 +--
 test/e2e/agent/plugins/logging/file/pom.xml        |  14 +--
 .../file/src/test/resources/docker/jdbc/Dockerfile |   2 +-
 test/e2e/agent/plugins/metrics/prometheus/pom.xml  | 130 +++++++++++++++++++-
 .../test/e2e/agent/metrics/MetricsPluginE2EIT.java |   3 +-
 .../metrics/cases/IntegrationTestCasesLoader.java  |   5 +-
 .../test/resources/cases/{ => jdbc}/build_info.xml |   0
 .../jdbc_meta_data_info.xml}                       |   5 +-
 .../cases/{build_info.xml => jdbc/jdbc_state.xml}  |   4 +-
 .../jdbc_statement_execute_errors_total.xml}       |   6 +-
 .../jdbc_statement_execute_latency_millis.xml}     |   4 +-
 .../jdbc_statement_execute_total.xml}              |   6 +-
 .../jdbc_transactions_total.xml}                   |   6 +-
 .../cases/{ => jdbc}/parsed_sql_total.xml          |   1 -
 .../cases/{ => jdbc}/routed_result_total.xml       |   0
 .../cases/{ => jdbc}/routed_sql_total.xml          |   0
 .../resources/cases/{ => proxy}/build_info.xml     |   0
 .../cases/{ => proxy}/parsed_sql_total.xml         |   0
 .../{ => proxy}/proxy_current_connections.xml      |   0
 .../{ => proxy}/proxy_execute_errors_total.xml     |   0
 .../{ => proxy}/proxy_execute_latency_millis.xml   |   0
 .../cases/{ => proxy}/proxy_meta_data_info.xml     |   0
 .../cases/{ => proxy}/proxy_requests_total.xml     |   0
 .../resources/cases/{ => proxy}/proxy_state.xml    |   0
 .../cases/{ => proxy}/proxy_transactions_total.xml |   0
 .../cases/{ => proxy}/routed_result_total.xml      |   0
 .../cases/{ => proxy}/routed_sql_total.xml         |   0
 .../src/test/resources/docker/jdbc/Dockerfile      |   2 +-
 .../resources/docker/jdbc/conf}/application.yml    |   9 +-
 .../conf/config-db.yaml => jdbc/conf/config.yaml}  |  18 +--
 .../src/test/resources/docker/jdbc/conf/start.sh   |  54 +++++++++
 .../resources/docker/{ => jdbc}/docker-compose.yml |  27 ++---
 .../docker/prometheus/conf/prometheus.yml          |   2 +-
 .../test/resources/docker/proxy}/Dockerfile        |   4 +-
 .../resources/docker/proxy/conf/config-db.yaml     |   4 +-
 .../docker/{ => proxy}/docker-compose.yml          |  16 +--
 .../src/test/resources/env/engine-env.properties   |   8 ++
 49 files changed, 366 insertions(+), 338 deletions(-)

diff --git a/.github/workflows/e2e-agent.yml b/.github/workflows/e2e-agent.yml
index dc1ab5f6ec4..eef95775029 100644
--- a/.github/workflows/e2e-agent.yml
+++ b/.github/workflows/e2e-agent.yml
@@ -78,6 +78,9 @@ jobs:
           - adapter: jdbc
             feature: logging
             plugin: file
+          - adapter: jdbc
+            feature: metrics
+            plugin: prometheus
     steps:
       - uses: actions/checkout@v3
       - uses: actions/setup-java@v3
diff --git a/test/e2e/agent/jdbc-project/pom.xml b/test/e2e/agent/jdbc-project/pom.xml
index 6f5cb37933c..8a17647de06 100644
--- a/test/e2e/agent/jdbc-project/pom.xml
+++ b/test/e2e/agent/jdbc-project/pom.xml
@@ -29,7 +29,6 @@
     
     <properties>
         <spring-boot.version>2.7.9</spring-boot.version>
-        <mybatis-spring-boot-starter.version>2.3.0</mybatis-spring-boot-starter.version>
     </properties>
     
     <dependencyManagement>
@@ -72,11 +71,6 @@
             <artifactId>logback-classic</artifactId>
             <scope>compile</scope>
         </dependency>
-        <dependency>
-            <groupId>org.mybatis.spring.boot</groupId>
-            <artifactId>mybatis-spring-boot-starter</artifactId>
-            <version>${mybatis-spring-boot-starter.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
             <artifactId>shardingsphere-jdbc-core</artifactId>
diff --git a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/JdbcProjectApplication.java b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/JdbcProjectApplication.java
index e0eded93d49..57da8af9358 100644
--- a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/JdbcProjectApplication.java
+++ b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/JdbcProjectApplication.java
@@ -17,35 +17,15 @@
 
 package org.apache.shardingsphere.test.e2e.agent.jdbc.project;
 
-import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Bean;
-import org.springframework.jdbc.datasource.DataSourceTransactionManager;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-
-import javax.sql.DataSource;
 
 /**
  * Jdbc project application.
  */
 @SpringBootApplication
-@MapperScan("org.apache.shardingsphere.test.e2e.agent.jdbc.project.mapper")
-@EnableTransactionManagement
 public class JdbcProjectApplication {
     
-    /**
-     * Create platform transaction manager bean.
-     *
-     * @param dataSource data source
-     * @return platform transaction manager
-     */
-    @Bean
-    public PlatformTransactionManager txManager(final DataSource dataSource) {
-        return new DataSourceTransactionManager(dataSource);
-    }
-    
     // CHECKSTYLE:OFF
     public static void main(final String[] args) {
         SpringApplication.run(JdbcProjectApplication.class, args);
diff --git a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/controller/OrderController.java b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/controller/OrderController.java
index 988251b1a40..99031d63238 100644
--- a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/controller/OrderController.java
+++ b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/controller/OrderController.java
@@ -70,7 +70,12 @@ public class OrderController extends AbstractRestController {
         long index = 0;
         while (index++ < 100) {
             OrderEntity order = new OrderEntity(index, index, "OK");
-            orderService.insert(order, 0 == (index & 1) ? StatementType.STATEMENT : StatementType.PREPARED);
+            orderService.insert(order, 0 == (index & 1) ? StatementType.STATEMENT : StatementType.PREPARED, 0 == index % 5);
+        }
+        index = 0;
+        while (index++ < 10) {
+            OrderEntity order = new OrderEntity(index, index, "Fail");
+            orderService.insert(order, 0 == (index & 1) ? StatementType.STATEMENT : StatementType.PREPARED, false);
         }
         return success();
     }
diff --git a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/mapper/OrderMapper.java b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/mapper/OrderMapper.java
deleted file mode 100644
index 56d21562ef0..00000000000
--- a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/mapper/OrderMapper.java
+++ /dev/null
@@ -1,97 +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.shardingsphere.test.e2e.agent.jdbc.project.mapper;
-
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import org.apache.shardingsphere.test.e2e.agent.jdbc.project.entity.OrderEntity;
-
-import java.util.Collection;
-
-/**
- * Order mapper.
- */
-@Mapper
-public interface OrderMapper {
-    
-    /**
-     * Create table.
-     */
-    void createTable();
-    
-    /**
-     * Drop table.
-     */
-    void dropTable();
-    
-    /**
-     * Insert with statement.
-     *
-     * @param order order
-     */
-    void insertWithStatement(OrderEntity order);
-    
-    /**
-     * Insert with prepared statement.
-     *
-     * @param order order
-     */
-    void insertWithPreparedStatement(OrderEntity order);
-    
-    /**
-     * Delete with statement.
-     *
-     * @param orderId order id
-     */
-    void deleteWithStatement(@Param("orderId") Long orderId);
-    
-    /**
-     * Delete with prepared statement.
-     *
-     * @param orderId order id
-     */
-    void deleteWithPreparedStatement(@Param("orderId") Long orderId);
-    
-    /**
-     * Select all with statement.
-     *
-     * @return orders
-     */
-    Collection<OrderEntity> selectAllWithStatement();
-    
-    /**
-     * Select all with prepared statement.
-     *
-     * @return orders
-     */
-    Collection<OrderEntity> selectAllWithPreparedStatement();
-    
-    /**
-     * Update with statement.
-     *
-     * @param order order
-     */
-    void updateWithStatement(OrderEntity order);
-    
-    /**
-     * Update with prepared statement.
-     *
-     * @param order order
-     */
-    void updateWithPreparedStatement(OrderEntity order);
-}
diff --git a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/service/OrderService.java b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/service/OrderService.java
index ee9a4b7ab36..baf57b8cd94 100644
--- a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/service/OrderService.java
+++ b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/service/OrderService.java
@@ -42,8 +42,9 @@ public interface OrderService {
      *
      * @param order order
      * @param statementType statement type
+     * @param isRollback is rollback
      */
-    void insert(OrderEntity order, StatementType statementType);
+    void insert(OrderEntity order, StatementType statementType, boolean isRollback);
     
     /**
      * Delete.
diff --git a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/service/impl/OrderServiceImpl.java b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/service/impl/OrderServiceImpl.java
index e6061cddbb0..a9a44114ad7 100644
--- a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/service/impl/OrderServiceImpl.java
+++ b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/service/impl/OrderServiceImpl.java
@@ -19,12 +19,19 @@ package org.apache.shardingsphere.test.e2e.agent.jdbc.project.service.impl;
 
 import org.apache.shardingsphere.test.e2e.agent.jdbc.project.entity.OrderEntity;
 import org.apache.shardingsphere.test.e2e.agent.jdbc.project.enums.StatementType;
-import org.apache.shardingsphere.test.e2e.agent.jdbc.project.mapper.OrderMapper;
 import org.apache.shardingsphere.test.e2e.agent.jdbc.project.service.OrderService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
 
 /**
  * Order service impl.
@@ -33,69 +40,116 @@ import java.util.Collection;
 public class OrderServiceImpl implements OrderService {
     
     @Resource
-    private OrderMapper orderMapper;
+    private DataSource dataSource;
     
     @Override
     public void createTable() {
-        orderMapper.createTable();
+        String sql = "CREATE TABLE IF NOT EXISTS t_order (order_id BIGINT NOT NULL, user_id BIGINT DEFAULT NULL, status VARCHAR(32) DEFAULT NULL, PRIMARY KEY (order_id))";
+        execute(sql, true, false);
     }
     
     @Override
     public void dropTable() {
-        orderMapper.dropTable();
+        String sql = "DROP TABLE IF EXISTS t_order";
+        execute(sql, true, false);
     }
     
     @Override
-    public void insert(final OrderEntity order, final StatementType statementType) {
-        switch (statementType) {
-            case STATEMENT:
-                orderMapper.insertWithStatement(order);
-                break;
-            case PREPARED:
-                orderMapper.insertWithPreparedStatement(order);
-                break;
-            default:
-                throw new UnsupportedOperationException("Unsupported operation");
+    public void insert(final OrderEntity order, final StatementType statementType, final boolean isRollback) {
+        if (StatementType.STATEMENT == statementType) {
+            String sql = "INSERT INTO t_order (order_id, user_id, status) VALUES (?, ?, ?)";
+            try (Connection connection = dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
+                connection.setAutoCommit(false);
+                preparedStatement.setLong(1, order.getOrderId());
+                preparedStatement.setLong(2, order.getUserId());
+                preparedStatement.setString(3, order.getStatus());
+                preparedStatement.executeUpdate();
+                if (isRollback) {
+                    connection.rollback();
+                } else {
+                    connection.commit();
+                }
+            } catch (final SQLException ignored) {
+            }
+        } else if (StatementType.PREPARED == statementType) {
+            String sql = String.format("INSERT INTO t_order (order_id, user_id, status) VALUES (%d, %d, '%s')", order.getOrderId(), order.getUserId(), order.getStatus());
+            execute(sql, false, isRollback);
         }
     }
     
     @Override
-    public void delete(final Long id, final StatementType statementType) {
-        switch (statementType) {
-            case STATEMENT:
-                orderMapper.deleteWithStatement(id);
-                break;
-            case PREPARED:
-                orderMapper.deleteWithPreparedStatement(id);
-                break;
-            default:
-                throw new UnsupportedOperationException("Unsupported operation");
+    public void delete(final Long orderId, final StatementType statementType) {
+        if (StatementType.STATEMENT == statementType) {
+            String sql = "DELETE FROM t_order WHERE order_id=?";
+            try (Connection connection = dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+                preparedStatement.setLong(1, orderId);
+                preparedStatement.executeUpdate();
+            } catch (final SQLException ignored) {
+            }
+        } else if (StatementType.PREPARED == statementType) {
+            String sql = String.format("DELETE FROM t_order WHERE order_id=%d", orderId);
+            execute(sql, true, false);
         }
     }
     
     @Override
     public void update(final OrderEntity order, final StatementType statementType) {
-        switch (statementType) {
-            case STATEMENT:
-                orderMapper.updateWithStatement(order);
-                break;
-            case PREPARED:
-                orderMapper.updateWithPreparedStatement(order);
-                break;
-            default:
-                throw new UnsupportedOperationException("Unsupported operation");
+        if (StatementType.STATEMENT == statementType) {
+            String sql = "UPDATE t_order SET status = ? WHERE order_id =?";
+            try (Connection connection = dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
+                connection.setAutoCommit(false);
+                preparedStatement.setString(1, order.getStatus());
+                preparedStatement.setLong(2, order.getOrderId());
+                preparedStatement.executeUpdate();
+                connection.commit();
+            } catch (final SQLException ignored) {
+            }
+        } else if (StatementType.PREPARED == statementType) {
+            String sql = String.format("UPDATE t_order SET status = '%s' WHERE order_id=%d", order.getStatus(), order.getOrderId());
+            execute(sql, false, false);
         }
     }
     
     @Override
     public Collection<OrderEntity> selectAll(final StatementType statementType) {
-        switch (statementType) {
-            case STATEMENT:
-                return orderMapper.selectAllWithStatement();
-            case PREPARED:
-                return orderMapper.selectAllWithPreparedStatement();
-            default:
-                throw new UnsupportedOperationException("Unsupported operation");
+        String sql = "SELECT * FROM t_order";
+        if (StatementType.STATEMENT == statementType) {
+            try (Connection connection = dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+                return getOrders(preparedStatement.executeQuery());
+            } catch (final SQLException ignored) {
+            }
+        } else if (StatementType.PREPARED == statementType) {
+            try (Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement()) {
+                return getOrders(statement.executeQuery(sql));
+            } catch (final SQLException ignored) {
+            }
+        }
+        return Collections.emptyList();
+    }
+    
+    private Collection<OrderEntity> getOrders(final ResultSet resultSet) throws SQLException {
+        Collection<OrderEntity> result = new LinkedList<>();
+        while (resultSet.next()) {
+            OrderEntity orderEntity = new OrderEntity(resultSet.getLong(1), resultSet.getLong(2), resultSet.getString(3));
+            result.add(orderEntity);
+        }
+        return result;
+    }
+    
+    private void execute(final String sql, final boolean autoCommit, final boolean isRollback) {
+        try (Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement()) {
+            if (autoCommit) {
+                statement.execute(sql);
+            } else {
+                connection.setAutoCommit(false);
+                statement.execute(sql);
+                if (isRollback) {
+                    connection.rollback();
+                } else {
+                    connection.commit();
+                }
+            }
+        } catch (final SQLException ignored) {
         }
     }
 }
diff --git a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/response/HttpResult.java b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/response/HttpResult.java
index 7bbb0557f8c..33df77b594c 100644
--- a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/response/HttpResult.java
+++ b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/response/HttpResult.java
@@ -42,5 +42,4 @@ public class HttpResult<T> implements Serializable {
         this.message = message;
         this.data = data;
     }
-    
 }
diff --git a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/ResponseVo.java b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/response/ResponseVo.java
similarity index 98%
rename from test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/ResponseVo.java
rename to test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/response/ResponseVo.java
index 95a075050a3..27f5f5760bb 100644
--- a/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/ResponseVo.java
+++ b/test/e2e/agent/jdbc-project/src/main/java/org/apache/shardingsphere/test/e2e/agent/jdbc/project/vo/response/ResponseVo.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.agent.jdbc.project.vo;
+package org.apache.shardingsphere.test.e2e.agent.jdbc.project.vo.response;
 
 import lombok.Getter;
 import lombok.Setter;
diff --git a/test/e2e/agent/jdbc-project/src/main/resources/META-INF/mappers/OrderMapper.xml b/test/e2e/agent/jdbc-project/src/main/resources/META-INF/mappers/OrderMapper.xml
deleted file mode 100644
index 74d200ace3a..00000000000
--- a/test/e2e/agent/jdbc-project/src/main/resources/META-INF/mappers/OrderMapper.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?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.
-  -->
-
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.apache.shardingsphere.test.e2e.agent.jdbc.project.mapper.OrderMapper">
-    
-    <resultMap id="BaseResultMap" type="org.apache.shardingsphere.test.e2e.agent.jdbc.project.entity.OrderEntity">
-        <id column="order_id" jdbcType="BIGINT" property="orderId" />
-        <result column="user_id" jdbcType="BIGINT" property="userId" />
-        <result column="status" property="status" />
-    </resultMap>
-    
-    <update id="createTable">
-        CREATE TABLE IF NOT EXISTS t_order (
-                order_id BIGINT NOT NULL,
-                user_id BIGINT DEFAULT NULL,
-                status VARCHAR(32) DEFAULT NULL,
-                PRIMARY KEY (order_id)
-            );
-    </update>
-    
-    <update id="dropTable">
-        DROP TABLE IF EXISTS t_order;
-    </update>
-    
-    <insert id="insertWithStatement" parameterType="org.apache.shardingsphere.test.e2e.agent.jdbc.project.entity.OrderEntity" statementType="STATEMENT">
-        insert into t_order(order_id, user_id, status) value (${orderId}, ${userId}, '${status}')
-    </insert>
-    
-    <insert id="insertWithPreparedStatement" parameterType="org.apache.shardingsphere.test.e2e.agent.jdbc.project.entity.OrderEntity" statementType="PREPARED">
-        insert into t_order(order_id, user_id, status) value (#{orderId}, #{userId}, #{status})
-    </insert>
-    
-    <delete id="deleteWithStatement" parameterType="java.lang.Long" statementType="STATEMENT">
-        delete from t_order where order_id=${orderId}
-    </delete>
-    
-    <delete id="deleteWithPreparedStatement" parameterType="java.lang.Long" statementType="PREPARED">
-        delete from t_order where order_id=#{orderId}
-    </delete>
-    
-    <select id="selectAllWithStatement" resultMap="BaseResultMap" statementType="STATEMENT">
-        select * from t_order
-    </select>
-    
-    <select id="selectAllWithPreparedStatement" resultMap="BaseResultMap" statementType="PREPARED">
-        select * from t_order
-    </select>
-    
-    <update id="updateWithStatement" parameterType="org.apache.shardingsphere.test.e2e.agent.jdbc.project.entity.OrderEntity" statementType="STATEMENT">
-        update t_order set status='${status}' where order_id=${orderId}
-    </update>
-    
-    <update id="updateWithPreparedStatement" parameterType="org.apache.shardingsphere.test.e2e.agent.jdbc.project.entity.OrderEntity" statementType="PREPARED">
-        update t_order set status=#{status} where order_id=#{orderId}
-    </update>
-    
-</mapper>
diff --git a/test/e2e/agent/jdbc-project/src/main/resources/application.yml b/test/e2e/agent/jdbc-project/src/main/resources/application.yml
index 00c04692381..c4721e30e93 100644
--- a/test/e2e/agent/jdbc-project/src/main/resources/application.yml
+++ b/test/e2e/agent/jdbc-project/src/main/resources/application.yml
@@ -18,10 +18,6 @@
 server:
   port: 80
 
-mybatis:
-  mapper-locations: classpath*:META-INF/mappers/*Mapper.xml
-  type-aliases-package: org.apache.shardingsphere.test.e2e.agent.jdbc.project.entity
-
 logging:
   config: classpath:logback.xml
 
diff --git a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/AgentTestActionExtension.java b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/AgentTestActionExtension.java
index 4bd822708a5..e8cdb037406 100644
--- a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/AgentTestActionExtension.java
+++ b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/AgentTestActionExtension.java
@@ -32,8 +32,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assumptions.assumeFalse;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
 /**
@@ -57,11 +55,8 @@ public final class AgentTestActionExtension implements BeforeEachCallback {
     
     private void checkEnvironment() {
         assumeTrue(E2ETestEnvironment.getInstance().isEnvironmentPrepared());
-        assumeFalse(E2ETestEnvironment.getInstance().isInitializationFailed());
         E2ETestEnvironment.getInstance().prepareEnvironment();
-        if (E2ETestEnvironment.getInstance().isAdaptedProxy()) {
-            assertNotNull(E2ETestEnvironment.getInstance().getDataSource());
-        }
+        assumeTrue(E2ETestEnvironment.getInstance().isInitialized());
     }
     
     private void requestProxy() {
diff --git a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/E2ETestEnvironment.java b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/E2ETestEnvironment.java
index 33d0c75859f..c744d348739 100644
--- a/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/E2ETestEnvironment.java
+++ b/test/e2e/agent/plugins/common/src/test/java/org/apache/shardingsphere/test/e2e/agent/common/env/E2ETestEnvironment.java
@@ -34,6 +34,7 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 @Getter
 @Slf4j
@@ -47,10 +48,12 @@ public final class E2ETestEnvironment {
     
     private DataSource dataSource;
     
-    private boolean initializationFailed;
+    private boolean isInitialized;
     
     private boolean isAdaptedProxy;
     
+    private final AtomicBoolean prepareFlag = new AtomicBoolean();
+    
     private E2ETestEnvironment() {
         props = EnvironmentProperties.loadProperties("env/engine-env.properties");
         isEnvironmentPrepared = props.getProperty("it.env.value").equals(props.getProperty("it.env.type"));
@@ -70,12 +73,14 @@ public final class E2ETestEnvironment {
      * Prepare environment.
      */
     public void prepareEnvironment() {
-        if (isAdaptedProxy()) {
-            createDataSource();
+        if (!prepareFlag.compareAndSet(false, true)) {
             return;
         }
-        if (isEnvironmentPrepared && !initializationFailed) {
-            initializationFailed = !waitForJdbcEnvironmentReady();
+        if (isAdaptedProxy()) {
+            createDataSource();
+            isInitialized = null != dataSource;
+        } else {
+            isInitialized = waitForJdbcEnvironmentReady();
         }
     }
     
@@ -83,8 +88,6 @@ public final class E2ETestEnvironment {
         if (isEnvironmentPrepared && null == dataSource) {
             if (waitForProxyEnvironmentReady(props)) {
                 dataSource = createHikariCP(props);
-            } else {
-                initializationFailed = true;
             }
         }
     }
diff --git a/test/e2e/agent/plugins/logging/file/pom.xml b/test/e2e/agent/plugins/logging/file/pom.xml
index 2d0cdf9aa25..d323925aa23 100644
--- a/test/e2e/agent/plugins/logging/file/pom.xml
+++ b/test/e2e/agent/plugins/logging/file/pom.xml
@@ -86,7 +86,7 @@
                         <artifactId>maven-resources-plugin</artifactId>
                         <executions>
                             <execution>
-                                <id>copy-dockerfile</id>
+                                <id>copy-resources</id>
                                 <goals>
                                     <goal>copy-resources</goal>
                                 </goals>
@@ -100,18 +100,6 @@
                                                 <include>Dockerfile</include>
                                             </includes>
                                         </resource>
-                                    </resources>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>copy-resources</id>
-                                <goals>
-                                    <goal>copy-resources</goal>
-                                </goals>
-                                <phase>validate</phase>
-                                <configuration>
-                                    <outputDirectory>${docker.proxy.context.directory}</outputDirectory>
-                                    <resources>
                                         <resource>
                                             <directory>${project.basedir}/../../../../../../distribution/proxy/target/</directory>
                                             <includes>
diff --git a/test/e2e/agent/plugins/logging/file/src/test/resources/docker/jdbc/Dockerfile b/test/e2e/agent/plugins/logging/file/src/test/resources/docker/jdbc/Dockerfile
index d917f2ffd9e..e734fd67a0d 100644
--- a/test/e2e/agent/plugins/logging/file/src/test/resources/docker/jdbc/Dockerfile
+++ b/test/e2e/agent/plugins/logging/file/src/test/resources/docker/jdbc/Dockerfile
@@ -24,4 +24,4 @@ COPY shardingsphere-jdbc-app /opt/shardingsphere-jdbc-app
 ADD https://github.com/ufoscout/docker-compose-wait/releases/download/$WAIT_VERSION/wait /wait
 RUN chmod +x /wait && chmod +x /opt/shardingsphere-jdbc-app/start.sh
 WORKDIR /opt/shardingsphere-jdbc-app
-ENTRYPOINT ./start.sh $JAR_FILE_NAME --agent && tail -f ./logs/stdout.log
+ENTRYPOINT /wait && ./start.sh $JAR_FILE_NAME --agent && tail -f ./logs/stdout.log
diff --git a/test/e2e/agent/plugins/metrics/prometheus/pom.xml b/test/e2e/agent/plugins/metrics/prometheus/pom.xml
index 4fe42e44775..80e3fe331ac 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/pom.xml
+++ b/test/e2e/agent/plugins/metrics/prometheus/pom.xml
@@ -30,6 +30,11 @@
     <properties>
         <maven.deploy.skip>true</maven.deploy.skip>
         <mysql-connector-java.version>8.0.31</mysql-connector-java.version>
+        
+        <docker.proxy.context.directory>target/proxy</docker.proxy.context.directory>
+        <docker.proxy.compose.file>${project.basedir}/src/test/resources/docker/proxy/docker-compose.yml</docker.proxy.compose.file>
+        <docker.jdbc.context.directory>target/jdbc</docker.jdbc.context.directory>
+        <docker.jdbc.compose.file>${project.basedir}/src/test/resources/docker/jdbc/docker-compose.yml</docker.jdbc.compose.file>
     </properties>
     
     <dependencies>
@@ -88,10 +93,19 @@
                                 </goals>
                                 <phase>validate</phase>
                                 <configuration>
-                                    <outputDirectory>target/</outputDirectory>
+                                    <outputDirectory>${docker.proxy.context.directory}</outputDirectory>
                                     <resources>
+                                        <resource>
+                                            <directory>${project.basedir}/src/test/resources/docker/proxy/</directory>
+                                            <includes>
+                                                <include>Dockerfile</include>
+                                            </includes>
+                                        </resource>
                                         <resource>
                                             <directory>${project.basedir}/../../../../../../distribution/proxy/target/</directory>
+                                            <includes>
+                                                <include>${docker.proxy.distribution.name}.tar.gz</include>
+                                            </includes>
                                         </resource>
                                     </resources>
                                 </configuration>
@@ -108,6 +122,8 @@
                             <buildArgs>
                                 <APP_NAME>${docker.proxy.distribution.name}</APP_NAME>
                             </buildArgs>
+                            <contextDirectory>${docker.proxy.context.directory}</contextDirectory>
+                            <dockerfile>${docker.proxy.context.directory}/Dockerfile</dockerfile>
                         </configuration>
                         <executions>
                             <execution>
@@ -129,7 +145,115 @@
                                 </goals>
                                 <phase>pre-integration-test</phase>
                                 <configuration>
-                                    <composeFile>${project.basedir}/src/test/resources/docker/docker-compose.yml</composeFile>
+                                    <composeFile>${docker.proxy.compose.file}</composeFile>
+                                    <detachedMode>true</detachedMode>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>agent-metrics-down</id>
+                                <goals>
+                                    <goal>down</goal>
+                                </goals>
+                                <phase>post-integration-test</phase>
+                                <configuration>
+                                    <composeFile>${docker.proxy.compose.file}</composeFile>
+                                    <removeVolumes>true</removeVolumes>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        
+        <profile>
+            <id>it.env.jdbc.prometheus</id>
+            <properties>
+                <it.env>prometheus</it.env>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-resources-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>copy-dockerfile</id>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <phase>validate</phase>
+                                <configuration>
+                                    <outputDirectory>${docker.jdbc.context.directory}</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${project.basedir}/src/test/resources/docker/jdbc</directory>
+                                            <includes>
+                                                <include>Dockerfile</include>
+                                            </includes>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>copy-resources</id>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <phase>validate</phase>
+                                <configuration>
+                                    <outputDirectory>${docker.jdbc.context.directory}/shardingsphere-jdbc-app</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${project.basedir}/../../../jdbc-project/target/</directory>
+                                            <includes>
+                                                <include>${docker.jdbc.distribution.name}.jar</include>
+                                            </includes>
+                                        </resource>
+                                        <resource>
+                                            <directory>${project.basedir}/src/test/resources/docker/jdbc/conf</directory>
+                                        </resource>
+                                        <resource>
+                                            <directory>${project.basedir}/../../../../../../distribution/agent/target/apache-shardingsphere-${project.version}-shardingsphere-agent-bin/</directory>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>com.spotify</groupId>
+                        <artifactId>dockerfile-maven-plugin</artifactId>
+                        <configuration>
+                            <repository>apache/shardingsphere-jdbc-agent-metrics-test</repository>
+                            <tag>${project.version}</tag>
+                            <tag>latest</tag>
+                            <buildArgs>
+                                <APP_NAME>${docker.jdbc.distribution.name}</APP_NAME>
+                            </buildArgs>
+                            <contextDirectory>${docker.jdbc.context.directory}</contextDirectory>
+                            <dockerfile>${docker.jdbc.context.directory}/Dockerfile</dockerfile>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>shardingsphere-jdbc-bin</id>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>com.dkanejs.maven.plugins</groupId>
+                        <artifactId>docker-compose-maven-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>agent-metrics-up</id>
+                                <goals>
+                                    <goal>up</goal>
+                                </goals>
+                                <phase>pre-integration-test</phase>
+                                <configuration>
+                                    <composeFile>${docker.jdbc.compose.file}</composeFile>
                                     <detachedMode>true</detachedMode>
                                 </configuration>
                             </execution>
@@ -140,7 +264,7 @@
                                 </goals>
                                 <phase>post-integration-test</phase>
                                 <configuration>
-                                    <composeFile>${project.basedir}/src/test/resources/docker/docker-compose.yml</composeFile>
+                                    <composeFile>${docker.jdbc.compose.file}</composeFile>
                                     <removeVolumes>true</removeVolumes>
                                 </configuration>
                             </execution>
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/MetricsPluginE2EIT.java b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/MetricsPluginE2EIT.java
index 510b26d9350..61b8e1b8fe0 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/MetricsPluginE2EIT.java
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/MetricsPluginE2EIT.java
@@ -81,7 +81,8 @@ public final class MetricsPluginE2EIT {
         
         @Override
         public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
-            return IntegrationTestCasesLoader.getInstance().loadIntegrationTestCases().stream().map(Arguments::of);
+            String adapter = E2ETestEnvironment.getInstance().getProps().getProperty("it.env.adapter", "proxy");
+            return IntegrationTestCasesLoader.getInstance().loadIntegrationTestCases(adapter).stream().map(Arguments::of);
         }
     }
 }
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCasesLoader.java b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCasesLoader.java
index 3ab4a1d9df5..d7e08f2771e 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCasesLoader.java
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/java/org/apache/shardingsphere/test/e2e/agent/metrics/cases/IntegrationTestCasesLoader.java
@@ -62,15 +62,16 @@ public final class IntegrationTestCasesLoader {
     /**
      * Load integration test cases.
      *
+     * @param adapter adapter proxy or jdbc
      * @return integration test cases
      */
     @SneakyThrows({IOException.class, URISyntaxException.class, JAXBException.class})
-    public Collection<MetricTestCase> loadIntegrationTestCases() {
+    public Collection<MetricTestCase> loadIntegrationTestCases(final String adapter) {
         if (null != integrationTestCases) {
             return integrationTestCases;
         }
         integrationTestCases = new LinkedList<>();
-        URL url = Objects.requireNonNull(IntegrationTestCasesLoader.class.getClassLoader().getResource("cases/"));
+        URL url = Objects.requireNonNull(IntegrationTestCasesLoader.class.getClassLoader().getResource(String.format("cases/%s", adapter)));
         Collection<File> files = getFiles(url);
         for (File each : files) {
             integrationTestCases.addAll(unmarshal(each.getPath()).getTestCases());
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/build_info.xml
similarity index 100%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/build_info.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_meta_data_info.xml
similarity index 75%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_meta_data_info.xml
index fd76020f6cb..037f344bf99 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_meta_data_info.xml
@@ -17,7 +17,8 @@
   -->
 
 <integration-test-cases>
-    <test-case metric-name="build_info" metric-type="gauge">
-        <query-assertion metric="build_info" query="build_info{name='ShardingSphere'}" />
+    <test-case metric-name="jdbc_meta_data_info" metric-type="gauge">
+        <query-assertion metric="jdbc_meta_data_info" query="jdbc_meta_data_info{}" />
+        <query-assertion metric="jdbc_meta_data_info" query="jdbc_meta_data_info{database='agent-metrics-db', type='storage_unit_count'}" />
     </test-case>
 </integration-test-cases>
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_state.xml
similarity index 86%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_state.xml
index fd76020f6cb..1a6e8696643 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_state.xml
@@ -17,7 +17,7 @@
   -->
 
 <integration-test-cases>
-    <test-case metric-name="build_info" metric-type="gauge">
-        <query-assertion metric="build_info" query="build_info{name='ShardingSphere'}" />
+    <test-case metric-name="jdbc_state" metric-type="gauge">
+        <query-assertion metric="jdbc_state" query="jdbc_state{}" />
     </test-case>
 </integration-test-cases>
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_errors_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_statement_execute_errors_total.xml
similarity index 64%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_errors_total.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_statement_execute_errors_total.xml
index 32347e8756d..b9eb6d15c54 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_errors_total.xml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_statement_execute_errors_total.xml
@@ -17,7 +17,9 @@
   -->
 
 <integration-test-cases>
-    <test-case metric-name="proxy_execute_errors_total" metric-type="counter">
-        <query-assertion metric="proxy_execute_errors_total" query="proxy_execute_errors_total{}" />
+    <test-case metric-name="jdbc_statement_execute_errors_total" metric-type="counter">
+        <query-assertion metric="jdbc_statement_execute_errors_total" query="jdbc_statement_execute_errors_total{}" />
+        <query-assertion metric="jdbc_statement_execute_errors_total" query="jdbc_statement_execute_errors_total{statement_type='prepared_statement'}" />
+        <query-assertion metric="jdbc_statement_execute_errors_total" query="jdbc_statement_execute_errors_total{statement_type='statement'}" />
     </test-case>
 </integration-test-cases>
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_latency_millis.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_statement_execute_latency_millis.xml
similarity index 80%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_latency_millis.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_statement_execute_latency_millis.xml
index 2acd0cb6b59..c4de8f29bd8 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_latency_millis.xml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_statement_execute_latency_millis.xml
@@ -17,7 +17,7 @@
   -->
 
 <integration-test-cases>
-    <test-case metric-name="proxy_execute_latency_millis" metric-type="histogram">
-        <query-assertion metric="proxy_execute_latency_millis_bucket" query="proxy_execute_latency_millis_bucket{}" />
+    <test-case metric-name="jdbc_statement_execute_latency_millis" metric-type="histogram">
+        <query-assertion metric="jdbc_statement_execute_latency_millis_bucket" query="jdbc_statement_execute_latency_millis_bucket{}" />
     </test-case>
 </integration-test-cases>
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_statement_execute_total.xml
similarity index 67%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_statement_execute_total.xml
index fd76020f6cb..3acd5744550 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_statement_execute_total.xml
@@ -17,7 +17,9 @@
   -->
 
 <integration-test-cases>
-    <test-case metric-name="build_info" metric-type="gauge">
-        <query-assertion metric="build_info" query="build_info{name='ShardingSphere'}" />
+    <test-case metric-name="jdbc_statement_execute_total" metric-type="counter">
+        <query-assertion metric="jdbc_statement_execute_total" query="jdbc_statement_execute_total{}" />
+        <query-assertion metric="jdbc_statement_execute_total" query="jdbc_statement_execute_total{statement_type='prepared_statement'}" />
+        <query-assertion metric="jdbc_statement_execute_total" query="jdbc_statement_execute_total{statement_type='statement'}" />
     </test-case>
 </integration-test-cases>
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_transactions_total.xml
similarity index 70%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_transactions_total.xml
index fd76020f6cb..7f8ebafea29 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/jdbc_transactions_total.xml
@@ -17,7 +17,9 @@
   -->
 
 <integration-test-cases>
-    <test-case metric-name="build_info" metric-type="gauge">
-        <query-assertion metric="build_info" query="build_info{name='ShardingSphere'}" />
+    <test-case metric-name="jdbc_transactions_total" metric-type="counter">
+        <query-assertion metric="jdbc_transactions_total" query="jdbc_transactions_total{}" />
+        <query-assertion metric="jdbc_transactions_total" query="jdbc_transactions_total{type='commit'}" />
+        <query-assertion metric="jdbc_transactions_total" query="jdbc_transactions_total{type='rollback'}" />
     </test-case>
 </integration-test-cases>
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/parsed_sql_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/parsed_sql_total.xml
similarity index 93%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/parsed_sql_total.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/parsed_sql_total.xml
index d5a0b8f7d4b..0f1794470a2 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/parsed_sql_total.xml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/parsed_sql_total.xml
@@ -22,6 +22,5 @@
         <query-assertion metric="parsed_sql_total" query="parsed_sql_total{type='SELECT'}" />
         <query-assertion metric="parsed_sql_total" query="parsed_sql_total{type='DELETE'}" />
         <query-assertion metric="parsed_sql_total" query="parsed_sql_total{type='UPDATE'}" />
-        <query-assertion metric="parsed_sql_total" query="parsed_sql_total{type='TCL'}" />
     </test-case>
 </integration-test-cases>
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_result_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/routed_result_total.xml
similarity index 100%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_result_total.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/routed_result_total.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_sql_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/routed_sql_total.xml
similarity index 100%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_sql_total.xml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/jdbc/routed_sql_total.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/build_info.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/build_info.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/build_info.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/parsed_sql_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/parsed_sql_total.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/parsed_sql_total.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/parsed_sql_total.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_current_connections.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_current_connections.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_current_connections.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_current_connections.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_errors_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_execute_errors_total.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_errors_total.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_execute_errors_total.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_latency_millis.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_execute_latency_millis.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_execute_latency_millis.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_execute_latency_millis.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_meta_data_info.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_meta_data_info.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_meta_data_info.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_meta_data_info.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_requests_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_requests_total.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_requests_total.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_requests_total.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_state.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_state.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_state.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_state.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_transactions_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_transactions_total.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy_transactions_total.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/proxy_transactions_total.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_result_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/routed_result_total.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_result_total.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/routed_result_total.xml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_sql_total.xml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/routed_sql_total.xml
similarity index 100%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/routed_sql_total.xml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/cases/proxy/routed_sql_total.xml
diff --git a/test/e2e/agent/plugins/logging/file/src/test/resources/docker/jdbc/Dockerfile b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/Dockerfile
similarity index 93%
copy from test/e2e/agent/plugins/logging/file/src/test/resources/docker/jdbc/Dockerfile
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/Dockerfile
index d917f2ffd9e..e734fd67a0d 100644
--- a/test/e2e/agent/plugins/logging/file/src/test/resources/docker/jdbc/Dockerfile
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/Dockerfile
@@ -24,4 +24,4 @@ COPY shardingsphere-jdbc-app /opt/shardingsphere-jdbc-app
 ADD https://github.com/ufoscout/docker-compose-wait/releases/download/$WAIT_VERSION/wait /wait
 RUN chmod +x /wait && chmod +x /opt/shardingsphere-jdbc-app/start.sh
 WORKDIR /opt/shardingsphere-jdbc-app
-ENTRYPOINT ./start.sh $JAR_FILE_NAME --agent && tail -f ./logs/stdout.log
+ENTRYPOINT /wait && ./start.sh $JAR_FILE_NAME --agent && tail -f ./logs/stdout.log
diff --git a/test/e2e/agent/jdbc-project/src/main/resources/application.yml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/conf/application.yml
similarity index 78%
copy from test/e2e/agent/jdbc-project/src/main/resources/application.yml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/conf/application.yml
index 00c04692381..389a37be2ac 100644
--- a/test/e2e/agent/jdbc-project/src/main/resources/application.yml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/conf/application.yml
@@ -18,14 +18,7 @@
 server:
   port: 80
 
-mybatis:
-  mapper-locations: classpath*:META-INF/mappers/*Mapper.xml
-  type-aliases-package: org.apache.shardingsphere.test.e2e.agent.jdbc.project.entity
-
-logging:
-  config: classpath:logback.xml
-
 spring:
   datasource:
     driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
-    url: jdbc:shardingsphere:classpath:config.yaml
+    url: jdbc:shardingsphere:absolutepath:/opt/shardingsphere-jdbc-app/config.yaml
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/config-db.yaml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/conf/config.yaml
similarity index 75%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/config-db.yaml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/conf/config.yaml
index 06dbc913321..15067b04b2e 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/config-db.yaml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/conf/config.yaml
@@ -19,23 +19,17 @@ databaseName: agent-metrics-db
 
 dataSources:
   ds_0:
-    url: jdbc:mysql://mysql.agent.metrics.host:3306/agent_metrics_db_0?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    jdbcUrl: jdbc:mysql://mysql.agent.jdbc.metrics.host:3306/agent_metrics_db_0?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
     username: root
     password:
-    connectionTimeoutMilliseconds: 30000
-    idleTimeoutMilliseconds: 60000
-    maxLifetimeMilliseconds: 1800000
-    maxPoolSize: 10
-    minPoolSize: 2
   ds_1:
-    url: jdbc:mysql://mysql.agent.metrics.host:3306/agent_metrics_db_1?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
+    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    jdbcUrl: jdbc:mysql://mysql.agent.jdbc.metrics.host:3306/agent_metrics_db_1?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
     username: root
     password:
-    connectionTimeoutMilliseconds: 30000
-    idleTimeoutMilliseconds: 60000
-    maxLifetimeMilliseconds: 1800000
-    maxPoolSize: 10
-    minPoolSize: 2
 
 rules:
   - !SHARDING
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/conf/start.sh b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/conf/start.sh
new file mode 100644
index 00000000000..46bdf181936
--- /dev/null
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/conf/start.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+#
+# 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.
+#
+
+DEPLOY_DIR="$(pwd)"
+LOGS_DIR=${DEPLOY_DIR}/logs
+if [ ! -d "${LOGS_DIR}" ]; then
+    mkdir "${LOGS_DIR}"
+fi
+STDOUT_FILE=${LOGS_DIR}/stdout.log
+JAR_FILE=$1
+
+AGENT_FILE=${DEPLOY_DIR}/agent/shardingsphere-agent.jar
+function set_agent_name() {
+    if [ -d "${DEPLOY_DIR}/agent" ]; then
+        AGENT_NAME=$(ls "${DEPLOY_DIR}/agent/shardingsphere-agent"*)
+        if [ -n "${AGENT_NAME}" ]; then
+          AGENT_FILE=${AGENT_NAME}
+        fi
+    fi
+}
+
+AGENT_PARAM="";
+function set_agent_parameter() {
+    if [ -f "$AGENT_FILE" ]; then
+      AGENT_PARAM=" -javaagent:${AGENT_FILE} "
+    fi
+}
+
+for arg in $*
+do
+  if [ "$arg" == "--agent" ] ; then
+    set_agent_name
+    set_agent_parameter
+    break
+  fi
+  let PARAMETER_INDEX+=1
+done
+
+nohup java ${AGENT_PARAM} -jar ${DEPLOY_DIR}/${JAR_FILE} >> ${STDOUT_FILE} 2>&1 &
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/docker-compose.yml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/docker-compose.yml
similarity index 70%
copy from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/docker-compose.yml
copy to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/docker-compose.yml
index 2198002ec8e..ea005fbd808 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/docker-compose.yml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/jdbc/docker-compose.yml
@@ -20,10 +20,10 @@ version: "2.1"
 services:
   mysql:
     image: "mysql/mysql-server:5.7"
-    container_name: agent-metrics-mysql
+    container_name: agent-jdbc-metrics-mysql
     command: ['--sql_mode=', '--default-authentication-plugin=mysql_native_password']
     volumes:
-      - ../env/mysql:/docker-entrypoint-initdb.d/
+      - ../../env/mysql:/docker-entrypoint-initdb.d/
     ports:
       - "43060:3306"
     environment:
@@ -31,30 +31,29 @@ services:
 
   prometheus:
     image: prom/prometheus:v2.41.0
-    container_name: agent-prometheus
+    container_name: agent-jdbc-prometheus
     restart: always
     volumes:
-      - ./prometheus/conf:/config
+      - ../prometheus/conf:/config
     ports:
       - '19090:9090'
     links:
-      - "shardingsphere-proxy-agent-metrics:shardingsphere.proxy.host"
+      - "shardingsphere-jdbc-agent-metrics:agent.host"
     command: ['--config.file=/config/prometheus.yml']
     depends_on:
-      - shardingsphere-proxy-agent-metrics
+      - shardingsphere-jdbc-agent-metrics
 
-  shardingsphere-proxy-agent-metrics:
-    image: apache/shardingsphere-proxy-agent-metrics-test
-    container_name: shardingsphere-proxy-agent-metrics
+  shardingsphere-jdbc-agent-metrics:
+    image: apache/shardingsphere-jdbc-agent-metrics-test
+    container_name: shardingsphere-jdbc-agent-metrics
     ports:
-      - "43070:3307"
-      - "43080:3308"
+      - "18080:80"
       - "19099:19099"
     links:
-      - "mysql:mysql.agent.metrics.host"
+      - "mysql:mysql.agent.jdbc.metrics.host"
     volumes:
-      - ./proxy/conf:/opt/shardingsphere-proxy/conf
-      - ./agent/conf:/opt/shardingsphere-proxy/agent/conf
+      - ../agent/conf:/opt/shardingsphere-jdbc-app/agent/conf
+      - ../../../../../target/jdbc/logs:/opt/shardingsphere-jdbc-app/logs
     depends_on:
       - mysql
     environment:
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/prometheus/conf/prometheus.yml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/prometheus/conf/prometheus.yml
index a732bb0ffcc..e46b4370045 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/prometheus/conf/prometheus.yml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/prometheus/conf/prometheus.yml
@@ -32,4 +32,4 @@ scrape_configs:
 
   - job_name: 'shardingsphere-agent'
     static_configs:
-    - targets: ['shardingsphere.proxy.host:19099']
+    - targets: ['agent.host:19099']
diff --git a/test/e2e/agent/plugins/metrics/prometheus/Dockerfile b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/Dockerfile
similarity index 95%
rename from test/e2e/agent/plugins/metrics/prometheus/Dockerfile
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/Dockerfile
index 8019795ff49..6ccdd7420bb 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/Dockerfile
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/Dockerfile
@@ -15,12 +15,12 @@
 # limitations under the License.
 #
 
-FROM eclipse-temurin:8-jdk
+FROM eclipse-temurin:11-jdk
 
 ARG APP_NAME
 ENV WAIT_VERSION 2.7.2
 
-ADD target/${APP_NAME}.tar.gz /opt
+ADD ${APP_NAME}.tar.gz /opt
 ADD https://github.com/ufoscout/docker-compose-wait/releases/download/$WAIT_VERSION/wait /wait
 RUN chmod +x /wait
 RUN mv /opt/${APP_NAME} /opt/shardingsphere-proxy
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/config-db.yaml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/config-db.yaml
index 06dbc913321..fa801ea614f 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/config-db.yaml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/conf/config-db.yaml
@@ -19,7 +19,7 @@ databaseName: agent-metrics-db
 
 dataSources:
   ds_0:
-    url: jdbc:mysql://mysql.agent.metrics.host:3306/agent_metrics_db_0?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
+    url: jdbc:mysql://mysql.agent.proxy.metrics.host:3306/agent_metrics_db_0?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
     username: root
     password:
     connectionTimeoutMilliseconds: 30000
@@ -28,7 +28,7 @@ dataSources:
     maxPoolSize: 10
     minPoolSize: 2
   ds_1:
-    url: jdbc:mysql://mysql.agent.metrics.host:3306/agent_metrics_db_1?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
+    url: jdbc:mysql://mysql.agent.proxy.metrics.host:3306/agent_metrics_db_1?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
     username: root
     password:
     connectionTimeoutMilliseconds: 30000
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/docker-compose.yml b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/docker-compose.yml
similarity index 81%
rename from test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/docker-compose.yml
rename to test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/docker-compose.yml
index 2198002ec8e..abec45ee541 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/docker-compose.yml
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/docker/proxy/docker-compose.yml
@@ -20,10 +20,10 @@ version: "2.1"
 services:
   mysql:
     image: "mysql/mysql-server:5.7"
-    container_name: agent-metrics-mysql
+    container_name: agent-proxy-metrics-mysql
     command: ['--sql_mode=', '--default-authentication-plugin=mysql_native_password']
     volumes:
-      - ../env/mysql:/docker-entrypoint-initdb.d/
+      - ../../env/mysql:/docker-entrypoint-initdb.d/
     ports:
       - "43060:3306"
     environment:
@@ -31,14 +31,14 @@ services:
 
   prometheus:
     image: prom/prometheus:v2.41.0
-    container_name: agent-prometheus
+    container_name: agent-proxy-prometheus
     restart: always
     volumes:
-      - ./prometheus/conf:/config
+      - ../prometheus/conf:/config
     ports:
       - '19090:9090'
     links:
-      - "shardingsphere-proxy-agent-metrics:shardingsphere.proxy.host"
+      - "shardingsphere-proxy-agent-metrics:agent.host"
     command: ['--config.file=/config/prometheus.yml']
     depends_on:
       - shardingsphere-proxy-agent-metrics
@@ -51,10 +51,10 @@ services:
       - "43080:3308"
       - "19099:19099"
     links:
-      - "mysql:mysql.agent.metrics.host"
+      - "mysql:mysql.agent.proxy.metrics.host"
     volumes:
-      - ./proxy/conf:/opt/shardingsphere-proxy/conf
-      - ./agent/conf:/opt/shardingsphere-proxy/agent/conf
+      - ./conf:/opt/shardingsphere-proxy/conf
+      - ../agent/conf:/opt/shardingsphere-proxy/agent/conf
     depends_on:
       - mysql
     environment:
diff --git a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/env/engine-env.properties b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/env/engine-env.properties
index ead6fba9393..19659e0b165 100644
--- a/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/env/engine-env.properties
+++ b/test/e2e/agent/plugins/metrics/prometheus/src/test/resources/env/engine-env.properties
@@ -22,6 +22,14 @@ proxy.url=jdbc:mysql://127.0.0.1:43070/agent-metrics-db?serverTimezone=UTC&useSS
 proxy.username=root
 proxy.password=root
 
+jdbc.base.url=http://127.0.0.1:18080
+jdbc.path.create.table=/order/createTable
+jdbc.path.drop.table=/order/dropTable
+jdbc.path.insert=/order/insert
+jdbc.path.update=/order/update
+jdbc.path.select.all=/order/selectAll
+jdbc.path.delete=/order/delete
+
 prometheus.metadata.url=http://127.0.0.1:19090/api/v1/metadata
 prometheus.query.url=http://127.0.0.1:19090/api/v1/query
 collect.data.wait.milliseconds=35000