1. Giới thiệu 

Tích hợp Zero-code là tích hợp mà không cần viết thêm một dòng mã nào trong ứng dụng, dễ dàng tích hợp với cả các ứng dụng được triển khai trên máy chủ hoặc Containers

Các ngôn ngữ hiện đang được hỗ trợ:

  • Java
  • .NET
  • Python
  • PHP

2. Một số lưu ý 

  • Để giám sát ứng dụng, hãy thay thế các đường dẫn của logs metrics như sau:
https://metrics-xxx.obs.vnptplatform.vn/api/v1/push -> https://metrics-xxx.obs.vnptplatform.vn/otlp/v1/metrics
https://logs-xxx.obs.vnptplatform.vn/loki/api/v1/push -> https://logs-xxx.obs.vnptplatform.vn/otlp/v1/logs
  • Để tìm hiểu cách sử dụng dịch vụ, tham khảo tại đây
  • Sau khi tích hợp cần khởi động lại ứng dụng

3. Java

3.1. Tương thích

  • Java 8+
  • Spring Boot Starter 2.6+, 3.1+

3.2. Java Agent

Bước 1: Tải file agent tại đây 

Bước 2: Cấu hình agent

Sử dụng câu lệnh trực tiếp:

java -javaagent:PATH_AGENT/apm-javaagent.jar \      
    -Dotel.service.name=<app_name>  \
    -Dotel.exporter.otlp.traces.endpoint=<traces_endpoint> \
    -Dotel.exporter.otlp.logs.endpoint=<logs_endpoint> \
    -Dotel.exporter.otlp.metrics.endpoint=<metrics_endpoint> \
    -Dotel.traces.exporter=otlp \
    -Dotel.logs.exporter=otlp \
    -Dotel.metrics.exporter=otlp \
    -Dotel.exporter.otlp.traces.headers="Authorization=<traces_token>"  \
    -Dotel.exporter.otlp.metrics.headers="Authorization=<metrics_token>"  \
    -Dotel.exporter.otlp.logs.headers="Authorization=<logs_token>"  \
    -jar ./app_name.jar

Hoặc có thể sử dụng file cấu hình config.properties

otel.javaagent.enabled=true
otel.service.name=<app_name> 
otel.exporter.otlp.traces.endpoint=<traces_endpoint>
otel.exporter.otlp.traces.headers="Authorization=<traces_token>" 
otel.exporter.otlp.metrics.endpoint=<metrics_endpoint>
otel.exporter.otlp.metrics.headers="Authorization=<metrics_token>" 
otel.exporter.otlp.logs.endpoint=<logs_endpoint>
otel.exporter.otlp.logs.headers="Authorization=<logs_token>" 
otel.traces.exporter=otlp
otel.logs.exporter=otlp
otel.metrics.exporter=otlp

Sau đó chạy lệnh:

java -javaagent:.PATH_AGENT/apm-javaagent.jar \
    -Dotel.javaagent.configuration-file=.PATH_CONFIG_FILE/config.properties \
    -jar ./app_name.jar

4. Containers

Bước 1: Tải về máy chủ file agent tại đây 

Bước 2: Cập nhật Dockerfile ứng dụng

COPY opentelemetry-javaagent.jar /app/apm-javaagent.jar

Bước 2: Thêm các biến môi trường 

OTEL_SERVICE_NAME: <app_name>
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: <logs_endpoint>
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: <traces_endpoint>
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: <metrics_endpoint>
OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf      
OTEL_LOGS_EXPORTER: "otlp"    
OTEL_METRICS_EXPORTER: "otlp"
OTEL_TRACES_EXPORTER: "otlp"
OTEL_EXPORTER_OTLP_METRICS_HEADERS: "Authorization=<metrics_token>"
OTEL_EXPORTER_OTLP_TRACES_HEADERS: "Authorization=<traces_token>"
OTEL_EXPORTER_OTLP_LOGS_HEADERS: "Authorization=<logs_token>"
JAVA_TOOL_OPTIONS: "-javaagent:./apm-javaagent.jar"

5. App server

Bước 1: Tải file agent tại đây

Bước 2: Tích hợp app server JBoss EAP / WildFly

  • Linux
JAVA_OPTS="$JAVA_OPTS -javaagent:PATH_AGENT/apm-javaagent.jar"
JAVA_OPTS="$JAVA_OPTS -Dotel.service.name=<app_name>"
JAVA_OPTS="$JAVA_OPTS -Dotel.traces.exporter=otlp"
JAVA_OPTS="$JAVA_OPTS -Dotel.metrics.exporter=otlp"
JAVA_OPTS="$JAVA_OPTS -Dotel.logs.exporter=otlp"
JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.otlp.protocol=http/protobuf"
JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.otlp.traces.endpoint=<traces_endpoint>"
JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.otlp.traces.headers=Authorization=<traces_token>"
JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.otlp.metrics.endpoint=<metrics_endpoint>"
JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.otlp.metrics.headers=Authorization=<metrics_token>"
JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.otlp.logs.endpoint=<logs_endpoint>"
JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.otlp.logs.headers=Authorization=<logs_token>"
  • Windows
set "JAVA_OPTS=%JAVA_OPTS% -javaagent:PATH_AGENT\apm-javaagent.jar"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.service.name=<app_name>"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.traces.exporter=otlp"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.metrics.exporter=otlp"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.logs.exporter=otlp"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.exporter.otlp.protocol=http/protobuf"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.exporter.otlp.traces.endpoint=<traces_endpoint>"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.exporter.otlp.traces.headers=Authorization=<traces_token>"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.exporter.otlp.metrics.endpoint=<metrics_endpoint>"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.exporter.otlp.metrics.headers=Authorization=<metrics_token>"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.exporter.otlp.logs.endpoint=<logs_endpoint>"
set "JAVA_OPTS=%JAVA_OPTS% -Dotel.exporter.otlp.logs.headers=Authorization=<logs_token>"

6. Một số cấu hình khác

Để loại bỏ một tín hiệu không cần thiết từ các thư viện như redis, okHttp... Có thể cấu hình như sau 

OTEL_INSTRUMENTATION_OKHTTP_ENABLED=false

Các cấu hình khác:

Library/FrameworkInstrumentation name
Additional methods tracingmethods
Additional tracing annotationsexternal-annotations
Akka Actorakka-actor
Akka HTTPakka-http
Apache Axis2axis2
Apache Camelcamel
Apache Cassandracassandra
Apache CXFcxf
Apache DBCPapache-dbcp
Apache Dubboapache-dubbo
Apache Geodegeode
Apache HttpAsyncClientapache-httpasyncclient
Apache HttpClientapache-httpclient
Apache Kafkakafka
Apache MyFacesjsf-myfaces
Apache Pekko Actorpekko-actor
Apache Pekko HTTPpekko-http
Apache Pulsarpulsar
Apache RocketMQrocketmq-client
Apache Shenyuapache-shenyu
Apache Struts 2struts
Apache Tapestrytapestry
Apache Tomcattomcat
Apache Wicketwicket
Armeriaarmeria
AsyncHttpClient (AHC)async-http-client
AWS Lambdaaws-lambda
AWS SDKaws-sdk
Azure SDKazure-core
Clickhouse Clientclickhouse
Couchbasecouchbase
C3P0c3p0
Dropwizard Viewsdropwizard-views
Dropwizard Metricsdropwizard-metrics
Eclipse Grizzlygrizzly
Eclipse Jerseyjersey
Eclipse Jettyjetty
Eclipse Jetty HTTP Clientjetty-httpclient
Eclipse Metrometro
Eclipse Mojarrajsf-mojarra
Eclipse Vert.x HttpClientvertx-http-client
Eclipse Vert.x Kafka Clientvertx-kafka-client
Eclipse Vert.x Redis Clientvertx-redis-client
Eclipse Vert.x RxJavavertx-rx-java
Eclipse Vert.x SQL Clientvertx-sql-client
Eclipse Vert.x Webvertx-web
Elasticsearch clientelasticsearch-transport
Elasticsearch REST clientelasticsearch-rest
Finaglefinagle-http
Google Guavaguava
Google HTTP clientgoogle-http-client
Google Web Toolkitgwt
Grailsgrails
GraphQL Javagraphql-java
GRPCgrpc
Hibernatehibernate
Hibernate Reactivehibernate-reactive
HikariCPhikaricp
InfluxDBinfluxdb
Java HTTP Clientjava-http-client
Java HttpURLConnectionhttp-url-connection
Java JDBCjdbc
Java JDBC DataSourcejdbc-datasource
Java RMIrmi
Java Runtimeruntime-telemetry
Java Servletservlet
java.util.concurrentexecutors
java.util.loggingjava-util-logging
Javalinjavalin
JAX-RS (Client)jaxrs-client
JAX-RS (Server)jaxrs
JAX-WSjaxws
JBoss Logging Appenderjboss-logmanager-appender
JBoss Logging MDCjboss-logmanager-mdc
JMSjms
Jodd HTTPjodd-http
JSPjsp
K8s Clientkubernetes-client
Ktorktor
kotlinx.coroutineskotlinx-coroutines
Log4j Appenderlog4j-appender
Log4j MDC (1.x)log4j-mdc
Log4j Context Data (2.x)log4j-context-data
Logback Appenderlogback-appender
Logback MDClogback-mdc
Micrometermicrometer
MongoDBmongo
MyBatismybatis
Netflix Hystrixhystrix
Nettynetty
OkHttpokhttp
OpenLibertyliberty
OpenTelemetry Extension Annotationsopentelemetry-extension-annotations
OpenTelemetry Instrumentation Annotationsopentelemetry-instrumentation-annotations
OpenTelemetry APIopentelemetry-api
Oracle UCPoracle-ucp
OSHI (Operating System and Hardware Information)oshi
Play Frameworkplay
Play WS HTTP Clientplay-ws
Quarkusquarkus
Quartzquartz
R2DBCr2dbc
RabbitMQ Clientrabbitmq
Ratpackratpack
ReactiveX RxJavarxjava
Reactorreactor
Reactor Kafkareactor-kafka
Reactor Nettyreactor-netty
Redis Jedisjedis
Redis Lettucelettuce
Rediscalarediscala
Redissonredisson
Restletrestlet
Scala ForkJoinPoolscala-fork-join
Spark Web Frameworkspark
Spring Batchspring-batch
Spring Corespring-core
Spring Dataspring-data
Spring JMSspring-jms
Spring Integrationspring-integration
Spring Kafkaspring-kafka
Spring RabbitMQspring-rabbit
Spring RMIspring-rmi
Spring Schedulingspring-scheduling
Spring Webspring-web
Spring WebFluxspring-webflux
Spring Web MVCspring-webmvc
Spring Web Servicesspring-ws
Spymemcachedspymemcached
Tomcat JDBCtomcat-jdbc
Twilio SDKtwilio
Twitter Finatrafinatra
Undertowundertow
Vaadinvaadin
Vibur DBCPvibur-dbcp
XXL-JOBxxl-job
ZIOzio