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

wusheng 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 ed5e729026 Init `log-mal-rules` at module provider start stage to 
avoid re-init for every LAL (#13610)
ed5e729026 is described below

commit ed5e729026da621557b83b5dfa78e57ee0bc524a
Author: weixiang1862 <[email protected]>
AuthorDate: Sat Dec 13 14:21:59 2025 +0800

    Init `log-mal-rules` at module provider start stage to avoid re-init for 
every LAL (#13610)
---
 docs/en/changes/changes.md                                   |  1 +
 .../oap/log/analyzer/dsl/spec/extractor/ExtractorSpec.java   | 12 +++++-------
 .../oap/log/analyzer/provider/LogAnalyzerModuleProvider.java | 12 ++++++++++++
 .../org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java  |  7 +++++++
 4 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index a209491394..edcc5fa985 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -8,6 +8,7 @@
 * KubernetesCoordinator: make self instance return real pod IP address instead 
of `127.0.0.1`.
 * Enhance the alarm kernel with recovered status notification capability
 * Fix BrowserWebVitalsPerfData `clsTime` to `cls` and make it double type.
+* Init `log-mal-rules` at module provider start stage to avoid re-init for 
every LAL.
 
 #### UI
 * Fix the missing icon in new native trace view.
diff --git 
a/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/dsl/spec/extractor/ExtractorSpec.java
 
b/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/dsl/spec/extractor/ExtractorSpec.java
index 6c229f6f69..ee9e58e72e 100644
--- 
a/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/dsl/spec/extractor/ExtractorSpec.java
+++ 
b/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/dsl/spec/extractor/ExtractorSpec.java
@@ -38,7 +38,9 @@ import 
org.apache.skywalking.apm.network.logging.v3.TraceContext;
 import org.apache.skywalking.oap.log.analyzer.dsl.spec.AbstractSpec;
 import 
org.apache.skywalking.oap.log.analyzer.dsl.spec.extractor.sampledtrace.SampledTraceSpec;
 import 
org.apache.skywalking.oap.log.analyzer.dsl.spec.extractor.slowsql.SlowSqlSpec;
+import org.apache.skywalking.oap.log.analyzer.module.LogAnalyzerModule;
 import org.apache.skywalking.oap.log.analyzer.provider.LogAnalyzerModuleConfig;
+import 
org.apache.skywalking.oap.log.analyzer.provider.LogAnalyzerModuleProvider;
 import org.apache.skywalking.oap.meter.analyzer.MetricConvert;
 import org.apache.skywalking.oap.meter.analyzer.dsl.Sample;
 import org.apache.skywalking.oap.meter.analyzer.dsl.SampleFamily;
@@ -49,7 +51,6 @@ import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.analysis.DownSampling;
 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.meter.MeterSystem;
 import org.apache.skywalking.oap.server.core.analysis.record.Record;
 import 
org.apache.skywalking.oap.server.core.analysis.worker.RecordStreamProcessor;
 import org.apache.skywalking.oap.server.core.config.NamingControl;
@@ -82,13 +83,10 @@ public class ExtractorSpec extends AbstractSpec {
                          final LogAnalyzerModuleConfig moduleConfig) throws 
ModuleStartException {
         super(moduleManager, moduleConfig);
 
-        final MeterSystem meterSystem =
-            
moduleManager.find(CoreModule.NAME).provider().getService(MeterSystem.class);
+        LogAnalyzerModuleProvider provider = (LogAnalyzerModuleProvider) 
moduleManager
+            .find(LogAnalyzerModule.NAME).provider();
 
-        metricConverts = moduleConfig.malConfigs()
-                                     .stream()
-                                     .map(it -> new MetricConvert(it, 
meterSystem))
-                                     .collect(Collectors.toList());
+        metricConverts = provider.getMetricConverts();
 
         slowSql = new SlowSqlSpec(moduleManager(), moduleConfig());
         sampledTrace = new SampledTraceSpec(moduleManager(), moduleConfig());
diff --git 
a/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/provider/LogAnalyzerModuleProvider.java
 
b/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/provider/LogAnalyzerModuleProvider.java
index e99391bcce..39a0021682 100644
--- 
a/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/provider/LogAnalyzerModuleProvider.java
+++ 
b/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/provider/LogAnalyzerModuleProvider.java
@@ -17,13 +17,17 @@
 
 package org.apache.skywalking.oap.log.analyzer.provider;
 
+import java.util.List;
+import java.util.stream.Collectors;
 import lombok.Getter;
 import org.apache.skywalking.oap.log.analyzer.module.LogAnalyzerModule;
 import org.apache.skywalking.oap.log.analyzer.provider.log.ILogAnalyzerService;
 import 
org.apache.skywalking.oap.log.analyzer.provider.log.LogAnalyzerServiceImpl;
 import 
org.apache.skywalking.oap.log.analyzer.provider.log.listener.LogFilterListener;
+import org.apache.skywalking.oap.meter.analyzer.MetricConvert;
 import org.apache.skywalking.oap.server.configuration.api.ConfigurationModule;
 import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.analysis.meter.MeterSystem;
 import org.apache.skywalking.oap.server.library.module.ModuleDefine;
 import org.apache.skywalking.oap.server.library.module.ModuleProvider;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
@@ -33,6 +37,9 @@ public class LogAnalyzerModuleProvider extends ModuleProvider 
{
     @Getter
     private LogAnalyzerModuleConfig moduleConfig;
 
+    @Getter
+    private List<MetricConvert> metricConverts;
+
     private LogAnalyzerServiceImpl logAnalyzerService;
 
     @Override
@@ -68,6 +75,11 @@ public class LogAnalyzerModuleProvider extends 
ModuleProvider {
 
     @Override
     public void start() throws ServiceNotProvidedException, 
ModuleStartException {
+        MeterSystem meterSystem = 
getManager().find(CoreModule.NAME).provider().getService(MeterSystem.class);
+        metricConverts = moduleConfig.malConfigs()
+                                     .stream()
+                                     .map(it -> new MetricConvert(it, 
meterSystem))
+                                     .collect(Collectors.toList());
         try {
             logAnalyzerService.addListenerFactory(new 
LogFilterListener.Factory(getManager(), moduleConfig));
         } catch (final Exception e) {
diff --git 
a/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java
 
b/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java
index 163595a3ff..66c996697e 100644
--- 
a/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java
+++ 
b/oap-server/analyzer/log-analyzer/src/test/java/org/apache/skywalking/oap/log/analyzer/dsl/DSLTest.java
@@ -19,7 +19,9 @@
 package org.apache.skywalking.oap.log.analyzer.dsl;
 
 import org.apache.skywalking.apm.network.logging.v3.LogData;
+import org.apache.skywalking.oap.log.analyzer.module.LogAnalyzerModule;
 import org.apache.skywalking.oap.log.analyzer.provider.LogAnalyzerModuleConfig;
+import 
org.apache.skywalking.oap.log.analyzer.provider.LogAnalyzerModuleProvider;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.config.ConfigService;
 import org.apache.skywalking.oap.server.core.source.SourceReceiver;
@@ -197,6 +199,11 @@ public class DSLTest {
     public void setup() {
         Whitebox.setInternalState(manager, "isInPrepareStage", false);
         
when(manager.find(anyString())).thenReturn(mock(ModuleProviderHolder.class));
+        ModuleProviderHolder logAnalyzerHolder = 
mock(ModuleProviderHolder.class);
+        LogAnalyzerModuleProvider logAnalyzerProvider = 
mock(LogAnalyzerModuleProvider.class);
+        
when(logAnalyzerProvider.getMetricConverts()).thenReturn(Collections.emptyList());
+        when(logAnalyzerHolder.provider()).thenReturn(logAnalyzerProvider);
+        
when(manager.find(LogAnalyzerModule.NAME)).thenReturn(logAnalyzerHolder);
         
when(manager.find(CoreModule.NAME).provider()).thenReturn(mock(ModuleServiceHolder.class));
         
when(manager.find(CoreModule.NAME).provider().getService(SourceReceiver.class))
                 .thenReturn(mock(SourceReceiver.class));

Reply via email to