You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@hertzbeat.apache.org by zh...@apache.org on 2025/05/07 09:27:29 UTC

(hertzbeat) 03/03: feat(otel): integrate OpenTelemetry for GreptimeDB logs and traces- Rename hertzbeat-log to hertzbeat-otel - Update dependencies to use OpenTelemetry instrumentation - Refactor OpenTelemetry configuration for GreptimeDB integration - Add OpenTelemetryLogbackAppenderInstaller for Logback integration - Update Maven pom files to reflect new dependencies and structure

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

zhaoqingran pushed a commit to branch traces
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git

commit 59781ad673316f89637d2484b70ea2bb29843763
Author: Logic <zq...@dromara.org>
AuthorDate: Wed May 7 17:26:19 2025 +0800

    feat(otel): integrate OpenTelemetry for GreptimeDB logs and traces- Rename hertzbeat-log to hertzbeat-otel
    - Update dependencies to use OpenTelemetry instrumentation
    - Refactor OpenTelemetry configuration for GreptimeDB integration
    - Add OpenTelemetryLogbackAppenderInstaller for Logback integration
    - Update Maven pom files to reflect new dependencies and structure
---
 .../hertzbeat/log/config/OpenTelemetryConfig.java  | 117 ----------------
 hertzbeat-manager/pom.xml                          |   2 +-
 .../hertzbeat/manager/config/JacksonConfig.java    |   2 +-
 {hertzbeat-log => hertzbeat-otel}/pom.xml          |  21 +--
 .../otel}/config/LogAutoConfiguration.java         |   2 +-
 .../hertzbeat/otel/config/OpenTelemetryConfig.java | 154 +++++++++++++++++++++
 .../OpenTelemetryLogbackAppenderInstaller.java     |  58 ++++++++
 .../src/main/resources/META-INF/spring.factories   |   2 +-
 material/licenses/LICENSE                          |   5 +-
 pom.xml                                            |  35 ++---
 10 files changed, 232 insertions(+), 166 deletions(-)

diff --git a/hertzbeat-log/src/main/java/org/apache/hertzbeat/log/config/OpenTelemetryConfig.java b/hertzbeat-log/src/main/java/org/apache/hertzbeat/log/config/OpenTelemetryConfig.java
deleted file mode 100644
index adb71b7fd0..0000000000
--- a/hertzbeat-log/src/main/java/org/apache/hertzbeat/log/config/OpenTelemetryConfig.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements.  See the NOTICE file distributed with
- *   this work for additional information regarding copyright ownership.
- *   The ASF licenses this file to You under the Apache License, Version 2.0
- *   (the "License"); you may not use this file except in compliance with
- *   the License.  You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.hertzbeat.log.config;
-
-import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
-import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
-import io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender;
-import io.opentelemetry.sdk.OpenTelemetrySdk;
-import io.opentelemetry.sdk.logs.SdkLoggerProvider;
-import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
-import io.opentelemetry.sdk.resources.Resource;
-
-import jakarta.annotation.PostConstruct;
-import java.util.Base64;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.hertzbeat.warehouse.store.history.greptime.GreptimeProperties;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * OpenTelemetryConfig is responsible for initializing OpenTelemetry with the specified service name and GrepTimeDB endpoint.
- * It ensures that the initialization is done in a thread-safe manner and includes authentication for GrepTimeDB.
- */
-@Configuration
-@Slf4j
-public class OpenTelemetryConfig {
-
-    @Autowired
-    private GreptimeProperties greptimeProperties;
-
-    /**
-     * Initializes OpenTelemetry with the given service name and GrepTimeDB endpoint.
-     * Includes authentication if configured in GreptimeProperties.
-     */
-    @PostConstruct
-    public void initializeOpenTelemetry() {
-        if (greptimeProperties == null || !greptimeProperties.enabled()) {
-            log.info("GrepTimeDB logging is disabled, skipping OpenTelemetry configuration.");
-            return;
-        }
-
-        try {
-            Resource resource = Resource.getDefault()
-                    .merge(Resource.builder()
-                            .put(SERVICE_NAME, "HertzBeat")
-                            .build());
-
-            Map<String, String> headers = new HashMap<>();
-
-            headers.put("X-Greptime-DB-Name", "public");
-            headers.put("X-Greptime-Log-Table-Name", "hzb_log");
-
-            addAuthenticationHeaders(headers);
-
-            OtlpHttpLogRecordExporter logExporter = OtlpHttpLogRecordExporter.builder()
-                    .setEndpoint(greptimeProperties.httpEndpoint() + "/v1/otlp/v1/logs")
-                    .setHeaders(()-> headers)
-                    .setTimeout(10, TimeUnit.SECONDS)
-                    .build();
-
-            SdkLoggerProvider loggerProvider = SdkLoggerProvider.builder()
-                    .setResource(resource)
-                    .addLogRecordProcessor(
-                            BatchLogRecordProcessor.builder(logExporter)
-                                    .setScheduleDelay(1000, TimeUnit.MILLISECONDS)
-                                    .setMaxExportBatchSize(512)
-                                    .build())
-                    .build();
-
-            OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
-                    .setLoggerProvider(loggerProvider)
-                    .build();
-
-            OpenTelemetryAppender.install(openTelemetry);
-            log.info("OpenTelemetry successfully configured with GrepTimeDB exporter.");
-        } catch (Exception e) {
-            log.error("Failed to initialize OpenTelemetry with GrepTimeDB", e);
-        }
-    }
-
-    /**
-     * Adds authentication headers to the provided map if username and password are configured.
-     *
-     * @param headers the map to which authentication headers will be added
-     */
-    private void addAuthenticationHeaders(Map<String, String> headers) {
-        if (StringUtils.isNotBlank(greptimeProperties.username())
-                && StringUtils.isNotBlank(greptimeProperties.password())) {
-            String credentials = greptimeProperties.username() + ":" + greptimeProperties.password();
-            String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes());
-            headers.put("Authorization", "Basic " + encodedCredentials);
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/hertzbeat-manager/pom.xml b/hertzbeat-manager/pom.xml
index d5351ad9cf..022fbeb610 100644
--- a/hertzbeat-manager/pom.xml
+++ b/hertzbeat-manager/pom.xml
@@ -92,7 +92,7 @@
         <!-- log -->
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-log</artifactId>
+            <artifactId>hertzbeat-otel</artifactId>
         </dependency>
         <!-- spring -->
         <dependency>
diff --git a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java
index cf437b0978..3c22dcf536 100644
--- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java
+++ b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/config/JacksonConfig.java
@@ -35,7 +35,7 @@ import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
 public class JacksonConfig {
 
     @Bean
-    public Jackson2ObjectMapperBuilderCustomizer customizer() {
+    public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
         return builder -> {
             JavaTimeModule javaTimeModule = new JavaTimeModule();
             final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
diff --git a/hertzbeat-log/pom.xml b/hertzbeat-otel/pom.xml
similarity index 78%
rename from hertzbeat-log/pom.xml
rename to hertzbeat-otel/pom.xml
index b76d5311b2..43d1004bf2 100644
--- a/hertzbeat-log/pom.xml
+++ b/hertzbeat-otel/pom.xml
@@ -24,7 +24,7 @@
         <version>2.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>hertzbeat-log</artifactId>
+    <artifactId>hertzbeat-otel</artifactId>
     <name>${project.artifactId}</name>
     <properties>
         <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
@@ -44,24 +44,13 @@
         </dependency>
         <!-- OpenTelemetry -->
         <dependency>
-            <groupId>io.opentelemetry</groupId>
-            <artifactId>opentelemetry-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.opentelemetry</groupId>
-            <artifactId>opentelemetry-sdk</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.opentelemetry</groupId>
-            <artifactId>opentelemetry-sdk-logs</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.opentelemetry</groupId>
-            <artifactId>opentelemetry-exporter-otlp</artifactId>
+            <groupId>io.opentelemetry.instrumentation</groupId>
+            <artifactId>opentelemetry-logback-appender-1.0</artifactId>
         </dependency>
         <dependency>
             <groupId>io.opentelemetry.instrumentation</groupId>
-            <artifactId>opentelemetry-logback-appender-1.0</artifactId>
+            <artifactId>opentelemetry-spring-boot-starter</artifactId>
         </dependency>
+
     </dependencies>
 </project>
diff --git a/hertzbeat-log/src/main/java/org/apache/hertzbeat/log/config/LogAutoConfiguration.java b/hertzbeat-otel/src/main/java/org/apache/hertzbeat/otel/config/LogAutoConfiguration.java
similarity index 97%
rename from hertzbeat-log/src/main/java/org/apache/hertzbeat/log/config/LogAutoConfiguration.java
rename to hertzbeat-otel/src/main/java/org/apache/hertzbeat/otel/config/LogAutoConfiguration.java
index 0d2daa7909..fbf517d427 100644
--- a/hertzbeat-log/src/main/java/org/apache/hertzbeat/log/config/LogAutoConfiguration.java
+++ b/hertzbeat-otel/src/main/java/org/apache/hertzbeat/otel/config/LogAutoConfiguration.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.log.config;
+package org.apache.hertzbeat.otel.config;
 
 import org.apache.hertzbeat.common.constants.ConfigConstants;
 import org.apache.hertzbeat.common.constants.SignConstants;
diff --git a/hertzbeat-otel/src/main/java/org/apache/hertzbeat/otel/config/OpenTelemetryConfig.java b/hertzbeat-otel/src/main/java/org/apache/hertzbeat/otel/config/OpenTelemetryConfig.java
new file mode 100644
index 0000000000..44110c6d18
--- /dev/null
+++ b/hertzbeat-otel/src/main/java/org/apache/hertzbeat/otel/config/OpenTelemetryConfig.java
@@ -0,0 +1,154 @@
+/*
+ * 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.hertzbeat.otel.config;
+
+import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
+import static org.apache.http.HttpHeaders.CONTENT_TYPE;
+
+import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
+import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
+import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder;
+import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
+import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
+import io.opentelemetry.sdk.resources.Resource;
+
+import java.util.Base64;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hertzbeat.warehouse.store.history.greptime.GreptimeProperties;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * OpenTelemetryConfig provides customizations for the auto-configured OpenTelemetry SDK,
+ * specifically for integrating with GrepTimeDB for logs and traces.
+ */
+@Configuration
+@Slf4j
+public class OpenTelemetryConfig {
+
+    private static final String HERTZBEAT_SERVICE_NAME = "HertzBeat";
+    private static final String DEFAULT_GREPTIME_DB_NAME = "public";
+    private static final String DEFAULT_LOGS_TABLE_NAME = "hzb_logs";
+    private static final String DEFAULT_TRACES_TABLE_NAME = "hzb_traces";
+    private static final String GREPTIME_DB_NAME_HEADER = "X-Greptime-DB-Name";
+    private static final String GREPTIME_LOG_TABLE_NAME_HEADER = "X-Greptime-Log-Table-Name";
+    private static final String GREPTIME_TRACE_TABLE_NAME_HEADER = "X-Greptime-Trace-Table-Name";
+    private static final String GREPTIME_PIPELINE_NAME_HEADER = "X-Greptime-Pipeline-Name";
+
+    /**
+     * Adds authentication headers if credentials are provided.
+     */
+    private void addAuthenticationHeaders(Map<String, String> headers, GreptimeProperties greptimeProps) {
+        if (greptimeProps != null && StringUtils.isNotBlank(greptimeProps.username())
+                && StringUtils.isNotBlank(greptimeProps.password())) {
+            String credentials = greptimeProps.username() + ":" + greptimeProps.password();
+            String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes());
+            headers.put("Authorization", "Basic " + encodedCredentials);
+            log.debug("Added Basic Authentication header for GreptimeDB.");
+        } else {
+            log.debug("GreptimeDB username/password not configured, skipping Authentication header.");
+        }
+    }
+
+    /**
+     * Builds HTTP Log headers for OTLP communication with GreptimeDB.
+     */
+    private Map<String, String> buildGreptimeOtlpLogHeaders(GreptimeProperties greptimeProps) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put(GREPTIME_DB_NAME_HEADER, DEFAULT_GREPTIME_DB_NAME);
+        headers.put(GREPTIME_LOG_TABLE_NAME_HEADER, DEFAULT_LOGS_TABLE_NAME );
+        addAuthenticationHeaders(headers, greptimeProps);
+        return Collections.unmodifiableMap(headers);
+    }
+
+    /**
+     * Builds HTTP Trace headers for OTLP communication with GreptimeDB.
+     */
+    private Map<String, String> buildGreptimeOtlpTraceHeaders(GreptimeProperties greptimeProps) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put(GREPTIME_DB_NAME_HEADER, DEFAULT_GREPTIME_DB_NAME);
+        headers.put(GREPTIME_TRACE_TABLE_NAME_HEADER, DEFAULT_TRACES_TABLE_NAME);
+        headers.put(CONTENT_TYPE, "application/x-protobuf");
+        headers.put(GREPTIME_PIPELINE_NAME_HEADER, "greptime_trace_v1");
+        addAuthenticationHeaders(headers, greptimeProps);
+        return Collections.unmodifiableMap(headers);
+    }
+
+    /**
+     * Provides an AutoConfigurationCustomizerProvider to tailor the auto-configured OpenTelemetry SDK.
+     * This includes setting up GrepTimeDB exporters for logs and traces, and customizing the resource.
+     * Active only if 'greptime.enabled' is true.
+     *
+     * @param greptimeProperties Configuration for GrepTimeDB.
+     * @return AutoConfigurationCustomizerProvider instance.
+     */
+    @Bean
+    @ConditionalOnProperty(name = "warehouse.store.greptime.enabled", havingValue = "true")
+    public AutoConfigurationCustomizerProvider greptimeOtelCustomizer(GreptimeProperties greptimeProperties) {
+        log.info("GreptimeDB is enabled. Applying OpenTelemetry SDK customizations.");
+
+        return providerCustomizer -> providerCustomizer
+                .addPropertiesCustomizer(sdkConfigProperties -> {
+                    Map<String, String> newProperties = new HashMap<>();
+                    newProperties.put("otel.metrics.exporter", "none");
+                    newProperties.put("otel.traces.exporter", "otlp");
+                    newProperties.put("otel.logs.exporter", "none");
+                    return newProperties;
+                })
+                .addResourceCustomizer((resource, configProperties) -> {
+                    log.info("Customizing auto-configured OpenTelemetry Resource with service name: {}.", HERTZBEAT_SERVICE_NAME);
+                    return resource.merge(Resource.builder().put(SERVICE_NAME, HERTZBEAT_SERVICE_NAME).build());
+                })
+                .addSpanExporterCustomizer((originalSpanExporter, configProperties) -> {
+                    String traceEndpoint = greptimeProperties.httpEndpoint() + "/v1/otlp/v1/traces";
+                    log.info("Programmatically configuring OtlpHttpSpanExporter for GreptimeDB traces. Endpoint: {}", traceEndpoint);
+                    Map<String, String> traceHeaders = buildGreptimeOtlpTraceHeaders(greptimeProperties);
+                    log.info("Trace Headers for GreptimeDB (programmatic HTTP config): {}", traceHeaders);
+
+                    OtlpHttpSpanExporterBuilder httpExporterBuilder = OtlpHttpSpanExporter.builder()
+                            .setEndpoint(traceEndpoint)
+                            .setHeaders(() -> traceHeaders)
+                            .setTimeout(10000, TimeUnit.MILLISECONDS);
+                    return httpExporterBuilder.build();
+                })
+                .addLoggerProviderCustomizer((sdkLoggerProviderBuilder, configProperties) -> {
+                    log.info("Customizing auto-configured SdkLoggerProviderBuilder for GrepTimeDB logs.");
+
+                    OtlpHttpLogRecordExporter logExporter = OtlpHttpLogRecordExporter.builder()
+                            .setEndpoint(greptimeProperties.httpEndpoint() + "/v1/otlp/v1/logs")
+                            .setHeaders(() -> buildGreptimeOtlpLogHeaders(greptimeProperties))
+                            .setTimeout(10000, TimeUnit.MILLISECONDS)
+                            .build();
+
+                    BatchLogRecordProcessor batchLogProcessor = BatchLogRecordProcessor.builder(logExporter)
+                            .setScheduleDelay(1000, TimeUnit.MILLISECONDS)
+                            .setMaxExportBatchSize(512)
+                            .build();
+
+                    return sdkLoggerProviderBuilder.addLogRecordProcessor(batchLogProcessor);
+                });
+    }
+}
\ No newline at end of file
diff --git a/hertzbeat-otel/src/main/java/org/apache/hertzbeat/otel/config/OpenTelemetryLogbackAppenderInstaller.java b/hertzbeat-otel/src/main/java/org/apache/hertzbeat/otel/config/OpenTelemetryLogbackAppenderInstaller.java
new file mode 100644
index 0000000000..12320b9a9d
--- /dev/null
+++ b/hertzbeat-otel/src/main/java/org/apache/hertzbeat/otel/config/OpenTelemetryLogbackAppenderInstaller.java
@@ -0,0 +1,58 @@
+/*
+ *   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.hertzbeat.otel.config;
+
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+
+/**
+ * Installs the OpenTelemetryAppender for Logback once the auto-configured
+ * OpenTelemetry SDK is available and GrepTimeDB integration is enabled.
+ */
+@Component
+@ConditionalOnProperty(name = "warehouse.store.greptime.enabled", havingValue = "true")
+@Slf4j
+public class OpenTelemetryLogbackAppenderInstaller implements InitializingBean {
+
+    private final OpenTelemetry openTelemetry;
+
+    @Autowired
+    public OpenTelemetryLogbackAppenderInstaller(OpenTelemetry openTelemetry) {
+        this.openTelemetry = openTelemetry;
+    }
+
+    @Override
+    public void afterPropertiesSet() {
+        if (this.openTelemetry instanceof OpenTelemetrySdk) {
+            log.info("Auto-configured OpenTelemetry SDK detected. Installing OpenTelemetryAppender for Logback.");
+            OpenTelemetryAppender.install(this.openTelemetry);
+        } else {
+            log.warn("OpenTelemetry SDK is not an instance of OpenTelemetrySdk (type: {}). " +
+                            "OpenTelemetryAppender for Logback will not be installed. " +
+                            "Ensure OpenTelemetry auto-configuration is active and correctly providing an SDK.",
+                    this.openTelemetry != null ? this.openTelemetry.getClass().getName() : "null");
+        }
+    }
+}
\ No newline at end of file
diff --git a/hertzbeat-log/src/main/resources/META-INF/spring.factories b/hertzbeat-otel/src/main/resources/META-INF/spring.factories
similarity index 94%
rename from hertzbeat-log/src/main/resources/META-INF/spring.factories
rename to hertzbeat-otel/src/main/resources/META-INF/spring.factories
index 07b683cf39..cb9d601c41 100644
--- a/hertzbeat-log/src/main/resources/META-INF/spring.factories
+++ b/hertzbeat-otel/src/main/resources/META-INF/spring.factories
@@ -14,4 +14,4 @@
 # limitations under the License.
 
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.hertzbeat.log.config.LogAutoConfiguration
\ No newline at end of file
+org.apache.hertzbeat.otel.config.LogAutoConfiguration
\ No newline at end of file
diff --git a/material/licenses/LICENSE b/material/licenses/LICENSE
index ed76a87333..13f11ae633 100644
--- a/material/licenses/LICENSE
+++ b/material/licenses/LICENSE
@@ -434,10 +434,7 @@ The text of each license is the standard Apache 2.0 license.
     https://mvnrepository.com/artifact/org.webjars/swagger-ui/5.10.3 Apache-2.0
     https://mvnrepository.com/artifact/com.google.flatbuffers/flatbuffers-java/1.12.0 Apache-2.0
     https://mvnrepository.com/artifact/com.vesoft/client/3.6.0 Apache-2.0
-    https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-api/1.49.0 Apache-2.0
-    https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-sdk/1.49.0 Apache-2.0
-    https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-sdk-logs/1.49.0 Apache-2.0
-    https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-exporter-otlp/1.49.0 Apache-2.0
+    https://mvnrepository.com/artifact/io.opentelemetry.instrumentation/opentelemetry-spring-boot-starter-2.15.0 Apache-2.0
     https://mvnrepository.com/artifact/io.opentelemetry.instrumentation/opentelemetry-logback-appender-1.0 Apache-2.0
 
 ========================================================================
diff --git a/pom.xml b/pom.xml
index 929eeebe05..449f4675de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,7 +88,7 @@
         <module>hertzbeat-push</module>
         <module>hertzbeat-plugin</module>
         <module>hertzbeat-grafana</module>
-        <module>hertzbeat-log</module>
+        <module>hertzbeat-otel</module>
         <module>hertzbeat-e2e</module>
         <module>hertzbeat-base</module>
         <module>hertzbeat-mcp</module>
@@ -175,7 +175,7 @@
         <arrow.version>18.1.0</arrow.version>
         <snappy-java.version>1.1.10.7</snappy-java.version>
         <sshd-sftp.version>2.13.1</sshd-sftp.version>
-        <opentelemetry-api.version>1.43.0</opentelemetry-api.version>
+        <opentelemetry-starter.version>2.15.0</opentelemetry-starter.version>
         <opentelemetry-logback.version>2.14.0-alpha</opentelemetry-logback.version>
     </properties>
 
@@ -238,7 +238,7 @@
             <!-- log -->
             <dependency>
                 <groupId>org.apache.hertzbeat</groupId>
-                <artifactId>hertzbeat-log</artifactId>
+                <artifactId>hertzbeat-otel</artifactId>
                 <version>${hertzbeat.version}</version>
             </dependency>
             <!-- collector-basic -->
@@ -477,33 +477,18 @@
                 <version>${sshd-sftp.version}</version>
             </dependency>
             <!-- OpenTelemetry -->
-            <dependency>
-                <groupId>io.opentelemetry</groupId>
-                <artifactId>opentelemetry-api</artifactId>
-                <version>${opentelemetry-api.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>io.opentelemetry</groupId>
-                <artifactId>opentelemetry-sdk</artifactId>
-                <version>${opentelemetry-api.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>io.opentelemetry</groupId>
-                <artifactId>opentelemetry-sdk-logs</artifactId>
-                <version>${opentelemetry-api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.opentelemetry</groupId>
-                <artifactId>opentelemetry-exporter-otlp</artifactId>
-                <version>${opentelemetry-api.version}</version>
-            </dependency>
             <dependency>
                 <groupId>io.opentelemetry.instrumentation</groupId>
                 <artifactId>opentelemetry-logback-appender-1.0</artifactId>
                 <version>${opentelemetry-logback.version}</version>
             </dependency>
+            <dependency>
+                <groupId>io.opentelemetry.instrumentation</groupId>
+                <artifactId>opentelemetry-instrumentation-bom</artifactId>
+                <version>${opentelemetry-starter.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@hertzbeat.apache.org
For additional commands, e-mail: notifications-help@hertzbeat.apache.org