You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ho...@apache.org on 2022/04/19 08:50:08 UTC

[skywalking] branch master updated: Add layer field to event (#8881)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 8247bc3c71 Add layer field to event (#8881)
8247bc3c71 is described below

commit 8247bc3c719081ff3e2b7d1848ed0c05fc229784
Author: Hoshea Jiang <fg...@gmail.com>
AuthorDate: Tue Apr 19 16:49:52 2022 +0800

    Add layer field to event (#8881)
---
 apm-protocol/apm-network/src/main/proto                |  2 +-
 docs/en/changes/changes.md                             |  1 +
 .../event/listener/EventRecordAnalyzerListener.java    |  3 +++
 .../server/core/alarm/provider/EventHookCallback.java  |  4 +++-
 .../oap/server/core/query/type/event/Event.java        |  3 +--
 .../skywalking/oap/server/core/source/Event.java       | 15 +++++++++++++++
 .../receiver/event/grpc/EventGrpcServiceHandler.java   | 18 ++++++++++++++++++
 .../receiver/event/rest/EventRestServiceHandler.java   | 13 ++++++++++++-
 .../plugin/elasticsearch/query/ESEventQueryDAO.java    |  7 +++++++
 .../storage/plugin/influxdb/query/EventQueryDAO.java   | 13 +++++++++++++
 .../storage/plugin/iotdb/query/IoTDBEventQueryDAO.java |  4 ++++
 .../storage/plugin/jdbc/h2/dao/H2EventQueryDAO.java    |  8 +++++++-
 .../alarm/expected/silence-after-graphql-critical.yml  |  2 ++
 .../alarm/expected/silence-after-graphql-warn.yml      |  2 ++
 .../alarm/expected/silence-before-graphql-critical.yml |  1 +
 .../alarm/expected/silence-before-graphql-warn.yml     |  1 +
 test/e2e-v2/cases/event/event-cases.yaml               |  3 ++-
 test/e2e-v2/cases/event/expected/events.yml            |  1 +
 test/e2e-v2/cases/event/expected/report-event.yml      |  3 ++-
 .../satellite/native-protocols/expected/event-list.yml |  2 ++
 test/e2e-v2/cases/storage/expected/event-list.yml      |  2 ++
 test/e2e-v2/script/env                                 |  4 ++--
 .../script/prepare/setup-e2e-shell/install-swctl.sh    | 13 +++++++++++--
 23 files changed, 113 insertions(+), 12 deletions(-)

diff --git a/apm-protocol/apm-network/src/main/proto b/apm-protocol/apm-network/src/main/proto
index 2981c652ca..f9066463de 160000
--- a/apm-protocol/apm-network/src/main/proto
+++ b/apm-protocol/apm-network/src/main/proto
@@ -1 +1 @@
-Subproject commit 2981c652ca6c5125d71bb104dbe441abe3d8a2d4
+Subproject commit f9066463deb7f9d1fbe8110eab3524694b0db298
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 8454c2a1ee..f69d8c8084 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -19,6 +19,7 @@
 * Fix OAP Self-Observability metric `GC Time` calculation.
 * Set `SW_QUERY_MAX_QUERY_COMPLEXITY` default value to `1000`
 * Webapp module (for UI) enabled compression.
+* [Breaking Change] Add layer field to event, report an event without layer is not allowed.
 
 #### UI
 
diff --git a/oap-server/analyzer/event-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/event/listener/EventRecordAnalyzerListener.java b/oap-server/analyzer/event-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/event/listener/EventRecordAnalyzerListener.java
index b8c0d18538..b63501e350 100644
--- a/oap-server/analyzer/event-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/event/listener/EventRecordAnalyzerListener.java
+++ b/oap-server/analyzer/event-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/event/listener/EventRecordAnalyzerListener.java
@@ -22,6 +22,7 @@ import com.google.gson.Gson;
 import lombok.RequiredArgsConstructor;
 import org.apache.skywalking.apm.network.event.v3.Source;
 import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
 import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
 import org.apache.skywalking.oap.server.core.config.NamingControl;
@@ -50,6 +51,8 @@ public class EventRecordAnalyzerListener implements EventAnalyzerListener {
 
     @Override
     public void parse(final org.apache.skywalking.apm.network.event.v3.Event e) {
+        event.setLayer(Layer.nameOf(e.getLayer()));
+
         event.setUuid(e.getUuid());
 
         if (e.hasSource()) {
diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java
index fe8629657e..b1791eb37a 100644
--- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java
+++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java
@@ -26,6 +26,7 @@ import org.apache.skywalking.oap.server.analyzer.event.EventAnalyzerService;
 import org.apache.skywalking.oap.server.core.alarm.AlarmCallback;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
 import org.apache.skywalking.oap.server.core.analysis.IDManager;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 
@@ -64,7 +65,8 @@ public class EventHookCallback implements AlarmCallback {
                 .setStartTime(now - (msg.getPeriod() * 60 * 1000))
                 .setMessage(msg.getAlarmMessage())
                 .setType(Type.Error)
-                .setEndTime(now);
+                .setEndTime(now)
+                .setLayer(Layer.GENERAL.name());
         switch (msg.getScopeId()) {
             case DefaultScopeDefine.SERVICE :
                 IDManager.ServiceID.ServiceIDDefinition serviceIdDef = IDManager.ServiceID.analysisId(msg.getId0());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/event/Event.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/event/Event.java
index e279de1f9a..d3ecde438d 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/event/Event.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/event/Event.java
@@ -24,7 +24,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 import lombok.Data;
-import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.library.util.StringUtil;
 import org.apache.skywalking.oap.server.core.query.type.KeyValue;
 
@@ -48,7 +47,7 @@ public class Event {
 
     private long endTime;
 
-    private String layer = Layer.UNDEFINED.name();
+    private String layer;
 
     public void setParameters(final List<KeyValue> parameters) {
         this.parameters = parameters;
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Event.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Event.java
index 67dcf159b3..32342bcb9d 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Event.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Event.java
@@ -23,6 +23,7 @@ import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.skywalking.oap.server.core.analysis.IDManager;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.analysis.MetricsExtension;
 import org.apache.skywalking.oap.server.core.analysis.Stream;
 import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
@@ -75,6 +76,8 @@ public class Event extends Metrics implements ISource, WithMetadata, LongValueHo
 
     public static final String END_TIME = "end_time";
 
+    public static final String LAYER = "layer";
+
     private static final int PARAMETER_MAX_LENGTH = 2000;
 
     @Override
@@ -112,6 +115,9 @@ public class Event extends Metrics implements ISource, WithMetadata, LongValueHo
     @Column(columnName = END_TIME)
     private long endTime;
 
+    @Column(columnName = LAYER)
+    private Layer layer;
+
     private transient long value = 1;
 
     @Override
@@ -186,6 +192,8 @@ public class Event extends Metrics implements ISource, WithMetadata, LongValueHo
         setStartTime(remoteData.getDataLongs(0));
         setEndTime(remoteData.getDataLongs(1));
         setTimeBucket(remoteData.getDataLongs(2));
+
+        setLayer(Layer.valueOf(remoteData.getDataIntegers(0)));
     }
 
     @Override
@@ -205,6 +213,8 @@ public class Event extends Metrics implements ISource, WithMetadata, LongValueHo
         builder.addDataLongs(getEndTime());
         builder.addDataLongs(getTimeBucket());
 
+        builder.addDataIntegers(getLayer().value());
+
         return builder;
     }
 
@@ -258,6 +268,9 @@ public class Event extends Metrics implements ISource, WithMetadata, LongValueHo
             record.setStartTime(((Number) converter.get(START_TIME)).longValue());
             record.setEndTime(((Number) converter.get(END_TIME)).longValue());
             record.setTimeBucket(((Number) converter.get(TIME_BUCKET)).longValue());
+            if (converter.get(LAYER) != null) {
+                record.setLayer(Layer.valueOf(((Number) converter.get(LAYER)).intValue()));
+            }
             return record;
         }
 
@@ -274,6 +287,8 @@ public class Event extends Metrics implements ISource, WithMetadata, LongValueHo
             converter.accept(START_TIME, storageData.getStartTime());
             converter.accept(END_TIME, storageData.getEndTime());
             converter.accept(TIME_BUCKET, storageData.getTimeBucket());
+            Layer layer = storageData.getLayer();
+            converter.accept(LAYER, layer != null ? layer.value() : Layer.UNDEFINED.value());
         }
     }
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/grpc/EventGrpcServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/grpc/EventGrpcServiceHandler.java
index cc3ac9d00b..95b4672017 100644
--- a/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/grpc/EventGrpcServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/grpc/EventGrpcServiceHandler.java
@@ -18,12 +18,15 @@
 
 package org.apache.skywalking.oap.server.receiver.event.grpc;
 
+import io.grpc.Status;
 import io.grpc.stub.StreamObserver;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.common.v3.Commands;
 import org.apache.skywalking.apm.network.event.v3.Event;
 import org.apache.skywalking.apm.network.event.v3.EventServiceGrpc;
 import org.apache.skywalking.oap.server.analyzer.event.EventAnalyzerModule;
+import org.apache.skywalking.oap.server.core.UnexpectedException;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
 import org.apache.skywalking.oap.server.analyzer.event.EventAnalyzerService;
@@ -66,6 +69,21 @@ public class EventGrpcServiceHandler extends EventServiceGrpc.EventServiceImplBa
             @Override
             public void onNext(final Event event) {
                 try (HistogramMetrics.Timer ignored = histogram.createTimer()) {
+                    String errMsg = null;
+                    // Check event's layer
+                    if (event.getLayer().isEmpty()) {
+                        errMsg = "Layer field is required since v9.0.0, please upgrade your event report tools";
+                    }
+                    try {
+                        Layer.nameOf(event.getLayer());
+                    } catch (UnexpectedException e) {
+                        errMsg = e.getMessage();
+                    }
+                    if (errMsg != null) {
+                        responseObserver.onError(Status.INVALID_ARGUMENT.withDescription(errMsg).asException());
+                        return;
+                    }
+
                     eventAnalyzerService.analyze(event);
                 } catch (Exception e) {
                     errorCounter.inc();
diff --git a/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/rest/EventRestServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/rest/EventRestServiceHandler.java
index 5bca3889e1..13ca96bf19 100644
--- a/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/rest/EventRestServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/rest/EventRestServiceHandler.java
@@ -18,12 +18,15 @@
 package org.apache.skywalking.oap.server.receiver.event.rest;
 
 import com.linecorp.armeria.server.annotation.Post;
+
 import java.util.List;
+
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.common.v3.Commands;
 import org.apache.skywalking.apm.network.event.v3.Event;
 import org.apache.skywalking.oap.server.analyzer.event.EventAnalyzerModule;
 import org.apache.skywalking.oap.server.analyzer.event.EventAnalyzerService;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
 import org.apache.skywalking.oap.server.telemetry.api.CounterMetrics;
@@ -61,7 +64,15 @@ public class EventRestServiceHandler {
     @Post("/v3/events")
     public Commands collectEvents(final List<Event> events) {
         try (HistogramMetrics.Timer ignored = histogram.createTimer()) {
-            events.forEach(eventAnalyzerService::analyze);
+            events.forEach(e -> {
+                // Check event's layer
+                if (e.getLayer().isEmpty()) {
+                    throw new IllegalArgumentException("layer field is required since v9.0.0, please upgrade your event report tools");
+                }
+                Layer.nameOf(e.getLayer());
+
+                eventAnalyzerService.analyze(e);
+            });
             return Commands.newBuilder().build();
         } catch (Exception e) {
             errorCounter.inc();
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/ESEventQueryDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/ESEventQueryDAO.java
index 0701815291..588a06cf99 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/ESEventQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/ESEventQueryDAO.java
@@ -29,6 +29,7 @@ import org.apache.skywalking.library.elasticsearch.requests.search.SearchBuilder
 import org.apache.skywalking.library.elasticsearch.requests.search.Sort;
 import org.apache.skywalking.library.elasticsearch.response.search.SearchHit;
 import org.apache.skywalking.library.elasticsearch.response.search.SearchResponse;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.query.PaginationUtils;
 import org.apache.skywalking.oap.server.core.query.enumeration.Order;
 import org.apache.skywalking.oap.server.core.query.input.Duration;
@@ -115,6 +116,10 @@ public class ESEventQueryDAO extends EsDAO implements IEventQueryDAO {
                 query.must(Query.range(Event.END_TIME).lt(startTime.getEndTimestamp()));
             }
         }
+
+        if (!isNullOrEmpty(condition.getLayer())) {
+            query.must(Query.term(Event.LAYER, condition.getLayer()));
+        }
     }
 
     protected SearchBuilder buildQuery(final List<EventQueryCondition> conditionList) {
@@ -179,6 +184,8 @@ public class ESEventQueryDAO extends EsDAO implements IEventQueryDAO {
             event.setEndTime(Long.parseLong(endTimeStr));
         }
 
+        event.setLayer(Layer.valueOf(Integer.parseInt(searchHit.getSource().get(Event.LAYER).toString())).name());
+
         return event;
     }
 }
diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/EventQueryDAO.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/EventQueryDAO.java
index 3879b71ec9..065b475139 100644
--- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/EventQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/EventQueryDAO.java
@@ -26,6 +26,7 @@ import java.util.Map;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.query.PaginationUtils;
 import org.apache.skywalking.oap.server.core.source.Event;
 import org.apache.skywalking.oap.server.core.query.enumeration.Order;
@@ -105,6 +106,7 @@ public class EventQueryDAO implements IEventQueryDAO {
         event.setParameters((String) data.get(Event.PARAMETERS));
         event.setStartTime(((Number) data.get(Event.START_TIME)).longValue());
         event.setEndTime(((Number) data.get(Event.END_TIME)).longValue());
+        event.setLayer(Layer.valueOf(((Number) data.get(Event.LAYER)).intValue()).name());
 
         return event;
     }
@@ -171,6 +173,11 @@ public class EventQueryDAO implements IEventQueryDAO {
                 countWhereQuery.and(lt(Event.END_TIME, startTime.getEndTimestamp()));
             }
         }
+
+        if (!isNullOrEmpty(condition.getLayer())) {
+            recallWhereQuery.and(eq(InfluxConstants.TagName.LAYER, condition.getLayer()));
+            countWhereQuery.and(eq(InfluxConstants.TagName.LAYER, condition.getLayer()));
+        }
     }
 
     protected void buildQueryByCondition(List<WhereQueryImpl<SelectQueryImpl>> queries, List<EventQueryCondition> conditions) {
@@ -222,6 +229,12 @@ public class EventQueryDAO implements IEventQueryDAO {
                     countOrNested.and(lt(Event.END_TIME, startTime.getEndTimestamp()));
                 }
             }
+
+            if (!isNullOrEmpty(c.getLayer())) {
+                recallOrNested.and(eq(InfluxConstants.TagName.LAYER, c.getLayer()));
+                countOrNested.and(eq(InfluxConstants.TagName.LAYER, c.getLayer()));
+            }
+
             recallOrNested.close();
             countOrNested.close();
         });
diff --git a/oap-server/server-storage-plugin/storage-iotdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/iotdb/query/IoTDBEventQueryDAO.java b/oap-server/server-storage-plugin/storage-iotdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/iotdb/query/IoTDBEventQueryDAO.java
index 37119fdff5..681730b56e 100644
--- a/oap-server/server-storage-plugin/storage-iotdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/iotdb/query/IoTDBEventQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-iotdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/iotdb/query/IoTDBEventQueryDAO.java
@@ -172,6 +172,9 @@ public class IoTDBEventQueryDAO implements IEventQueryDAO {
                      .append(" and ");
             }
         }
+        if (!Strings.isNullOrEmpty(condition.getLayer())) {
+            where.append(Event.LAYER).append(" = \"").append(condition.getLayer()).append("\"").append(" and ");
+        }
         if (where.length() > 0) {
             int length = where.length();
             where.delete(length - 5, length);
@@ -209,6 +212,7 @@ public class IoTDBEventQueryDAO implements IEventQueryDAO {
         resultEvent.setParameters(event.getParameters());
         resultEvent.setStartTime(event.getStartTime());
         resultEvent.setEndTime(event.getEndTime());
+        resultEvent.setLayer(event.getLayer().name());
         return resultEvent;
     }
 }
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EventQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EventQueryDAO.java
index e6b5c108f5..0659495340 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EventQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EventQueryDAO.java
@@ -28,6 +28,7 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.query.PaginationUtils;
 import org.apache.skywalking.oap.server.core.query.enumeration.Order;
 import org.apache.skywalking.oap.server.core.query.input.Duration;
@@ -156,7 +157,7 @@ public class H2EventQueryDAO implements IEventQueryDAO {
         event.setParameters(resultSet.getString(Event.PARAMETERS));
         event.setStartTime(resultSet.getLong(Event.START_TIME));
         event.setEndTime(resultSet.getLong(Event.END_TIME));
-
+        event.setLayer(Layer.valueOf(resultSet.getInt(Event.LAYER)).name());
         return event;
     }
 
@@ -207,6 +208,11 @@ public class H2EventQueryDAO implements IEventQueryDAO {
             }
         }
 
+        if (!isNullOrEmpty(condition.getLayer())) {
+            conditions.add(Event.LAYER + "=?");
+            parameters.add(String.valueOf(Layer.nameOf(condition.getLayer()).value()));
+        }
+
         return Tuple.of(conditions.build(), parameters.build());
     }
 }
diff --git a/test/e2e-v2/cases/alarm/expected/silence-after-graphql-critical.yml b/test/e2e-v2/cases/alarm/expected/silence-after-graphql-critical.yml
index 691546f7eb..6bd9632dca 100644
--- a/test/e2e-v2/cases/alarm/expected/silence-after-graphql-critical.yml
+++ b/test/e2e-v2/cases/alarm/expected/silence-after-graphql-critical.yml
@@ -37,6 +37,7 @@ msgs:
         parameters: []
         starttime: {{ gt .starttime 0 }}
         endtime: {{ gt .endtime 0 }}
+        layer: GENERAL
       {{- end }}
   - starttime: {{ gt .starttime 0 }}
     scope: Service
@@ -60,6 +61,7 @@ msgs:
         parameters: []
         starttime: {{ gt .starttime 0 }}
         endtime: {{ gt .endtime 0 }}
+        layer: GENERAL
       {{- end }}
   {{- end }}
 total: {{ gt .total 1 }}
diff --git a/test/e2e-v2/cases/alarm/expected/silence-after-graphql-warn.yml b/test/e2e-v2/cases/alarm/expected/silence-after-graphql-warn.yml
index 2ee4d5b9cf..da9ea79532 100644
--- a/test/e2e-v2/cases/alarm/expected/silence-after-graphql-warn.yml
+++ b/test/e2e-v2/cases/alarm/expected/silence-after-graphql-warn.yml
@@ -37,6 +37,7 @@ msgs:
         parameters: []
         starttime: {{ gt .starttime 0 }}
         endtime: {{ gt .endtime 0 }}
+        layer: GENERAL
       {{- end }}
   - starttime: {{ gt .starttime 0 }}
     scope: Service
@@ -60,6 +61,7 @@ msgs:
         parameters: []
         starttime: {{ gt .starttime 0 }}
         endtime: {{ gt .endtime 0 }}
+        layer: GENERAL
       {{- end }}
   {{- end }}
 total: {{ gt .total 1 }}
diff --git a/test/e2e-v2/cases/alarm/expected/silence-before-graphql-critical.yml b/test/e2e-v2/cases/alarm/expected/silence-before-graphql-critical.yml
index 59d75c92c2..83c5920c84 100644
--- a/test/e2e-v2/cases/alarm/expected/silence-before-graphql-critical.yml
+++ b/test/e2e-v2/cases/alarm/expected/silence-before-graphql-critical.yml
@@ -37,6 +37,7 @@ msgs:
         parameters: []
         starttime: {{ gt .starttime 0 }}
         endtime: {{ gt .endtime 0 }}
+        layer: GENERAL
       {{- end }}
   {{- end }}
 total: 1
diff --git a/test/e2e-v2/cases/alarm/expected/silence-before-graphql-warn.yml b/test/e2e-v2/cases/alarm/expected/silence-before-graphql-warn.yml
index 080228ede5..bb2d3f0e0a 100644
--- a/test/e2e-v2/cases/alarm/expected/silence-before-graphql-warn.yml
+++ b/test/e2e-v2/cases/alarm/expected/silence-before-graphql-warn.yml
@@ -37,6 +37,7 @@ msgs:
         parameters: []
         starttime: {{ gt .starttime 0 }}
         endtime: {{ gt .endtime 0 }}
+        layer: GENERAL
       {{- end }}
   {{- end }}
 total: 1
diff --git a/test/e2e-v2/cases/event/event-cases.yaml b/test/e2e-v2/cases/event/event-cases.yaml
index 7304929a4e..69e4673a93 100644
--- a/test/e2e-v2/cases/event/event-cases.yaml
+++ b/test/e2e-v2/cases/event/event-cases.yaml
@@ -16,7 +16,8 @@
 # This file is used to show how to write configuration files and can be used to test.
 
   cases:
-    - query: swctl --grpc-addr=${oap_host}:${oap_11800} event report --uuid=abcde --name=Upgrade --service-name=e2e-service --instance-name=e2e-service-instance --endpoint-name='/e2e-endpoint' --message='Upgrade from {fromVersion} to {toVersion}' --start-time=`date +%s`000 --end-time=`date +%s`999 fromVersion=v1 toVersion=v2
+    - query: swctl --grpc-addr=${oap_host}:${oap_11800} event report --uuid=abcde --name=Upgrade --service-name=e2e-service --instance-name=e2e-service-instance --endpoint-name='/e2e-endpoint' --message='Upgrade from {fromVersion} to {toVersion}' --layer=GENERAL --start-time=`date +%s`000 --end-time=`date +%s`999 fromVersion=v1 toVersion=v2
       expected: expected/report-event.yml
     - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql event ls
       expected: expected/events.yml
+
diff --git a/test/e2e-v2/cases/event/expected/events.yml b/test/e2e-v2/cases/event/expected/events.yml
index 8548b5b281..323781414a 100644
--- a/test/e2e-v2/cases/event/expected/events.yml
+++ b/test/e2e-v2/cases/event/expected/events.yml
@@ -32,6 +32,7 @@ events:
       {{- end }}
     starttime: {{ gt .starttime 0 }}
     endtime: {{ gt .endtime 0 }}
+    layer: GENERAL
   {{- end }}
 total: 1
 
diff --git a/test/e2e-v2/cases/event/expected/report-event.yml b/test/e2e-v2/cases/event/expected/report-event.yml
index ba37c93818..2d38582020 100644
--- a/test/e2e-v2/cases/event/expected/report-event.yml
+++ b/test/e2e-v2/cases/event/expected/report-event.yml
@@ -13,4 +13,5 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-level=info msg="Report the event successfully, whose uuid is  abcde" {}
+level=info msg="Report the event successfully, whose uuid is abcde\n"
+{}
\ No newline at end of file
diff --git a/test/e2e-v2/cases/satellite/native-protocols/expected/event-list.yml b/test/e2e-v2/cases/satellite/native-protocols/expected/event-list.yml
index 0d559eabff..6abac4c550 100644
--- a/test/e2e-v2/cases/satellite/native-protocols/expected/event-list.yml
+++ b/test/e2e-v2/cases/satellite/native-protocols/expected/event-list.yml
@@ -30,6 +30,7 @@ events:
   {{- end }}
   starttime: {{ gt .starttime 0 }}
   endtime: {{ gt .endtime 0 }}
+  layer: GENERAL
 - uuid: {{ notEmpty .uuid }}
   source:
     service: e2e-service-consumer
@@ -45,5 +46,6 @@ events:
   {{- end }}
   starttime: {{ gt .starttime 0 }}
   endtime: {{ gt .endtime 0 }}
+  layer: GENERAL
 {{- end }}
 total: {{ gt .total 0 }}
diff --git a/test/e2e-v2/cases/storage/expected/event-list.yml b/test/e2e-v2/cases/storage/expected/event-list.yml
index 0d559eabff..6abac4c550 100644
--- a/test/e2e-v2/cases/storage/expected/event-list.yml
+++ b/test/e2e-v2/cases/storage/expected/event-list.yml
@@ -30,6 +30,7 @@ events:
   {{- end }}
   starttime: {{ gt .starttime 0 }}
   endtime: {{ gt .endtime 0 }}
+  layer: GENERAL
 - uuid: {{ notEmpty .uuid }}
   source:
     service: e2e-service-consumer
@@ -45,5 +46,6 @@ events:
   {{- end }}
   starttime: {{ gt .starttime 0 }}
   endtime: {{ gt .endtime 0 }}
+  layer: GENERAL
 {{- end }}
 total: {{ gt .total 0 }}
diff --git a/test/e2e-v2/script/env b/test/e2e-v2/script/env
index d5fe55a472..6d282bce78 100644
--- a/test/e2e-v2/script/env
+++ b/test/e2e-v2/script/env
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-SW_AGENT_JAVA_COMMIT=233cce5bb6341a62811807696bc172b2d340d566
+SW_AGENT_JAVA_COMMIT=65032a9b485411363b5297fadc970115d22b13b8
 SW_AGENT_SATELLITE_COMMIT=1987e1d566ac90f6b58a45fd9bfa27bf8faad635
 SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa
 SW_AGENT_NODEJS_COMMIT=2e7560518aff846befd4d6bc815fe5e38c704a11
@@ -24,4 +24,4 @@ SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
 SW_KUBERNETES_COMMIT_SHA=0f3ec68e5a7e1608cec8688716b848ed15e971e5
 SW_ROVER_COMMIT=f7f5ac31aa2288861ca729ed349f0da9e66d4558
 
-SW_CTL_COMMIT=5a62c2e029e17234e6bbad18ced0ce31d0f67ce9
+SW_CTL_COMMIT=9ad35d097e8966ac9324f1d570b1a2d264b38ca1
diff --git a/test/e2e-v2/script/prepare/setup-e2e-shell/install-swctl.sh b/test/e2e-v2/script/prepare/setup-e2e-shell/install-swctl.sh
index 9dca2d55dd..f9bcf34807 100644
--- a/test/e2e-v2/script/prepare/setup-e2e-shell/install-swctl.sh
+++ b/test/e2e-v2/script/prepare/setup-e2e-shell/install-swctl.sh
@@ -22,9 +22,18 @@
 BASE_DIR=$1
 BIN_DIR=$2
 
-if ! command -v swctl &> /dev/null; then
+install_swctl() {
   mkdir -p $BASE_DIR/swctl && cd $BASE_DIR/swctl
   curl -kLo skywalking-cli.tar.gz https://github.com/apache/skywalking-cli/archive/${SW_CTL_COMMIT}.tar.gz
   tar -zxf skywalking-cli.tar.gz --strip=1
-  make install DESTDIR=$BIN_DIR
+  VERSION=${SW_CTL_COMMIT} make install DESTDIR=$BIN_DIR
+}
+
+if ! command -v swctl &> /dev/null; then
+  echo "swctl is not installed"
+  install_swctl
+elif ! swctl --version | grep -q "${SW_CTL_COMMIT}"; then
+  # Check if the installed version is correct
+  echo "swctl is already installed, but version is not ${SW_CTL_COMMIT}, will re-install it"
+  install_swctl
 fi