OpenTelemetry Java Getting Started 1

基本gRPC Log範例-Getting Started

ZONGRU Li
12 min readJul 4, 2022

先跑一遍OpenTelemetry官網的Java Getting Started(LINK)

基本流程大致如下:

  1. 執行Server & ClientgRPC專案(沒有OpenTelemetry),看看log
  2. 執行上述兩個專案帶OpenTelemetry的agent jar執行,看看log差異

1.執行Server & ClientgRPC專案(沒有OpenTelemetry):

link
LINK

在確保機台有java8的狀態:

另外也有安裝git:

依照上面的doc執行以下:

#拉專案:
git clone -b v1.47.0 --depth 1 https://github.com/grpc/grpc-java
#切換到專案路徑:
cd grpc-java/examples
#編譯其中的Server與Client專案:
./gradlew installDist

看起來前面是只有JRE,所以會缺少JDK才有的tools.jar,所以再補裝JDK

#執行以下安裝JDK:
sudo apt-get install openjdk-8-jdk

再重跑剛剛的gradlew指令:

接著後面開兩個terminal分別執行ServerClient的專案

#其中一個執行Server專案:
cd ~/grpc-java/examples
./build/install/examples/bin/hello-world-server
#另一個執行client專案:
cd ~/grpc-java/examples
./build/install/examples/bin/hello-world-client

針對Server專案執行ctrl+c結束運行

後面gRPC有簡單改Code教學跳過不做:

以上確保了ServerClient兩包專案的簡單溝通架構

並有印出簡單請求log

2.執行上述兩個專案帶OpenTelemetry的agent jar執行:

接著執行如下:

首先下載上面連結給的opentelemetry-javaagent.jar

設定環境變數:

#執行以下設定環境變數(注意opentelemetry-javaagent.jar的路徑):
export JAVA_OPTS="-javaagent:/tmp/opentelemetry-javaagent.jar"
export OTEL_TRACES_EXPORTER=logging

記得這個設法是by terminal的,所以Server的跟Client的terminal都要設一遍

接著背景執行Server

#執行背景執行Server專案:
cd ~/grpc-java/examples
./build/install/examples/bin/hello-world-server &

接著另一個terminal執行Client

#執行Client專案:
cd ~/grpc-java/examples
./build/install/examples/bin/hello-world-client

詳細看到的訊息整理如下:

#Client Terminal:
ubuntu@ip-10-0-10-173:~/grpc-java/examples$ ./build/install/examples/bin/hello-world-client
[otel.javaagent 2022-07-04 00:53:29:522 +0000] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 1.15.0
Jul 04, 2022 12:53:38 AM io.grpc.examples.helloworld.HelloWorldClient greet
INFO: Will try to greet world ...
[otel.javaagent 2022-07-04 00:53:39:880 +0000] [main] INFO io.opentelemetry.exporter.logging.LoggingSpanExporter - 'helloworld.Greeter/SayHello' : a162d3b23f52e59ec14a31488826d17e fc49e0a3a84d8253 CLIENT [tracer: io.opentelemetry.grpc-1.6:1.15.0-alpha] AttributesMap{data={net.transport=ip_tcp, net.peer.name=localhost, net.peer.port=50051, rpc.service=helloworld.Greeter, rpc.method=SayHello, thread.id=1, rpc.system=grpc, thread.name=main, rpc.grpc.status_code=0}, capacity=128, totalAddedValues=9}
Jul 04, 2022 12:53:39 AM io.grpc.examples.helloworld.HelloWorldClient greet
INFO: Greeting: Hello world
[otel.javaagent 2022-07-04 00:53:40:166 +0000] [OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export metrics. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4317
ubuntu@ip-10-0-10-173:~/grpc-java/examples$

上面部分log貼到VScode看到:

往右邊拉:

再來是Server的

#Server Terminal:
ubuntu@ip-10-0-10-173:~/grpc-java/examples$ ./build/install/examples/bin/hello-world-server &
[1] 5410
ubuntu@ip-10-0-10-173:~/grpc-java/examples$ [otel.javaagent 2022-07-04 00:52:03:646 +0000] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 1.15.0
Jul 04, 2022 12:52:12 AM io.grpc.examples.helloworld.HelloWorldServer start
INFO: Server started, listening on 50051
[otel.javaagent 2022-07-04 00:53:04:513 +0000] [OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export metrics. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4317
[otel.javaagent 2022-07-04 00:53:39:798 +0000] [grpc-default-executor-0] INFO io.opentelemetry.exporter.logging.LoggingSpanExporter - 'helloworld.Greeter/SayHello' : a162d3b23f52e59ec14a31488826d17e fdeaeb90d9cd6de9 SERVER [tracer: io.opentelemetry.grpc-1.6:1.15.0-alpha] AttributesMap{data={net.transport=ip_tcp, net.peer.port=55240, rpc.service=helloworld.Greeter, rpc.method=SayHello, thread.id=16, rpc.system=grpc, net.peer.ip=127.0.0.1, thread.name=grpc-default-executor-0, rpc.grpc.status_code=0}, capacity=128, totalAddedValues=9}
[otel.javaagent 2022-07-04 00:54:04:411 +0000] [OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export metrics. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4317
[otel.javaagent 2022-07-04 00:55:04:403 +0000] [OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export metrics. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4317
[otel.javaagent 2022-07-04 00:56:04:402 +0000] [OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export metrics. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4317

上面部分log轉到VScode看到:

往右邊拉看到:

後面Serverterminal會持續看到:

後續用ps -ef找到process id後,再跑kill指令才能把Server結束

從以上就明顯看到多出了很多的log內容

是透過外掛 opentelemetry-javaagent.jar而來的

並且有一定格式

以上官網的JavaGetting Started就跑完了

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet