Процес моніторингу та відладки програмного забезпечення вимагає ефективних інструментів, які забезпечують надійну інформацію про роботу додатків. У цій статті розглянуто інтеграцію 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 створює потужну платформу для моніторингу та відладки розподілених систем, що дозволяє розробникам ефективно виявляти та виправляти проблеми в їх програмному забезпеченні.