OpenTelemetry w OpenEdge – część II
W poprzednim artykule skonfigurowaliśmy OpenTelemetry w OpenEdge i przygotowaliśmy środowisko, w którym OpenEdge może generować dane telemetryczne.
Tym razem pójdziemy krok dalej. Dane już mamy, teraz zobaczymy jak odebrać je przez wybrany APM.
Do prezentacji trace’ów wybrałem Jaegera, czyli narzędzie opensourcowe przeznaczone do rozproszone tracingu i analizy ścieżki wykonywania operacji w aplikacjach. W naszym przypadku będzie on pełnił rolę środowiska, w którym możemy wyszukiwać i analizować trace’y generowane przez OpenEdge.
Nie jest to oczywiście jedyna możliwość. OpenTelemetry został zaprojektowany tak, aby aplikacja nie była na stałe związana z jednym APM. Jaeger jest jednak bardzo dobrym wyborem do naszego przykładu, ponieważ pozwala szybko zobaczyć strukturę trace’a, poszczególne spany, czasy wykonania oraz zależności pomiędzy nimi.
Najpierw przetestujemy wysyłanie danych telemetrycznych do Collectora.
Pobieramy OpenTelemetry Collector ze strony github i rozpakowujemy do własnego katalogu np.:
C:\WrkOpenEdge128\otel\collector
Najprostszy plik konfiguracyjny wygląda następująco: config.yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
exporters:
debug:
verbosity: detailed
service:
pipelines:
traces:
receivers: [otlp]
exporters: [debug]
otelcol-contrib.exe –config=config.yaml

myOtelConfig2.json
{
"OpenTelemetryConfiguration": {
"resource_attributes": "service.name=Sports2000",
"exporters": {
"otlp": {
"grpc": [
{
"endpoint": "http://localhost:4317",
"span_processor": "batch"
}
]
}
}
},
"OpenEdgeTelemetryConfiguration": {
"trace_procedures": "*",
"trace_classes": "*",
"trace_abl_transactions": true,
"trace_requires_parent": false,
"trace_request_start": true
}
}
prowin ../db/sports2000 -otelconfig myOtelConfig2.json

Jaeger uruchamiamy z domyślną konfiguracją All-in-One, ale jedną wartość musimy zmienić: endpoint OTLP/gRPC. Spowodowane jest to tym, że do testów wszystkie procesy uruchamiam lokalnie, a Collector już nasłuchuje na 4317, więc Jaeger musi dostać inny port.
Jaeger uruchamiamy poniższym poleceniem:
C:\WrkOpenEdge128\otel\jaeger>jaeger.exe –set=receivers.otlp.protocols.grpc.endpoint=0.0.0.0:14317
Sprawdzamy czy nie ma komuniatów o błędach i pozostawiamy okno otwarte.
Teraz trzeba odpalić sesję klienta openedge żeby Jaeger przechwycił dane z Collectora:
prowin ../db/sports2000 -otelconfig myOtelConfig2.json
Uruchamiam program CustomerOrders.p, co powinno spowodować wyeksportowanie danych telemetrycznych.
Otwieramy interfejs Jaegera w oknie przeglądarki: http://localhost:16686/
W polu Service wybieramy nazwę naszego serwisu, czyli Sports2000, a następnie nazwę procedury, której metrykę chcemy sprawdzić. Wybieram nazwę z rozszerzeniem .ped, czyli tutaj nadrzędną procedurę CustomerOrders.p.

Widać liczbę spanów: 5. Czas trwania całej procedury, więcej informacji widać na powiększonym ekranie i na dalszych ekranach.

Na przykłąd tu widać całe drzewo wywołań od nadrzędnego id z czasami poszczególnych procedur.

Rozwijając każdy span widać więcej szczegółowych informacji.

Rozwijając widok Trace Flamegraph (po prawej stronie) przechodzimy do różnego typu widoku: Timeline, Graph, Statistics itd.
