我們使用 github 上的 docker-compose.yml 進行建置。最後的容器回如下
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
d65e2c6dc4ca otel/opentelemetry-collector-dev:latest "/otelcol --config=/…" 14 hours ago Up 14 hours 0.0.0.0:1777->1777/tcp, :::1777->1777/tcp, 0.0.0.0:4317->4317/tcp, :::4317->4317/tcp, 0.0.0.0:55679->55679/tcp, :::55679->55679/tcp, 0.0.0.0:8887->8888/tcp, :::8887->8888/tcp, 0.0.0.0:49169->13133/tcp, :::49169->13133/tcp, 0.0.0.0:49168->14250/tcp, :::49168->14250/tcp, 0.0.0.0:49167->14268/tcp, :::49167->14268/tcp, 0.0.0.0:49166->55678/tcp, :::49166->55678/tcp opentelemetry_otel-agent_1
1e35da42a6a6 docker.elastic.co/elasticsearch/elasticsearch:7.8.0 "/tini -- /usr/local…" 14 hours ago Up 14 hours 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp
elasticsearch
8b2b00a192c1 jaegertracing/jaeger-query "/go/bin/query-linux" 14 hours ago Up 14 hours 0.0.0.0:3006->16686/tcp, :::3006->16686/tcp
jaeger_query
4c576423605b prom/prometheus "/bin/prometheus --c…" 14 hours ago Up 14 hours 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp
prometheus
e3251123dfe2 jaegertracing/jaeger-opentelemetry-collector "/go/bin/opentelemet…" 14 hours ago Up 14 hours 14267/tcp, 0.0.0.0:9000->14250/tcp, :::9000->14250/tcp, 0.0.0.0:3009->14268/tcp, :::3009->14268/tcp
jaeger_collector
85aab4550811 otel/opentelemetry-collector-dev:latest "/otelcol --config=/…" 14 hours ago Up 19 minutes 0.0.0.0:1888->1888/tcp, :::1888->1888/tcp, 0.0.0.0:8888-8889->8888-8889/tcp, :::8888-8889->8888-8889/tcp, 0.0.0.0:13133->13133/tcp, :::13133->13133/tcp, 55678/tcp, 0.0.0.0:49173->4317/tcp, :::49173->4317/tcp, 0.0.0.0:55670->55679/tcp, :::55670->55679/tcp
opentelemetry_otel-collector_1
84a6eabcb1af grafana/grafana "/run.sh" 14 hours ago Up 14 hours 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
這邊與前一章不同的是這邊使用了 Opentelemetry 的配置進行設定分別是 otel-agent-config.yaml
、otel-collector-config.yaml
不過這邊 Prometheus 出現一些問題所以就不演示。
接著運行一個在我 github 上的 Spring boot 應用,它是一個簡單的員工管理系統。如下圖
新增員工頁面
Jaeger 介面,同時 Service 有我們定義 OTEL_RESOURCE_ATTRIBUTES
的資源
此時 Jaeger 上 Operation 有很多的操作,這些操作都是觸發該員工管理系統的任意資源。按下 Find traces 後,右邊會有下圖的資訊,內容是 trace 資訊,通常每觸發一個 API 就會產生一個。
我們點選上圖中第一個 trace,會進到如下的頁面,當中可以清楚知道每調用一個服務中的每個原件所耗時的時間,因此我們可以藉由此觀察或許能找出瓶頸。
接著按右上角 trace graph
其呈現的內容會如下,以樹的方式呈現,更加直觀清楚知道調用過程。每個不同的呈現其細節都不一樣。
透過新增一個員工來觀察
這是被追蹤後的結果,
可以看到說它從 controller 最後呼叫到 sql 的儲存,在 Jaeger 也清楚地給予 SQL 相關的操作資訊
在 saveEmployee 中執行了 3383.94 ms 其當中,包含呼叫 EmployeeController.saveEmployee 它花費 3313.63 ms,這當中它右往下呼叫了 CrudRepository.save 花費了 256.723 ms,這當中右呼叫了 demo 花費了 2.452 ms。
今天的文章就分享到這, Jaeger 和 OpenTelemetry 是一個有趣的議題,未來還要更加深入挖掘以及應用