
Процес моніторингу та відладки програмного забезпечення вимагає ефективних інструментів, які забезпечують надійну інформацію про роботу додатків. У цій статті розглянуто інтеграцію OpenTelemetry з Quarkus Native та Skywalking для аналізу слідів та метрик в розподілених системах.
OpenTelemetry є потужним інструментом для збору та експорту даних про сліди та метрики з додатків. Quarkus – це фреймворк для розробки Java-додатків, який спрощує створення оптимізованих для швидкості і масштабованості додатків. Skywalking – це система моніторингу та відладки розподілених систем, яка забезпечує зручний інтерфейс для аналізу слідів і метрик.
Інтеграція OpenTelemetry з Quarkus Native дозволяє отримувати дані про сліди та метрики без значного впливу на продуктивність системи. Однак, розглядаючи інтеграцію з Skywalking, виникають деякі складнощі через те, що агент Java Skywalking не підтримує GraalVM, яка використовується для компіляції Quarkus Native.
Для початку інтеграції OpenTelemetry з Quarkus Native, необхідно додати залежність в pom.xml файлі проекту:
html
| 1 2 3 4 | <dependency>   <groupId>io.quarkus</groupId>   <artifactId>quarkus-opentelemetry</artifactId> </dependency> | 
Після цього в файлі application.properties слід вказати параметри експорту даних для OpenTelemetry:
html
Copy code
| 1 2 3 4 | quarkus.otel.exporter.otlp.traces.endpoint=http://skywalking-otel-collector-service.default.svc.cluster.local:4317 quarkus.otel.traces.enabled=true quarkus.otel.exporter.otlp.enabled=true quarkus.http.access-log.pattern="...traceId=%{X,traceId} spanId=%{X,spanId}" | 
Далі, генеруємо Quarkus Native image та розгортаємо OpenTelemetry колектор, який буде збирати дані про сліди та метрики з додатків:
yaml
Copy code
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | apiVersion: apps/v1 kind: Deployment metadata:   name: skywalking-otel-collector   labels:     name: skywalking-otel-collector spec:   replicas: 1   selector:     matchLabels:       name: skywalking-otel-collector   template:     metadata:       labels:         name: skywalking-otel-collector     spec:       containers:       - name: otel-collector         image: otel/opentelemetry-collector-contrib         command:         - "./otelcol-contrib"         - "--config=/config/otel/otel-collector-config.yaml"         resources:           limits:             cpu: 300m             memory: 1Gi           requests:             cpu: 300m             memory: 1Gi         ports:         - containerPort: 55679         - containerPort: 4317         - containerPort: 4318         - containerPort: 8888         env:         - name: MY_POD_IP           valueFrom:             fieldRef:               apiVersion: v1               fieldPath: status.podIP         volumeMounts:         - name: otel-collector-configs           mountPath: /config/otel       volumes:       - name: otel-collector-configs         configMap:           name: otel-collector-configmap           items:           - key: otel-collector-config             path: otel-collector-config.yaml | 
Також потрібно створити ConfigMap для налаштування OpenTelemetry колектора:
yaml
Copy code
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | apiVersion: v1 kind: ConfigMap metadata:   name: otel-collector-configmap data:   otel-collector-config: |     receivers:       otlp:         protocols:           grpc:             endpoint: 0.0.0.0:4317           http:             endpoint: 0.0.0.0:4318     processors:       batch:     exporters:       logging:         loglevel: info       otlp:         endpoint: skywalking-skywalking-helm-oap.skywalking.svc.cluster.local:11800         tls:           insecure: true     extensions:       health_check:     service:       extensions: [health_check]       pipelines:         metrics:           receivers: [otlp]           processors: [batch]           exporters: [logging, otlp]         traces:           receivers: [otlp]           processors: [batch]           exporters: [logging,otlp]         logs:           receivers: [otlp]           processors: [batch]           exporters: [otlp] | 
І створити Service для OpenTelemetry колектора:
yaml
Copy code
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | apiVersion: v1 kind: Service metadata:   name: skywalking-otel-collector-service spec:   ports:   - name: grpc     port: 4317     protocol: TCP     targetPort: 4317   - name: http     port: 4318     protocol: TCP     targetPort: 4318   selector:     name: skywalking-otel-collector   type: NodePort | 
Після налаштування OpenTelemetry колектора, встановлення Skywalking за допомогою Helm та розгортання Skywalking UI, система повинна бути готова до моніторингу та відладки розподілених додатків.
Незважаючи на виклики, пов'язані з інтеграцією Skywalking з Quarkus Native, цей підхід відкриває широкі можливості для збору та аналізу даних про роботу додатків в реальному часі. Інтеграція OpenTelemetry з Quarkus Native та Skywalking створює потужну платформу для моніторингу та відладки розподілених систем, що дозволяє розробникам ефективно виявляти та виправляти проблеми в їх програмному забезпеченні.