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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7583980bde [INLONG-9337][Manager] Support querying operation records 
(#9340)
7583980bde is described below

commit 7583980bde6ed2234f4454e1128eff065b173ff3
Author: fuweng11 <76141879+fuwen...@users.noreply.github.com>
AuthorDate: Tue Nov 28 20:11:57 2023 +0800

    [INLONG-9337][Manager] Support querying operation records (#9340)
---
 .../api/inner/client/OperationLogClient.java       | 51 ++++++++++++++
 .../client/api/service/OperationLogApi.java}       | 31 +++-----
 .../manager/common/enums/OperationTarget.java}     | 50 +++++++------
 .../manager/dao/entity/OperationLogEntity.java     |  3 +
 .../dao/mapper/OperationLogEntityMapper.java       |  4 ++
 .../resources/mappers/OperationLogEntityMapper.xml | 82 ++++++++++++++++++++--
 .../pojo/operationLog/OperationLogRequest.java     | 56 +++++++++++++++
 .../pojo/operationLog/OperationLogResponse.java}   | 54 +++++++++-----
 .../manager/service/operationlog/OperationLog.java |  6 ++
 .../service/operationlog/OperationLogRecorder.java | 27 +++++++
 ...{OperationLog.java => OperationLogService.java} | 25 ++-----
 .../operationlog/OperationLogServiceImpl.java      | 63 +++++++++++++++++
 .../resource/queue/tubemq/TubeMQOperator.java      |  2 +-
 .../manager-web/sql/apache_inlong_manager.sql      |  6 +-
 inlong-manager/manager-web/sql/changes-1.10.0.sql  | 13 ++++
 .../manager/web/controller/DataNodeController.java | 11 +--
 .../web/controller/InlongClusterController.java    | 31 ++++----
 .../web/controller/InlongConsumeController.java    |  9 +--
 .../web/controller/InlongGroupController.java      |  9 +--
 .../web/controller/InlongRoleController.java       |  5 +-
 .../web/controller/InlongStreamController.java     |  7 +-
 .../web/controller/InlongTenantController.java     |  5 +-
 .../web/controller/InlongTenantRoleController.java |  5 +-
 .../web/controller/OperationLogController.java     | 51 ++++++++++++++
 .../web/controller/StreamSinkController.java       | 12 ++--
 .../web/controller/StreamSourceController.java     |  9 +--
 .../web/controller/StreamTransformController.java  |  7 +-
 .../web/controller/WorkflowApproverController.java |  7 +-
 .../manager/web/controller/WorkflowController.java | 15 ++--
 .../web/controller/WorkflowEventController.java    | 11 +--
 .../controller/openapi/OpenDataNodeController.java |  7 +-
 .../openapi/OpenInLongClusterController.java       | 27 +++----
 .../openapi/OpenInLongGroupController.java         |  7 +-
 .../openapi/OpenInLongStreamController.java        |  7 +-
 .../OpenInlongConsumeController.java}              | 17 ++---
 .../openapi/OpenInlongTenantController.java        |  5 +-
 .../openapi/OpenInlongTenantRoleController.java    |  5 +-
 .../openapi/OpenStreamSinkController.java          |  8 ++-
 .../openapi/OpenStreamSourceController.java        |  7 +-
 .../openapi/OpenStreamTransformController.java     |  7 +-
 40 files changed, 567 insertions(+), 197 deletions(-)

diff --git 
a/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/inner/client/OperationLogClient.java
 
b/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/inner/client/OperationLogClient.java
new file mode 100644
index 0000000000..755ef02bfa
--- /dev/null
+++ 
b/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/inner/client/OperationLogClient.java
@@ -0,0 +1,51 @@
+/*
+ * 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.inlong.manager.client.api.inner.client;
+
+import org.apache.inlong.manager.client.api.ClientConfiguration;
+import org.apache.inlong.manager.client.api.service.OperationLogApi;
+import org.apache.inlong.manager.client.api.util.ClientUtils;
+import org.apache.inlong.manager.pojo.common.PageResult;
+import org.apache.inlong.manager.pojo.common.Response;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse;
+
+public class OperationLogClient {
+
+    private final OperationLogApi operationLogApi;
+
+    public OperationLogClient(ClientConfiguration configuration) {
+        operationLogApi = 
ClientUtils.createRetrofit(configuration).create(OperationLogApi.class);
+    }
+
+    /**
+     * create us task by sink id
+     *
+     * @return task id
+     */
+    public PageResult<OperationLogResponse> list(OperationLogRequest request) {
+        Response<PageResult<OperationLogResponse>> response =
+                ClientUtils.executeHttpCall(operationLogApi.list(request));
+        ClientUtils.assertRespSuccess(response);
+        if (response.isSuccess()) {
+            return response.getData();
+        }
+        throw new RuntimeException(response.getErrMsg());
+    }
+
+}
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
 
b/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/service/OperationLogApi.java
similarity index 58%
copy from 
inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
copy to 
inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/service/OperationLogApi.java
index ebc4789873..397fc6aa64 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
+++ 
b/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/service/OperationLogApi.java
@@ -15,29 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.inlong.manager.service.operationlog;
+package org.apache.inlong.manager.client.api.service;
 
-import org.apache.inlong.manager.common.enums.OperationType;
+import org.apache.inlong.manager.pojo.common.PageResult;
+import org.apache.inlong.manager.pojo.common.Response;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse;
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+import retrofit2.Call;
+import retrofit2.http.Body;
+import retrofit2.http.POST;
 
-/**
- * The interface of operation log
- */
-@Target({ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface OperationLog {
+public interface OperationLogApi {
 
-    /**
-     * Operation type
-     */
-    OperationType operation();
+    @POST("operationLog/list")
+    Call<Response<PageResult<OperationLogResponse>>> list(@Body 
OperationLogRequest request);
 
-    /**
-     * Whether to store in the database
-     */
-    boolean db() default true;
 }
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
 
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
similarity index 58%
copy from 
inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
copy to 
inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
index ebc4789873..e6c866a0e1 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
+++ 
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
@@ -15,29 +15,35 @@
  * limitations under the License.
  */
 
-package org.apache.inlong.manager.service.operationlog;
-
-import org.apache.inlong.manager.common.enums.OperationType;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+package org.apache.inlong.manager.common.enums;
 
 /**
- * The interface of operation log
+ * Operation target
  */
-@Target({ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface OperationLog {
-
-    /**
-     * Operation type
-     */
-    OperationType operation();
-
-    /**
-     * Whether to store in the database
-     */
-    boolean db() default true;
+public enum OperationTarget {
+
+    TENANT,
+
+    GROUP,
+
+    STREAM,
+
+    SOURCE,
+
+    SINK,
+
+    CONSUME,
+
+    WORKFLOW,
+
+    NODE,
+
+    CLUSTER,
+
+    TRANSFORM,
+
+    INLONG_ROLE,
+
+    TENANT_ROLE
+
 }
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java
index 777ceeddba..56fe40d21a 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java
@@ -30,8 +30,11 @@ public class OperationLogEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
     private Integer id;
+    private String inlongGroupId;
+    private String inlongStreamId;
     private String authenticationType;
     private String operationType;
+    private String operationTarget;
     private String httpMethod;
     private String invokeMethod;
     private String operator;
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/OperationLogEntityMapper.java
 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/OperationLogEntityMapper.java
index 24d5febca6..548bbe44ee 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/OperationLogEntityMapper.java
+++ 
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/OperationLogEntityMapper.java
@@ -18,7 +18,9 @@
 package org.apache.inlong.manager.dao.mapper;
 
 import org.apache.inlong.manager.dao.entity.OperationLogEntity;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest;
 
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -36,6 +38,8 @@ public interface OperationLogEntityMapper {
 
     OperationLogEntity selectByPrimaryKey(Integer id);
 
+    List<OperationLogEntity> selectByCondition(@Param("request") 
OperationLogRequest operationLogRequest);
+
     int updateByPrimaryKeySelective(OperationLogEntity record);
 
     int updateByPrimaryKey(OperationLogEntity record);
diff --git 
a/inlong-manager/manager-dao/src/main/resources/mappers/OperationLogEntityMapper.xml
 
b/inlong-manager/manager-dao/src/main/resources/mappers/OperationLogEntityMapper.xml
index 835359b331..b601fb91a3 100644
--- 
a/inlong-manager/manager-dao/src/main/resources/mappers/OperationLogEntityMapper.xml
+++ 
b/inlong-manager/manager-dao/src/main/resources/mappers/OperationLogEntityMapper.xml
@@ -22,8 +22,11 @@
 <mapper 
namespace="org.apache.inlong.manager.dao.mapper.OperationLogEntityMapper">
     <resultMap id="BaseResultMap" 
type="org.apache.inlong.manager.dao.entity.OperationLogEntity">
         <id column="id" jdbcType="INTEGER" property="id"/>
+        <result column="inlong_group_id" jdbcType="VARCHAR" 
property="inlongGroupId"/>
+        <result column="inlong_stream_id" jdbcType="VARCHAR" 
property="inlongStreamId"/>
         <result column="authentication_type" jdbcType="VARCHAR" 
property="authenticationType"/>
         <result column="operation_type" jdbcType="VARCHAR" 
property="operationType"/>
+        <result column="operation_target" jdbcType="VARCHAR" 
property="operationTarget"/>
         <result column="http_method" jdbcType="VARCHAR" property="httpMethod"/>
         <result column="invoke_method" jdbcType="VARCHAR" 
property="invokeMethod"/>
         <result column="operator" jdbcType="VARCHAR" property="operator"/>
@@ -38,7 +41,7 @@
         <result column="err_msg" jdbcType="LONGVARCHAR" property="errMsg"/>
     </resultMap>
     <sql id="Base_Column_List">
-        id, authentication_type, operation_type, http_method, invoke_method, 
operator,
+        id, inlong_group_id, inlong_stream_id, authentication_type, 
operation_type, operation_target, http_method, invoke_method, operator,
         proxy, request_url, remote_address, cost_time, status, request_time, 
body, param, err_msg
     </sql>
 
@@ -48,25 +51,59 @@
         from operation_log
         where id = #{id,jdbcType=INTEGER}
     </select>
+    <select id="selectByCondition" resultMap="BaseResultMap"
+            
parameterType="org.apache.inlong.manager.pojo.operationLog.OperationLogRequest">
+        select
+        <include refid="Base_Column_List"/>
+        from operation_log
+        <where>
+            <if test="request.inlongGroupId != null and request.inlongGroupId 
!= ''">
+                and inlong_group_id = #{request.inlongGroupId, 
jdbcType=VARCHAR}
+            </if>
+            <if test="request.inlongStreamId != null and 
request.inlongStreamId != ''">
+                and inlong_stream_id = #{request.inlongStreamId, 
jdbcType=VARCHAR}
+            </if>
+            <if test="request.operationType != null and request.operationType 
!= ''">
+                and operation_type = #{request.operationType, jdbcType=VARCHAR}
+            </if>
+            <if test="request.operationTarget != null and 
request.operationTarget != ''">
+                and operation_target = #{request.operationTarget, 
jdbcType=VARCHAR}
+            </if>
+            <if test="request.keyword != null and request.keyword != ''">
+                and (
+                inlong_group_id like CONCAT('%', #{request.keyword}, '%')
+                or inlong_stream_id like CONCAT('%', #{request.keyword}, '%')
+                )
+            </if>
+            <if test="request.startDate != null and request.startDate != '' 
and request.endDate != null and request.endDate != ''">
+                and request_time &gt;= #{request.startDate, jdbcType=VARCHAR}
+                and request_time &lt; #{request.endDate, jdbcType=VARCHAR}
+            </if>
+        </where>
+        order by request_time desc
+    </select>
     <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
         delete
         from operation_log
         where id = #{id,jdbcType=INTEGER}
     </delete>
     <insert id="insert" 
parameterType="org.apache.inlong.manager.dao.entity.OperationLogEntity">
-        insert into operation_log (id, authentication_type, operation_type,
+        insert into operation_log (id, inlong_group_id, inlong_stream_id,
+                                   authentication_type, operation_type, 
operation_target,
                                    http_method, invoke_method, operator,
                                    proxy, request_url, remote_address,
                                    cost_time, status, request_time,
                                    body, param, err_msg)
-        values (#{id,jdbcType=INTEGER}, 
#{authenticationType,jdbcType=VARCHAR}, #{operationType,jdbcType=VARCHAR},
+        values (#{id,jdbcType=INTEGER}, #{inlongGroupId,jdbcType=VARCHAR}, 
#{inlongStreamId,jdbcType=VARCHAR},
+                #{authenticationType,jdbcType=VARCHAR}, 
#{operationType,jdbcType=VARCHAR}, #{operationTarget,jdbcType=VARCHAR},
                 #{httpMethod,jdbcType=VARCHAR}, 
#{invokeMethod,jdbcType=VARCHAR}, #{operator,jdbcType=VARCHAR},
                 #{proxy,jdbcType=VARCHAR}, #{requestUrl,jdbcType=VARCHAR}, 
#{remoteAddress,jdbcType=VARCHAR},
                 #{costTime,jdbcType=BIGINT}, #{status,jdbcType=TINYINT}, 
#{requestTime,jdbcType=TIMESTAMP},
                 #{body,jdbcType=LONGVARCHAR}, #{param,jdbcType=LONGVARCHAR}, 
#{errMsg,jdbcType=LONGVARCHAR})
     </insert>
     <insert id="insertBatch">
-        insert into operation_log (id, authentication_type, operation_type,
+        insert into operation_log (id, inlong_group_id, inlong_stream_id,
+        authentication_type, operation_type, operation_target,
         http_method, invoke_method, operator,
         proxy, request_url, remote_address,
         cost_time, status, request_time,
@@ -75,8 +112,9 @@
         VALUES
         <foreach collection="list" item="log" separator=",">
             (
-            #{log.id,jdbcType=INTEGER}, 
#{log.authenticationType,jdbcType=VARCHAR},
-            #{log.operationType,jdbcType=VARCHAR},
+            #{log.id,jdbcType=INTEGER}, #{log.inlongGroupId,jdbcType=VARCHAR},
+            #{log.inlongStreamId,jdbcType=VARCHAR}, 
#{log.authenticationType,jdbcType=VARCHAR},
+            #{log.operationType,jdbcType=VARCHAR}, 
#{log.operationTarget,jdbcType=VARCHAR},
             #{log.httpMethod,jdbcType=VARCHAR}, 
#{log.invokeMethod,jdbcType=VARCHAR},
             #{log.operator,jdbcType=VARCHAR},
             #{log.proxy,jdbcType=VARCHAR}, #{log.requestUrl,jdbcType=VARCHAR},
@@ -95,12 +133,21 @@
             <if test="id != null">
                 id,
             </if>
+            <if test="inlongGroupId != null">
+                inlong_group_id,
+            </if>
+            <if test="inlongStreamId != null">
+                inlong_stream_id,
+            </if>
             <if test="authenticationType != null">
                 authentication_type,
             </if>
             <if test="operationType != null">
                 operation_type,
             </if>
+            <if test="operationTarget != null">
+                operation_target,
+            </if>
             <if test="httpMethod != null">
                 http_method,
             </if>
@@ -142,12 +189,21 @@
             <if test="id != null">
                 #{id,jdbcType=INTEGER},
             </if>
+            <if test="inlongGroupId != null">
+                #{inlongGroupId,jdbcType=VARCHAR},
+            </if>
+            <if test="inlongStreamId != null">
+                #{inlongStreamId,jdbcType=VARCHAR},
+            </if>
             <if test="authenticationType != null">
                 #{authenticationType,jdbcType=VARCHAR},
             </if>
             <if test="operationType != null">
                 #{operationType,jdbcType=VARCHAR},
             </if>
+            <if test="operationTarget != null">
+                #{operationTarget,jdbcType=VARCHAR},
+            </if>
             <if test="httpMethod != null">
                 #{httpMethod,jdbcType=VARCHAR},
             </if>
@@ -190,12 +246,21 @@
             
parameterType="org.apache.inlong.manager.dao.entity.OperationLogEntity">
         update operation_log
         <set>
+            <if test="inlongGroupId != null">
+                inlong_group_id = #{inlongGroupId,jdbcType=VARCHAR},
+            </if>
+            <if test="inlongStreamId != null">
+                inlong_stream_id = #{inlongStreamId,jdbcType=VARCHAR},
+            </if>
             <if test="authenticationType != null">
                 authentication_type = #{authenticationType,jdbcType=VARCHAR},
             </if>
             <if test="operationType != null">
                 operation_type = #{operationType,jdbcType=VARCHAR},
             </if>
+            <if test="operationTarget != null">
+                operation_target = #{operationTarget,jdbcType=VARCHAR},
+            </if>
             <if test="httpMethod != null">
                 http_method = #{httpMethod,jdbcType=VARCHAR},
             </if>
@@ -238,8 +303,11 @@
     <update id="updateByPrimaryKey"
             
parameterType="org.apache.inlong.manager.dao.entity.OperationLogEntity">
         update operation_log
-        set authentication_type = #{authenticationType,jdbcType=VARCHAR},
+        set inlong_group_id = #{inlongGroupId,jdbcType=VARCHAR},
+            inlong_stream_id = #{inlongStreamId,jdbcType=VARCHAR},
+            authentication_type = #{authenticationType,jdbcType=VARCHAR},
             operation_type      = #{operationType,jdbcType=VARCHAR},
+            operation_target    = #{operationTarget,jdbcType=VARCHAR},
             http_method         = #{httpMethod,jdbcType=VARCHAR},
             invoke_method       = #{invokeMethod,jdbcType=VARCHAR},
             operator            = #{operator,jdbcType=VARCHAR},
diff --git 
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogRequest.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogRequest.java
new file mode 100644
index 0000000000..13d672c520
--- /dev/null
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogRequest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.inlong.manager.pojo.operationLog;
+
+import org.apache.inlong.manager.pojo.common.PageRequest;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * Request of get operation records
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class OperationLogRequest extends PageRequest {
+
+    @ApiModelProperty("Inlong group id")
+    private String inlongGroupId;
+
+    @ApiModelProperty("Inlong stream id")
+    private String inlongStreamId;
+
+    @ApiModelProperty("Operation type")
+    private String operationType;
+
+    @ApiModelProperty("Operation target")
+    private String operationTarget;
+
+    @ApiModelProperty(value = "keyword")
+    private String keyword;
+
+    @ApiModelProperty(value = "query start date, format by 'yyyy-MM-dd'", 
required = false, example = "2022-01-01")
+    private String startDate;
+
+    @ApiModelProperty(value = "query end date, format by 'yyyy-MM-dd'", 
required = false, example = "2022-01-01")
+    private String endDate;
+
+}
diff --git 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java
 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogResponse.java
similarity index 53%
copy from 
inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java
copy to 
inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogResponse.java
index 777ceeddba..1e5050eb19 100644
--- 
a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java
+++ 
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogResponse.java
@@ -15,34 +15,50 @@
  * limitations under the License.
  */
 
-package org.apache.inlong.manager.dao.entity;
+package org.apache.inlong.manager.pojo.operationLog;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
-import java.io.Serializable;
 import java.util.Date;
 
-/**
- * Operation log entity, including operation type, request url, etc.
- */
 @Data
-public class OperationLogEntity implements Serializable {
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("Operation records")
+public class OperationLogResponse {
 
-    private static final long serialVersionUID = 1L;
-    private Integer id;
-    private String authenticationType;
-    private String operationType;
+    @ApiModelProperty("Inlong group id")
+    private String inlongGroupId;
+
+    @ApiModelProperty("Inlong stream id")
+    private String inlongStreamId;
+
+    @ApiModelProperty("Http method")
     private String httpMethod;
-    private String invokeMethod;
-    private String operator;
-    private String proxy;
-    private String requestUrl;
-    private String remoteAddress;
-    private Long costTime;
+
+    @ApiModelProperty("Operation type")
+    private String operationType;
+
+    @ApiModelProperty("Operation target")
+    private String operationTarget;
+
+    @ApiModelProperty("request body")
+    private String body;
+
+    @ApiModelProperty("is success")
     private Boolean status;
+
+    @ApiModelProperty(value = "Name of operator")
+    private String operator;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date requestTime;
-    private String body;
-    private String param;
-    private String errMsg;
 
 }
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
index ebc4789873..8e9f203204 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.service.operationlog;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 
 import java.lang.annotation.ElementType;
@@ -36,6 +37,11 @@ public @interface OperationLog {
      */
     OperationType operation();
 
+    /**
+     * Operation target
+     */
+    OperationTarget operationTarget();
+
     /**
      * Whether to store in the database
      */
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogRecorder.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogRecorder.java
index df4096f59a..b7dc2a0443 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogRecorder.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogRecorder.java
@@ -17,12 +17,15 @@
 
 package org.apache.inlong.manager.service.operationlog;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.util.NetworkUtils;
 import org.apache.inlong.manager.dao.entity.OperationLogEntity;
 import org.apache.inlong.manager.pojo.user.LoginUserUtils;
 import org.apache.inlong.manager.pojo.user.UserInfo;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import lombok.extern.slf4j.Slf4j;
@@ -35,6 +38,7 @@ import 
org.springframework.web.context.request.ServletRequestAttributes;
 import javax.servlet.http.HttpServletRequest;
 
 import java.util.Date;
+import java.util.Objects;
 import java.util.Optional;
 
 /**
@@ -44,6 +48,9 @@ import java.util.Optional;
 public class OperationLogRecorder {
 
     private static final String ANONYMOUS_USER = "AnonymousUser";
+    private static final String INLONG_GROUP_ID = "inlongGroupId";
+    private static final String INLONG_STREAM_ID = "inlongStreamId";
+
     private static final Gson GSON = new GsonBuilder().create(); // thread safe
 
     /**
@@ -63,6 +70,22 @@ public class OperationLogRecorder {
         String requestUrl = request.getRequestURI();
         String httpMethod = request.getMethod();
         String remoteAddress = NetworkUtils.getClientIpAddress(request);
+        Object[] args = joinPoint.getArgs();
+        String groupId = "";
+        String streamId = "";
+        for (Object arg : args) {
+            try {
+                JSONObject obj = (JSONObject) JSON.toJSON(arg);
+                for (String key : obj.keySet()) {
+                    if (Objects.equals(key, INLONG_GROUP_ID) || 
Objects.equals(key, INLONG_STREAM_ID)) {
+                        groupId = obj.getString(key);
+                    }
+                }
+            } catch (Exception ignored) {
+                log.debug("do nothing when exception");
+            }
+
+        }
         String param = GSON.toJson(request.getParameterMap());
         String body = GSON.toJson(joinPoint.getArgs());
 
@@ -78,7 +101,11 @@ public class OperationLogRecorder {
         } finally {
             long costTime = System.currentTimeMillis() - start;
             OperationType operationType = operationLog.operation();
+            OperationTarget operationTarget = operationLog.operationTarget();
             OperationLogEntity operationLogEntity = new OperationLogEntity();
+            operationLogEntity.setInlongGroupId(groupId);
+            operationLogEntity.setInlongStreamId(streamId);
+            operationLogEntity.setOperationTarget(operationTarget.name());
             operationLogEntity.setOperationType(operationType.name());
             operationLogEntity.setHttpMethod(httpMethod);
             operationLogEntity.setOperator(operator);
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogService.java
similarity index 62%
copy from 
inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
copy to 
inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogService.java
index ebc4789873..42d3af200a 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogService.java
@@ -17,27 +17,14 @@
 
 package org.apache.inlong.manager.service.operationlog;
 
-import org.apache.inlong.manager.common.enums.OperationType;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+import org.apache.inlong.manager.pojo.common.PageResult;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse;
 
 /**
- * The interface of operation log
+ * Operation log service
  */
-@Target({ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface OperationLog {
-
-    /**
-     * Operation type
-     */
-    OperationType operation();
+public interface OperationLogService {
 
-    /**
-     * Whether to store in the database
-     */
-    boolean db() default true;
+    PageResult<OperationLogResponse> listByCondition(OperationLogRequest 
request);
 }
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogServiceImpl.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogServiceImpl.java
new file mode 100644
index 0000000000..1be95e9f26
--- /dev/null
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogServiceImpl.java
@@ -0,0 +1,63 @@
+/*
+ * 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.inlong.manager.service.operationlog;
+
+import org.apache.inlong.manager.common.util.CommonBeanUtils;
+import org.apache.inlong.manager.dao.entity.OperationLogEntity;
+import org.apache.inlong.manager.dao.mapper.OperationLogEntityMapper;
+import org.apache.inlong.manager.pojo.common.OrderFieldEnum;
+import org.apache.inlong.manager.pojo.common.OrderTypeEnum;
+import org.apache.inlong.manager.pojo.common.PageResult;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse;
+
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import static org.apache.inlong.manager.pojo.common.PageRequest.MAX_PAGE_SIZE;
+
+/**
+ * Operation log operation
+ */
+@Service
+public class OperationLogServiceImpl implements OperationLogService {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(OperationLogServiceImpl.class);
+
+    @Autowired
+    private OperationLogEntityMapper operationLogMapper;
+
+    @Override
+    public PageResult<OperationLogResponse> 
listByCondition(OperationLogRequest request) {
+        if (request.getPageSize() > MAX_PAGE_SIZE) {
+            LOGGER.warn("list operation logs, change page size from {} to {}", 
request.getPageSize(), MAX_PAGE_SIZE);
+            request.setPageSize(MAX_PAGE_SIZE);
+        }
+        PageHelper.startPage(request.getPageNum(), request.getPageSize());
+        OrderFieldEnum.checkOrderField(request);
+        OrderTypeEnum.checkOrderType(request);
+        Page<OperationLogEntity> entityPage = (Page<OperationLogEntity>) 
operationLogMapper.selectByCondition(request);
+        PageResult<OperationLogResponse> pageResult = 
PageResult.fromPage(entityPage)
+                .map(entity -> CommonBeanUtils.copyProperties(entity, 
OperationLogResponse::new));
+        return pageResult;
+    }
+}
diff --git 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/queue/tubemq/TubeMQOperator.java
 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/queue/tubemq/TubeMQOperator.java
index 52ab267dc1..d4f852f893 100644
--- 
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/queue/tubemq/TubeMQOperator.java
+++ 
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/queue/tubemq/TubeMQOperator.java
@@ -288,7 +288,7 @@ public class TubeMQOperator {
             String url = "http://"; + brokerUrl + QUERY_MESSAGE_PATH + 
TOPIC_NAME + topicName + MSG_COUNT + msgCount;
             TubeMessageResponse response = HttpUtils.request(restTemplate, 
url, HttpMethod.GET,
                     null, new HttpHeaders(), TubeMessageResponse.class);
-            if (response.getErrCode() != SUCCESS_CODE) {
+            if (response.getErrCode() != SUCCESS_CODE && response.getErrCode() 
!= 200) {
                 String msg = String.format("failed to query message for topic 
%s, error: %s",
                         topicName, response.getErrMsg());
                 LOGGER.error(msg + " in {} for broker {}", masterUrl, 
brokerUrl);
diff --git a/inlong-manager/manager-web/sql/apache_inlong_manager.sql 
b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
index eb57c5898c..f1b5379e0a 100644
--- a/inlong-manager/manager-web/sql/apache_inlong_manager.sql
+++ b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
@@ -332,8 +332,10 @@ CREATE TABLE IF NOT EXISTS `operation_log`
     `status`              int(4)             DEFAULT NULL COMMENT 'Operate 
status',
     `request_time`        timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON 
UPDATE CURRENT_TIMESTAMP COMMENT 'Request time',
     `err_msg`             mediumtext COMMENT 'Error message',
-    PRIMARY KEY (`id`)
-) ENGINE = InnoDB
+    PRIMARY KEY (`id`),
+    INDEX `operation_log_group_stream_index` (`inlong_group_id`, 
`inlong_stream_id`),
+    INDEX `operation_log_request_time_index` (`request_time`)
+    ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4;
 
 -- ----------------------------
diff --git a/inlong-manager/manager-web/sql/changes-1.10.0.sql 
b/inlong-manager/manager-web/sql/changes-1.10.0.sql
index d67e24ee1c..3a1abeb04b 100644
--- a/inlong-manager/manager-web/sql/changes-1.10.0.sql
+++ b/inlong-manager/manager-web/sql/changes-1.10.0.sql
@@ -36,4 +36,17 @@ VALUES ('audit_sort_mysql_binlog_input', 'MYSQL_BINLOG', 0, 
'29'),
        ('audit_sort_tube_input', 'TUBEMQ', 0, '33'),
        ('audit_sort_tube_output', 'TUBEMQ', 1, '34');
 
+ALTER TABLE `operation_log`
+    ADD COLUMN  `inlong_group_id`  varchar(256) DEFAULT NULL COMMENT 'Inlong 
group id';
+
+ALTER TABLE `operation_log`
+    ADD COLUMN  `inlong_stream_id` varchar(256) DEFAULT NULL COMMENT 'Inlong 
stream id',
+
+ALTER TABLE `operation_log`
+    ADD COLUMN `operation_target` varchar(256) DEFAULT NULL COMMENT 'Operation 
target',
+
+CREATE INDEX operation_log_group_stream_index ON operation_log 
(`inlong_group_id`, `inlong_stream_id`);
+
+CREATE INDEX `operation_log_request_time_index` ON operation_log 
(`request_time`);
+
 
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/DataNodeController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/DataNodeController.java
index 83b17000ec..9cc505a9e2 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/DataNodeController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/DataNodeController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.enums.TenantUserTypeEnum;
 import org.apache.inlong.manager.common.validation.SaveValidation;
@@ -60,7 +61,7 @@ public class DataNodeController {
 
     @PostMapping(value = "/node/save")
     @ApiOperation(value = "Save node")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.NODE)
     public Response<Integer> save(@Validated(SaveValidation.class) 
@RequestBody DataNodeRequest request) {
         String currentUser = LoginUserUtils.getLoginUser().getName();
         return Response.success(dataNodeService.save(request, currentUser));
@@ -84,7 +85,7 @@ public class DataNodeController {
     }
 
     @PostMapping(value = "/node/update")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.NODE)
     @ApiOperation(value = "Update data node")
     public Response<Boolean> update(@Validated(UpdateByIdValidation.class) 
@RequestBody DataNodeRequest request) {
         String username = LoginUserUtils.getLoginUser().getName();
@@ -92,7 +93,7 @@ public class DataNodeController {
     }
 
     @PostMapping(value = "/node/updateByKey")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.NODE)
     @ApiOperation(value = "Update data node by key")
     public Response<UpdateResult> updateByKey(
             @Validated(UpdateByKeyValidation.class) @RequestBody 
DataNodeRequest request) {
@@ -102,7 +103,7 @@ public class DataNodeController {
 
     @DeleteMapping(value = "/node/delete/{id}")
     @ApiOperation(value = "Delete data node by id")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.NODE)
     @ApiImplicitParam(name = "id", value = "Data node ID", dataTypeClass = 
Integer.class, required = true)
     public Response<Boolean> delete(@PathVariable Integer id) {
         return Response.success(dataNodeService.delete(id, 
LoginUserUtils.getLoginUser().getName()));
@@ -110,7 +111,7 @@ public class DataNodeController {
 
     @DeleteMapping(value = "/node/deleteByKey")
     @ApiOperation(value = "Delete data node by key")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.NODE)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "name", value = "Data node name", 
dataTypeClass = String.class, required = true),
             @ApiImplicitParam(name = "type", value = "Data node type", 
dataTypeClass = String.class, required = true)
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java
index eb6fd58d52..9293ff5ed7 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.validation.SaveValidation;
 import org.apache.inlong.manager.common.validation.UpdateByIdValidation;
@@ -74,7 +75,7 @@ public class InlongClusterController {
 
     @PostMapping(value = "/cluster/tag/save")
     @ApiOperation(value = "Save cluster tag")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CLUSTER)
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Integer> saveTag(@Validated(SaveValidation.class) 
@RequestBody ClusterTagRequest request) {
         String currentUser = LoginUserUtils.getLoginUser().getName();
@@ -98,7 +99,7 @@ public class InlongClusterController {
     }
 
     @PostMapping(value = "/cluster/tag/update")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiOperation(value = "Update cluster tag")
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Boolean> updateTag(@Validated(UpdateValidation.class) 
@RequestBody ClusterTagRequest request) {
@@ -108,7 +109,7 @@ public class InlongClusterController {
 
     @DeleteMapping(value = "/cluster/tag/delete/{id}")
     @ApiOperation(value = "Delete cluster tag by id")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = 
Integer.class, required = true)
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Boolean> deleteTag(@PathVariable Integer id) {
@@ -117,7 +118,7 @@ public class InlongClusterController {
 
     @PostMapping(value = "/cluster/tenant/tag/save")
     @ApiOperation(value = "Save tenant cluster tag")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CLUSTER)
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Integer> saveTenantTag(
             @Validated(SaveValidation.class) @RequestBody 
TenantClusterTagRequest request) {
@@ -147,7 +148,7 @@ public class InlongClusterController {
 
     @DeleteMapping(value = "/cluster/tenant/tag/delete/{id}")
     @ApiOperation(value = "Delete tenant cluster tag by id")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = 
Integer.class, required = true)
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Boolean> deleteTenantTag(@PathVariable Integer id) {
@@ -156,7 +157,7 @@ public class InlongClusterController {
 
     @PostMapping(value = "/cluster/save")
     @ApiOperation(value = "Save cluster")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CLUSTER)
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Integer> save(@Validated(SaveValidation.class) 
@RequestBody ClusterRequest request) {
         String currentUser = LoginUserUtils.getLoginUser().getName();
@@ -181,7 +182,7 @@ public class InlongClusterController {
     }
 
     @PostMapping(value = "/cluster/update")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiOperation(value = "Update cluster")
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Boolean> update(@Validated(UpdateByIdValidation.class) 
@RequestBody ClusterRequest request) {
@@ -190,7 +191,7 @@ public class InlongClusterController {
     }
 
     @PostMapping(value = "/cluster/updateByKey")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiOperation(value = "Update cluster by key")
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<UpdateResult> updateByKey(
@@ -200,7 +201,7 @@ public class InlongClusterController {
     }
 
     @PostMapping(value = "/cluster/bindTag")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiOperation(value = "Bind or unbind cluster tag")
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Boolean> bindTag(@Validated @RequestBody BindTagRequest 
request) {
@@ -210,7 +211,7 @@ public class InlongClusterController {
 
     @DeleteMapping(value = "/cluster/delete/{id}")
     @ApiOperation(value = "Delete cluster by id")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiImplicitParam(name = "id", value = "Cluster ID", dataTypeClass = 
Integer.class, required = true)
     @RequiresRoles(UserRoleCode.INLONG_ADMIN)
     public Response<Boolean> delete(@PathVariable Integer id) {
@@ -219,7 +220,7 @@ public class InlongClusterController {
 
     @DeleteMapping(value = "/cluster/deleteByKey")
     @ApiOperation(value = "Delete cluster by cluster name and type")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "name", value = "Cluster name", 
dataTypeClass = String.class, required = true),
             @ApiImplicitParam(name = "type", value = "Cluster type", 
dataTypeClass = String.class, required = true),
@@ -232,7 +233,7 @@ public class InlongClusterController {
 
     @PostMapping(value = "/cluster/node/save")
     @ApiOperation(value = "Save cluster node")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CLUSTER)
     public Response<Integer> saveNode(@Validated @RequestBody 
ClusterNodeRequest request) {
         String currentUser = LoginUserUtils.getLoginUser().getName();
         return Response.success(clusterService.saveNode(request, currentUser));
@@ -260,14 +261,14 @@ public class InlongClusterController {
             @ApiImplicitParam(name = "clusterType", dataTypeClass = 
String.class, required = true),
             @ApiImplicitParam(name = "protocolType", dataTypeClass = 
String.class, required = false)
     })
-    @OperationLog(operation = OperationType.GET)
+    @OperationLog(operation = OperationType.GET, operationTarget = 
OperationTarget.CLUSTER)
     public Response<List<ClusterNodeResponse>> listByGroupId(@RequestParam 
String inlongGroupId,
             @RequestParam String clusterType, @RequestParam(required = false) 
String protocolType) {
         return 
Response.success(clusterService.listNodeByGroupId(inlongGroupId, clusterType, 
protocolType));
     }
 
     @RequestMapping(value = "/cluster/node/update", method = 
RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiOperation(value = "Update cluster node")
     public Response<Boolean> updateNode(@Validated(UpdateValidation.class) 
@RequestBody ClusterNodeRequest request) {
         String username = LoginUserUtils.getLoginUser().getName();
@@ -276,7 +277,7 @@ public class InlongClusterController {
 
     @RequestMapping(value = "/cluster/node/delete/{id}", method = 
RequestMethod.DELETE)
     @ApiOperation(value = "Delete cluster node")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiImplicitParam(name = "id", value = "Cluster node ID", dataTypeClass = 
Integer.class, required = true)
     public Response<Boolean> deleteNode(@PathVariable Integer id) {
         return Response.success(clusterService.deleteNode(id, 
LoginUserUtils.getLoginUser().getName()));
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java
index 6433f46655..66b204cffa 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.enums.TenantUserTypeEnum;
 import org.apache.inlong.manager.common.validation.UpdateValidation;
@@ -61,7 +62,7 @@ public class InlongConsumeController {
     private InlongConsumeProcessService consumeProcessService;
 
     @RequestMapping(value = "/consume/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CONSUME)
     @ApiOperation(value = "Save inlong consume")
     public Response<Integer> save(@RequestBody InlongConsumeRequest request) {
         String operator = LoginUserUtils.getLoginUser().getName();
@@ -91,14 +92,14 @@ public class InlongConsumeController {
     }
 
     @PostMapping("/consume/update")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CONSUME)
     @ApiOperation(value = "Update inlong consume")
     public Response<Integer> update(@Validated(UpdateValidation.class) 
@RequestBody InlongConsumeRequest request) {
         return Response.success(consumeService.update(request, 
LoginUserUtils.getLoginUser().getName()));
     }
 
     @DeleteMapping("/consume/delete/{id}")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CONSUME)
     @ApiOperation(value = "Delete inlong consume by ID")
     @ApiImplicitParam(name = "id", value = "Inlong consume ID", dataTypeClass 
= Integer.class, required = true)
     public Response<Boolean> delete(@PathVariable(name = "id") Integer id) {
@@ -106,7 +107,7 @@ public class InlongConsumeController {
     }
 
     @PostMapping("/consume/startProcess/{id}")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CONSUME)
     @ApiOperation(value = "Start inlong consume process")
     @ApiImplicitParam(name = "id", value = "Inlong consume ID", dataTypeClass 
= Integer.class, required = true)
     public Response<WorkflowResult> startProcess(@PathVariable(name = "id") 
Integer id) {
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
index edf6ed6a33..2e49fd9380 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.enums.TenantUserTypeEnum;
 import org.apache.inlong.manager.common.validation.SaveValidation;
@@ -68,7 +69,7 @@ public class InlongGroupController {
     private InlongGroupProcessService groupProcessOperation;
 
     @RequestMapping(value = "/group/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.GROUP)
     @ApiOperation(value = "Save inlong group")
     public Response<String> save(@Validated(SaveValidation.class) @RequestBody 
InlongGroupRequest groupRequest) {
         String operator = LoginUserUtils.getLoginUser().getName();
@@ -126,7 +127,7 @@ public class InlongGroupController {
     }
 
     @RequestMapping(value = "/group/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.GROUP)
     @ApiOperation(value = "Update inlong group")
     public Response<String> update(@Validated(UpdateValidation.class) 
@RequestBody InlongGroupRequest groupRequest) {
         String operator = LoginUserUtils.getLoginUser().getName();
@@ -135,7 +136,7 @@ public class InlongGroupController {
 
     @RequestMapping(value = "/group/delete/{groupId}", method = 
RequestMethod.DELETE)
     @ApiOperation(value = "Delete inlong group info")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.GROUP)
     @ApiImplicitParam(name = "groupId", value = "Inlong group id", 
dataTypeClass = String.class, required = true)
     public Response<Boolean> delete(@PathVariable String groupId) {
         String operator = LoginUserUtils.getLoginUser().getName();
@@ -144,7 +145,7 @@ public class InlongGroupController {
 
     @RequestMapping(value = "/group/deleteAsync/{groupId}", method = 
RequestMethod.DELETE)
     @ApiOperation(value = "Delete inlong group info")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.GROUP)
     @ApiImplicitParam(name = "groupId", value = "Inlong group id", 
dataTypeClass = String.class, required = true)
     public Response<String> deleteAsync(@PathVariable String groupId) {
         String operator = LoginUserUtils.getLoginUser().getName();
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongRoleController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongRoleController.java
index 5a692629da..5d78dab153 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongRoleController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongRoleController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.pojo.common.PageResult;
 import org.apache.inlong.manager.pojo.common.Response;
@@ -58,7 +59,7 @@ public class InlongRoleController {
     }
 
     @RequestMapping(value = "/role/inlong/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.INLONG_ROLE)
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     @ApiOperation(value = "Save inlong role")
     public Response<Integer> save(@Validated @RequestBody InlongRoleRequest 
request) {
@@ -67,7 +68,7 @@ public class InlongRoleController {
     }
 
     @RequestMapping(value = "/role/inlong/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.INLONG_ROLE)
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     @ApiOperation(value = "Update inlong role")
     public Response<Boolean> update(@Validated @RequestBody InlongRoleRequest 
request) {
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongStreamController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongStreamController.java
index 2d21e84fe2..da747818ce 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongStreamController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongStreamController.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.web.controller;
 
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.exceptions.BusinessException;
 import org.apache.inlong.manager.common.tool.excel.ExcelTool;
@@ -78,7 +79,7 @@ public class InlongStreamController {
     private InlongStreamProcessService streamProcessOperation;
 
     @RequestMapping(value = "/stream/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.STREAM)
     @ApiOperation(value = "Save inlong stream")
     public Response<Integer> save(@RequestBody InlongStreamRequest request) {
         int result = streamService.save(request, 
LoginUserUtils.getLoginUser().getName());
@@ -133,7 +134,7 @@ public class InlongStreamController {
     }
 
     @RequestMapping(value = "/stream/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.STREAM)
     @ApiOperation(value = "Update inlong stream")
     public Response<Boolean> update(@Validated(UpdateValidation.class) 
@RequestBody InlongStreamRequest request) {
         String username = LoginUserUtils.getLoginUser().getName();
@@ -190,7 +191,7 @@ public class InlongStreamController {
 
     @Deprecated
     @RequestMapping(value = "/stream/delete", method = RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.STREAM)
     @ApiOperation(value = "Delete inlong stream")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "groupId", dataTypeClass = String.class, 
required = true),
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantController.java
index 17f78b9733..6bc9d0d62f 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.validation.UpdateByIdValidation;
 import org.apache.inlong.manager.pojo.common.PageResult;
@@ -62,7 +63,7 @@ public class InlongTenantController {
     }
 
     @RequestMapping(value = "/tenant/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.TENANT)
     @ApiOperation(value = "Save inlong tenant")
     @RequiresRoles(INLONG_ADMIN)
     public Response<Integer> save(@Validated @RequestBody InlongTenantRequest 
request) {
@@ -76,7 +77,7 @@ public class InlongTenantController {
     }
 
     @RequestMapping(value = "/tenant/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.TENANT)
     @ApiOperation(value = "Update inlong tenant")
     @RequiresRoles(INLONG_ADMIN)
     public Response<Boolean> update(@Validated(UpdateByIdValidation.class) 
@RequestBody InlongTenantRequest request) {
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantRoleController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantRoleController.java
index d08ac5508d..ffb45f9650 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantRoleController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantRoleController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.pojo.common.PageResult;
 import org.apache.inlong.manager.pojo.common.Response;
@@ -59,7 +60,7 @@ public class InlongTenantRoleController {
     }
 
     @RequestMapping(value = "/role/tenant/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.TENANT_ROLE)
     @ApiOperation(value = "Save tenant role")
     @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
     public Response<Integer> save(@Validated @RequestBody TenantRoleRequest 
request) {
@@ -68,7 +69,7 @@ public class InlongTenantRoleController {
     }
 
     @RequestMapping(value = "/role/tenant/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.TENANT_ROLE)
     @ApiOperation(value = "Update tenant role")
     @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
     public Response<Boolean> update(@Validated @RequestBody TenantRoleRequest 
request) {
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/OperationLogController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/OperationLogController.java
new file mode 100644
index 0000000000..ca85d714d5
--- /dev/null
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/OperationLogController.java
@@ -0,0 +1,51 @@
+/*
+ * 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.inlong.manager.web.controller;
+
+import org.apache.inlong.manager.pojo.common.PageResult;
+import org.apache.inlong.manager.pojo.common.Response;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest;
+import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse;
+import org.apache.inlong.manager.service.operationlog.OperationLogService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Operation record controller.
+ */
+@RestController
+@RequestMapping("/api")
+@Api(tags = "Operation log-API")
+public class OperationLogController {
+
+    @Autowired
+    private OperationLogService operationLogService;
+
+    @RequestMapping(value = "/operationLog/list", method = RequestMethod.POST)
+    @ApiOperation(value = "List operation log by paginating")
+    public Response<PageResult<OperationLogResponse>> 
listByCondition(@RequestBody OperationLogRequest request) {
+        return Response.success(operationLogService.listByCondition(request));
+    }
+
+}
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSinkController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSinkController.java
index 5b6b9b5e09..e8d0ef93ab 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSinkController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSinkController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.validation.UpdateByIdValidation;
 import org.apache.inlong.manager.common.validation.UpdateByKeyValidation;
@@ -59,7 +60,7 @@ public class StreamSinkController {
     private StreamSinkService sinkService;
 
     @RequestMapping(value = "/sink/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.SINK)
     @ApiOperation(value = "Save stream sink")
     public Response<Integer> save(@Validated @RequestBody SinkRequest request) 
{
         return Response.success(sinkService.save(request, 
LoginUserUtils.getLoginUser().getName()));
@@ -67,6 +68,7 @@ public class StreamSinkController {
 
     @RequestMapping(value = "/sink/get/{id}", method = RequestMethod.GET)
     @ApiOperation(value = "Get stream sink")
+    @OperationLog(operation = OperationType.GET, operationTarget = 
OperationTarget.SINK)
     @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = 
true)
     public Response<StreamSink> get(@PathVariable Integer id) {
         return Response.success(sinkService.get(id, 
LoginUserUtils.getLoginUser()));
@@ -79,14 +81,14 @@ public class StreamSinkController {
     }
 
     @RequestMapping(value = "/sink/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.SINK)
     @ApiOperation(value = "Update stream sink")
     public Response<Boolean> update(@Validated(UpdateByIdValidation.class) 
@RequestBody SinkRequest request) {
         return Response.success(sinkService.update(request, 
LoginUserUtils.getLoginUser().getName()));
     }
 
     @RequestMapping(value = "/sink/updateByKey", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.SINK)
     @ApiOperation(value = "Update stream sink by key")
     public Response<UpdateResult> updateByKey(
             @Validated(UpdateByKeyValidation.class) @RequestBody SinkRequest 
request) {
@@ -94,7 +96,7 @@ public class StreamSinkController {
     }
 
     @RequestMapping(value = "/sink/delete/{id}", method = RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.SINK)
     @ApiOperation(value = "Delete stream sink")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "startProcess", dataTypeClass = 
boolean.class),
@@ -106,7 +108,7 @@ public class StreamSinkController {
     }
 
     @RequestMapping(value = "/sink/deleteByKey", method = RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.SINK)
     @ApiOperation(value = "Delete stream sink by key")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "startProcess", dataTypeClass = 
boolean.class),
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSourceController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSourceController.java
index cd484532fe..f0cbbd56da 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSourceController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSourceController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.validation.SaveValidation;
 import org.apache.inlong.manager.common.validation.UpdateValidation;
@@ -54,7 +55,7 @@ public class StreamSourceController {
     StreamSourceService sourceService;
 
     @RequestMapping(value = "/source/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.SOURCE)
     @ApiOperation(value = "Save stream source")
     public Response<Integer> save(@Validated(SaveValidation.class) 
@RequestBody SourceRequest request) {
         return Response.success(sourceService.save(request, 
LoginUserUtils.getLoginUser().getName()));
@@ -74,14 +75,14 @@ public class StreamSourceController {
     }
 
     @RequestMapping(value = "/source/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.SOURCE)
     @ApiOperation(value = "Update stream source")
     public Response<Boolean> update(@Validated(UpdateValidation.class) 
@RequestBody SourceRequest request) {
         return Response.success(sourceService.update(request, 
LoginUserUtils.getLoginUser().getName()));
     }
 
     @RequestMapping(value = "/source/delete/{id}", method = 
RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.SOURCE)
     @ApiOperation(value = "Delete stream source")
     @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = 
true)
     public Response<Boolean> delete(@PathVariable Integer id) {
@@ -106,7 +107,7 @@ public class StreamSourceController {
     }
 
     @RequestMapping(value = "/source/forceDelete", method = 
RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.SOURCE)
     @ApiOperation(value = "Force delete stream source by groupId and streamId")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "inlongGroupId", dataTypeClass = 
String.class, required = true),
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamTransformController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamTransformController.java
index 2da355a2c7..7e803a5258 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamTransformController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamTransformController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.validation.UpdateValidation;
 import org.apache.inlong.manager.pojo.common.PageResult;
@@ -52,7 +53,7 @@ public class StreamTransformController {
     protected StreamTransformService streamTransformService;
 
     @RequestMapping(value = "/transform/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.TRANSFORM)
     @ApiOperation(value = "Save stream transform")
     public Response<Integer> save(@Validated @RequestBody TransformRequest 
request) {
         return Response.success(
@@ -73,7 +74,7 @@ public class StreamTransformController {
     }
 
     @RequestMapping(value = "/transform/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.TRANSFORM)
     @ApiOperation(value = "Update stream transform")
     public Response<Boolean> update(@Validated(UpdateValidation.class) 
@RequestBody TransformRequest request) {
         String operator = LoginUserUtils.getLoginUser().getName();
@@ -81,7 +82,7 @@ public class StreamTransformController {
     }
 
     @RequestMapping(value = "/transform/delete", method = RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.TRANSFORM)
     @ApiOperation(value = "Delete stream transform")
     public Response<Boolean> delete(@Validated DeleteTransformRequest request) 
{
         String operator = LoginUserUtils.getLoginUser().getName();
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java
index 70b24dc952..7d3f690f1d 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.enums.TenantUserTypeEnum;
 import org.apache.inlong.manager.pojo.common.PageResult;
@@ -55,7 +56,7 @@ public class WorkflowApproverController {
     private WorkflowApproverService workflowApproverService;
 
     @PostMapping("/workflow/approver/save")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Save approver info")
     @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
     public Response<Integer> save(@RequestBody ApproverRequest config) {
@@ -79,7 +80,7 @@ public class WorkflowApproverController {
     }
 
     @PostMapping("/workflow/approver/update")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Update approver info")
     @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
     public Response<Integer> update(@RequestBody ApproverRequest request) {
@@ -87,7 +88,7 @@ public class WorkflowApproverController {
     }
 
     @DeleteMapping("/workflow/approver/delete/{id}")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Delete approver by ID")
     @ApiImplicitParam(name = "id", value = "Workflow approver ID", 
dataTypeClass = Integer.class, required = true)
     @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowController.java
index b38fd6a298..50bf6fe64f 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.pojo.common.PageResult;
 import org.apache.inlong.manager.pojo.common.Response;
@@ -65,7 +66,7 @@ public class WorkflowController {
     private WorkflowService workflowService;
 
     @PostMapping("/workflow/start")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Initiation process")
     public Response<WorkflowResult> start(@RequestBody 
WorkflowOperationRequest request) {
         String applicant = LoginUserUtils.getLoginUser().getName();
@@ -73,7 +74,7 @@ public class WorkflowController {
     }
 
     @PostMapping("/workflow/cancel/{id}")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Cancellation process")
     @ApiImplicitParam(name = "id", value = "Process ID", dataTypeClass = 
Integer.class, required = true)
     public Response<WorkflowResult> cancel(@PathVariable Integer id, 
@RequestBody WorkflowOperationRequest request) {
@@ -82,7 +83,7 @@ public class WorkflowController {
     }
 
     @PostMapping("/workflow/continue/{id}")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Continue process")
     @ApiImplicitParam(name = "id", value = "Process ID", dataTypeClass = 
Integer.class, required = true)
     public Response<WorkflowResult> continueProcess(@PathVariable Integer id,
@@ -92,7 +93,7 @@ public class WorkflowController {
     }
 
     @PostMapping("/workflow/approve/{id}")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Approval and consent")
     @ApiImplicitParam(name = "id", value = "Task ID", dataTypeClass = 
Integer.class, required = true)
     public Response<WorkflowResult> approve(@PathVariable Integer id, 
@RequestBody WorkflowApprovalRequest request) {
@@ -101,7 +102,7 @@ public class WorkflowController {
     }
 
     @PostMapping("/workflow/reject/{id}")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Approval rejected")
     @ApiImplicitParam(name = "id", value = "Task ID", dataTypeClass = 
Integer.class, required = true)
     public Response<WorkflowResult> reject(@PathVariable Integer id, 
@RequestBody WorkflowApprovalRequest request) {
@@ -110,7 +111,7 @@ public class WorkflowController {
     }
 
     @PostMapping("/workflow/transfer/{id}")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Turn to another approver", notes = "Change 
approver")
     @ApiImplicitParam(name = "id", value = "Task ID", dataTypeClass = 
Integer.class, required = true)
     public Response<WorkflowResult> transfer(@PathVariable Integer id, 
@RequestBody WorkflowApprovalRequest request) {
@@ -120,7 +121,7 @@ public class WorkflowController {
     }
 
     @PostMapping("/workflow/complete/{id}")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Complete task by ID")
     @ApiImplicitParam(name = "id", value = "Task ID", dataTypeClass = 
Integer.class, required = true)
     public Response<WorkflowResult> complete(@PathVariable Integer id, 
@RequestBody WorkflowApprovalRequest request) {
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowEventController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowEventController.java
index 4ae48176c2..e8ea452967 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowEventController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowEventController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.enums.ProcessEvent;
 import org.apache.inlong.manager.common.enums.TaskEvent;
@@ -66,7 +67,7 @@ public class WorkflowEventController {
 
     @Deprecated
     @PostMapping("/workflow/event/executeEventListener/{id}")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Execute the listener based on the event log ID")
     @ApiImplicitParam(name = "id", value = "Event log ID", dataTypeClass = 
Integer.class, required = true)
     public Response<Object> executeEventListener(@PathVariable Integer id) {
@@ -76,7 +77,7 @@ public class WorkflowEventController {
 
     @Deprecated
     @PostMapping("/workflow/event/executeProcessEventListener")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Re-execute the specified listener based on the 
process ID")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "processId", value = "Process ID", 
dataTypeClass = Integer.class),
@@ -90,7 +91,7 @@ public class WorkflowEventController {
 
     @Deprecated
     @PostMapping("/workflow/event/executeTaskEventListener")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Re-execute the specified listener based on the task 
ID")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "taskId", value = "Task ID", 
dataTypeClass = Integer.class),
@@ -103,7 +104,7 @@ public class WorkflowEventController {
 
     @Deprecated
     @PostMapping("/workflow/event/triggerProcessEvent")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Re-trigger the process event based on the process 
ID")
     public Response<Object> triggerProcessEvent(
             @ApiParam(value = "process id", required = true) Integer processId,
@@ -114,7 +115,7 @@ public class WorkflowEventController {
 
     @Deprecated
     @PostMapping("/workflow/event/triggerTaskEvent")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.WORKFLOW)
     @ApiOperation(value = "Re-trigger the task event based on the task ID")
     public Response<Object> triggerTaskEvent(
             @ApiParam(value = "task id", required = true) Integer taskId,
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenDataNodeController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenDataNodeController.java
index 833580edc3..37845aeb00 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenDataNodeController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenDataNodeController.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.web.controller.openapi;
 
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.util.Preconditions;
 import org.apache.inlong.manager.common.validation.SaveValidation;
@@ -75,7 +76,7 @@ public class OpenDataNodeController {
 
     @PostMapping(value = "/node/save")
     @ApiOperation(value = "Save node")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.NODE)
     public Response<Integer> save(@Validated(SaveValidation.class) 
@RequestBody DataNodeRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
         Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), 
ErrorCodeEnum.LOGIN_USER_EMPTY);
@@ -84,7 +85,7 @@ public class OpenDataNodeController {
 
     @PostMapping(value = "/node/update")
     @ApiOperation(value = "Update data node")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.NODE)
     public Response<Boolean> update(@Validated(UpdateByIdValidation.class) 
@RequestBody DataNodeRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.REQUEST_IS_EMPTY);
         Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), 
ErrorCodeEnum.LOGIN_USER_EMPTY);
@@ -93,7 +94,7 @@ public class OpenDataNodeController {
 
     @DeleteMapping(value = "/node/delete/{id}")
     @ApiOperation(value = "Delete data node by id")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.NODE)
     @ApiImplicitParam(name = "id", value = "Data node ID", dataTypeClass = 
Integer.class, required = true)
     public Response<Boolean> delete(@PathVariable Integer id) {
         Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, "data 
node id cannot be null");
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java
index f72e66a416..ebbfd442ef 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.web.controller.openapi;
 
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.enums.TenantUserTypeEnum;
 import org.apache.inlong.manager.common.util.Preconditions;
@@ -94,7 +95,7 @@ public class OpenInLongClusterController {
 
     @PostMapping(value = "/cluster/tag/save")
     @ApiOperation(value = "Save cluster tag")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CLUSTER)
     public Response<Integer> saveTag(@Validated(SaveValidation.class) 
@RequestBody ClusterTagRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
         Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), 
ErrorCodeEnum.LOGIN_USER_EMPTY);
@@ -102,7 +103,7 @@ public class OpenInLongClusterController {
     }
 
     @PostMapping(value = "/cluster/tag/update")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiOperation(value = "Update cluster tag")
     public Response<Boolean> updateTag(@Validated(UpdateValidation.class) 
@RequestBody ClusterTagRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -112,7 +113,7 @@ public class OpenInLongClusterController {
 
     @DeleteMapping(value = "/cluster/tag/delete/{id}")
     @ApiOperation(value = "Delete cluster tag by id")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = 
Integer.class, required = true)
     public Response<Boolean> deleteTag(@PathVariable Integer id) {
         Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, "tag 
id cannot be null");
@@ -141,7 +142,7 @@ public class OpenInLongClusterController {
 
     @PostMapping(value = "/cluster/save")
     @ApiOperation(value = "Save cluster")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CLUSTER)
     public Response<Integer> save(@Validated(SaveValidation.class) 
@RequestBody ClusterRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
         Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), 
ErrorCodeEnum.LOGIN_USER_EMPTY);
@@ -150,7 +151,7 @@ public class OpenInLongClusterController {
 
     @PostMapping(value = "/cluster/update")
     @ApiOperation(value = "Update cluster")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CLUSTER)
     public Response<Boolean> update(@Validated(UpdateByIdValidation.class) 
@RequestBody ClusterRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
         Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), 
ErrorCodeEnum.LOGIN_USER_EMPTY);
@@ -159,7 +160,7 @@ public class OpenInLongClusterController {
 
     @PostMapping(value = "/cluster/bindTag")
     @ApiOperation(value = "Bind or unbind cluster tag")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CLUSTER)
     public Response<Boolean> bindTag(@Validated @RequestBody BindTagRequest 
request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
         Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), 
ErrorCodeEnum.LOGIN_USER_EMPTY);
@@ -168,7 +169,7 @@ public class OpenInLongClusterController {
 
     @DeleteMapping(value = "/cluster/delete/{id}")
     @ApiOperation(value = "Delete cluster by id")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiImplicitParam(name = "id", value = "Cluster ID", dataTypeClass = 
Integer.class, required = true)
     public Response<Boolean> delete(@PathVariable Integer id) {
         Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, 
"cluster id cannot be null");
@@ -200,7 +201,7 @@ public class OpenInLongClusterController {
             @ApiImplicitParam(name = "clusterType", dataTypeClass = 
String.class, required = true),
             @ApiImplicitParam(name = "protocolType", dataTypeClass = 
String.class, required = false)
     })
-    @OperationLog(operation = OperationType.GET)
+    @OperationLog(operation = OperationType.GET, operationTarget = 
OperationTarget.CLUSTER)
     public Response<List<ClusterNodeResponse>> listByGroupId(@RequestParam 
String inlongGroupId,
             @RequestParam String clusterType, @RequestParam(required = false) 
String protocolType) {
         Preconditions.expectNotBlank(inlongGroupId, 
ErrorCodeEnum.INVALID_PARAMETER, "inlongGroupId cannot be blank");
@@ -212,7 +213,7 @@ public class OpenInLongClusterController {
 
     @PostMapping(value = "/cluster/node/save")
     @ApiOperation(value = "Save cluster node")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CLUSTER)
     public Response<Integer> saveNode(@Validated @RequestBody 
ClusterNodeRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
         Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), 
ErrorCodeEnum.LOGIN_USER_EMPTY);
@@ -220,7 +221,7 @@ public class OpenInLongClusterController {
     }
 
     @RequestMapping(value = "/cluster/node/update", method = 
RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiOperation(value = "Update cluster node")
     public Response<Boolean> updateNode(@Validated(UpdateValidation.class) 
@RequestBody ClusterNodeRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -230,7 +231,7 @@ public class OpenInLongClusterController {
 
     @RequestMapping(value = "/cluster/node/delete/{id}", method = 
RequestMethod.DELETE)
     @ApiOperation(value = "Delete cluster node")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiImplicitParam(name = "id", value = "Cluster node ID", dataTypeClass = 
Integer.class, required = true)
     public Response<Boolean> deleteNode(@PathVariable Integer id) {
         Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, 
"cluster id cannot be null");
@@ -240,7 +241,7 @@ public class OpenInLongClusterController {
 
     @PostMapping(value = "/cluster/tenant/tag/save")
     @ApiOperation(value = "Save tenant cluster tag")
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CLUSTER)
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Integer> saveTenantTag(
             @Validated(SaveValidation.class) @RequestBody 
TenantClusterTagRequest request) {
@@ -270,7 +271,7 @@ public class OpenInLongClusterController {
 
     @DeleteMapping(value = "/cluster/tenant/tag/delete/{id}")
     @ApiOperation(value = "Delete tenant cluster tag by id")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CLUSTER)
     @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = 
Integer.class, required = true)
     @RequiresRoles(value = UserRoleCode.INLONG_ADMIN)
     public Response<Boolean> deleteTenantTag(@PathVariable Integer id) {
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java
index 97eb20e31b..8dca1ad748 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.web.controller.openapi;
 
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.util.Preconditions;
 import org.apache.inlong.manager.common.validation.SaveValidation;
@@ -79,7 +80,7 @@ public class OpenInLongGroupController {
     }
 
     @RequestMapping(value = "/group/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.GROUP)
     @ApiOperation(value = "Save inlong group")
     public Response<String> save(@Validated(SaveValidation.class) @RequestBody 
InlongGroupRequest groupRequest) {
         Preconditions.expectNotNull(groupRequest, 
ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null");
@@ -88,7 +89,7 @@ public class OpenInLongGroupController {
     }
 
     @RequestMapping(value = "/group/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.GROUP)
     @ApiOperation(value = "Update inlong group")
     public Response<String> update(@Validated(UpdateValidation.class) 
@RequestBody InlongGroupRequest groupRequest) {
         Preconditions.expectNotNull(groupRequest, 
ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null");
@@ -98,7 +99,7 @@ public class OpenInLongGroupController {
 
     @RequestMapping(value = "/group/delete/{groupId}", method = 
RequestMethod.DELETE)
     @ApiOperation(value = "Delete inlong group info")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.GROUP)
     @ApiImplicitParam(name = "groupId", value = "Inlong group id", 
dataTypeClass = String.class, required = true)
     public Response<Boolean> delete(@PathVariable String groupId) {
         Preconditions.expectNotBlank(groupId, ErrorCodeEnum.INVALID_PARAMETER, 
"groupId cannot be blank");
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongStreamController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongStreamController.java
index 7115132581..893e0e589b 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongStreamController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongStreamController.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.web.controller.openapi;
 
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.util.Preconditions;
 import org.apache.inlong.manager.common.validation.UpdateValidation;
@@ -96,7 +97,7 @@ public class OpenInLongStreamController {
     }
 
     @RequestMapping(value = "/stream/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.STREAM)
     @ApiOperation(value = "Save inlong stream")
     public Response<Integer> save(@RequestBody InlongStreamRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -105,7 +106,7 @@ public class OpenInLongStreamController {
     }
 
     @RequestMapping(value = "/stream/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.STREAM)
     @ApiOperation(value = "Update inlong stream")
     public Response<Boolean> update(@Validated(UpdateValidation.class) 
@RequestBody InlongStreamRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -114,7 +115,7 @@ public class OpenInLongStreamController {
     }
 
     @RequestMapping(value = "/stream/delete", method = RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.STREAM)
     @ApiOperation(value = "Delete inlong stream")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "groupId", dataTypeClass = String.class, 
required = true),
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongConsumeController.java
similarity index 89%
copy from 
inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java
copy to 
inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongConsumeController.java
index 6433f46655..29d8a4c2c8 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongConsumeController.java
@@ -15,8 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.inlong.manager.web.controller;
+package org.apache.inlong.manager.web.controller.openapi;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.enums.TenantUserTypeEnum;
 import org.apache.inlong.manager.common.validation.UpdateValidation;
@@ -51,9 +52,9 @@ import org.springframework.web.bind.annotation.RestController;
  * Inlong consume control layer
  */
 @RestController
-@RequestMapping("/api")
-@Api(tags = "Inlong-Consume-API")
-public class InlongConsumeController {
+@RequestMapping("/openapi")
+@Api(tags = "Open-Consume-API")
+public class OpenInlongConsumeController {
 
     @Autowired
     private InlongConsumeService consumeService;
@@ -61,7 +62,7 @@ public class InlongConsumeController {
     private InlongConsumeProcessService consumeProcessService;
 
     @RequestMapping(value = "/consume/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.CONSUME)
     @ApiOperation(value = "Save inlong consume")
     public Response<Integer> save(@RequestBody InlongConsumeRequest request) {
         String operator = LoginUserUtils.getLoginUser().getName();
@@ -91,14 +92,14 @@ public class InlongConsumeController {
     }
 
     @PostMapping("/consume/update")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CONSUME)
     @ApiOperation(value = "Update inlong consume")
     public Response<Integer> update(@Validated(UpdateValidation.class) 
@RequestBody InlongConsumeRequest request) {
         return Response.success(consumeService.update(request, 
LoginUserUtils.getLoginUser().getName()));
     }
 
     @DeleteMapping("/consume/delete/{id}")
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.CONSUME)
     @ApiOperation(value = "Delete inlong consume by ID")
     @ApiImplicitParam(name = "id", value = "Inlong consume ID", dataTypeClass 
= Integer.class, required = true)
     public Response<Boolean> delete(@PathVariable(name = "id") Integer id) {
@@ -106,7 +107,7 @@ public class InlongConsumeController {
     }
 
     @PostMapping("/consume/startProcess/{id}")
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.CONSUME)
     @ApiOperation(value = "Start inlong consume process")
     @ApiImplicitParam(name = "id", value = "Inlong consume ID", dataTypeClass 
= Integer.class, required = true)
     public Response<WorkflowResult> startProcess(@PathVariable(name = "id") 
Integer id) {
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java
index 6f9bd2a79f..b14b40777d 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller.openapi;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.validation.UpdateByIdValidation;
 import org.apache.inlong.manager.pojo.common.PageResult;
@@ -55,7 +56,7 @@ public class OpenInlongTenantController {
     }
 
     @RequestMapping(value = "/tenant/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.TENANT)
     @ApiOperation(value = "Save inlong tenant")
     public Response<Integer> save(@Validated @RequestBody InlongTenantRequest 
request) {
         return Response.success(tenantService.save(request));
@@ -68,7 +69,7 @@ public class OpenInlongTenantController {
     }
 
     @RequestMapping(value = "/tenant/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.TENANT)
     @ApiOperation(value = "Update inlong tenant")
     public Response<Boolean> update(@Validated(UpdateByIdValidation.class) 
@RequestBody InlongTenantRequest request) {
         return Response.success(tenantService.update(request));
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java
index 37f478cc3d..7e24b866e8 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java
@@ -17,6 +17,7 @@
 
 package org.apache.inlong.manager.web.controller.openapi;
 
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.pojo.common.PageResult;
 import org.apache.inlong.manager.pojo.common.Response;
@@ -59,7 +60,7 @@ public class OpenInlongTenantRoleController {
     }
 
     @RequestMapping(value = "/role/tenant/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.TENANT)
     @ApiOperation(value = "Save tenant role")
     @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
     public Response<Integer> save(@Validated @RequestBody TenantRoleRequest 
request) {
@@ -68,7 +69,7 @@ public class OpenInlongTenantRoleController {
     }
 
     @RequestMapping(value = "/role/tenant/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.TENANT)
     @ApiOperation(value = "Update tenant role")
     @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, 
UserRoleCode.INLONG_ADMIN})
     public Response<Boolean> update(@Validated @RequestBody TenantRoleRequest 
request) {
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSinkController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSinkController.java
index d85c43a5ab..d69f0895f4 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSinkController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSinkController.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.web.controller.openapi;
 
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.util.Preconditions;
 import org.apache.inlong.manager.common.validation.UpdateByIdValidation;
@@ -57,6 +58,7 @@ public class OpenStreamSinkController {
 
     @RequestMapping(value = "/sink/get/{id}", method = RequestMethod.GET)
     @ApiOperation(value = "Get stream sink")
+    @OperationLog(operation = OperationType.GET, operationTarget = 
OperationTarget.SINK)
     @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = 
true)
     public Response<StreamSink> get(@PathVariable Integer id) {
         Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, 
"sinkId cannot be null");
@@ -73,7 +75,7 @@ public class OpenStreamSinkController {
     }
 
     @RequestMapping(value = "/sink/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.SINK)
     @ApiOperation(value = "Save stream sink")
     public Response<Integer> save(@Validated @RequestBody SinkRequest request) 
{
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -82,7 +84,7 @@ public class OpenStreamSinkController {
     }
 
     @RequestMapping(value = "/sink/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.SINK)
     @ApiOperation(value = "Update stream sink")
     public Response<Boolean> update(@Validated(UpdateByIdValidation.class) 
@RequestBody SinkRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -91,7 +93,7 @@ public class OpenStreamSinkController {
     }
 
     @RequestMapping(value = "/sink/delete/{id}", method = RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.SINK)
     @ApiOperation(value = "Delete stream sink")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "startProcess", dataTypeClass = 
boolean.class),
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSourceController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSourceController.java
index 5e5ef9adc3..6bd7ab19dd 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSourceController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSourceController.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.web.controller.openapi;
 
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.util.Preconditions;
 import org.apache.inlong.manager.common.validation.SaveValidation;
@@ -71,7 +72,7 @@ public class OpenStreamSourceController {
     }
 
     @RequestMapping(value = "/source/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.SOURCE)
     @ApiOperation(value = "Save stream source")
     public Response<Integer> save(@Validated(SaveValidation.class) 
@RequestBody SourceRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -80,7 +81,7 @@ public class OpenStreamSourceController {
     }
 
     @RequestMapping(value = "/source/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.SOURCE)
     @ApiOperation(value = "Update stream source")
     public Response<Boolean> update(@Validated(UpdateValidation.class) 
@RequestBody SourceRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -89,7 +90,7 @@ public class OpenStreamSourceController {
     }
 
     @RequestMapping(value = "/source/delete/{id}", method = 
RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.DELETE)
+    @OperationLog(operation = OperationType.DELETE, operationTarget = 
OperationTarget.SOURCE)
     @ApiOperation(value = "Delete stream source")
     @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = 
true)
     public Response<Boolean> delete(@PathVariable Integer id) {
diff --git 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamTransformController.java
 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamTransformController.java
index 66a45e74e9..80d939d5ff 100644
--- 
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamTransformController.java
+++ 
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamTransformController.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.web.controller.openapi;
 
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
+import org.apache.inlong.manager.common.enums.OperationTarget;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.util.Preconditions;
 import org.apache.inlong.manager.common.validation.UpdateValidation;
@@ -63,7 +64,7 @@ public class OpenStreamTransformController {
     }
 
     @RequestMapping(value = "/transform/save", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.CREATE)
+    @OperationLog(operation = OperationType.CREATE, operationTarget = 
OperationTarget.STREAM)
     @ApiOperation(value = "Save stream transform")
     public Response<Integer> save(@Validated @RequestBody TransformRequest 
request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -73,7 +74,7 @@ public class OpenStreamTransformController {
     }
 
     @RequestMapping(value = "/transform/update", method = RequestMethod.POST)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.STREAM)
     @ApiOperation(value = "Update stream transform")
     public Response<Boolean> update(@Validated(UpdateValidation.class) 
@RequestBody TransformRequest request) {
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");
@@ -82,7 +83,7 @@ public class OpenStreamTransformController {
     }
 
     @RequestMapping(value = "/transform/delete", method = RequestMethod.DELETE)
-    @OperationLog(operation = OperationType.UPDATE)
+    @OperationLog(operation = OperationType.UPDATE, operationTarget = 
OperationTarget.STREAM)
     @ApiOperation(value = "Delete stream transform")
     public Response<Boolean> delete(@Validated DeleteTransformRequest request) 
{
         Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, 
"request cannot be null");

Reply via email to