This post is recommended to read with an example. You can clone example in my Github – https://github.com/ktz-boilerplate/finatra-zipkin-example.
Micro Service is becoming trendy technology. But there are many things to consider during migrate our service to micro service. One of them is latency. We have to monitor each micro service and find out which service is a bottleneck and why does that happen. And Zipkin can be a reasonable answer.
Zipkin
Zipkin is monitoring solution about latency. It traces each micro service and calculates latencies so that we can trace which micro take lots of time and handle it. This solution is base on Google Dapper.
Example
Start Zipkin on Docker
First, we will test Zipkin solution on Docker. So, if you don’t have Docker in local, please install it. You can see how to install in Docker Documentation.
Now, let’s start Zipkin on Docker.
$ docker run -d -p 9411:9411 -p 9410:9410 -e SCRIBE_ENABLED=true openzipkin/zipkin
9411 port is Zipkin web UI and 9410 port is scribe port. And you have to enable scribe port to accept Thrift by SCRIBE_ENABLED=true. If you up Zipkin on Docker, then you can see web UI in here.
Zipkin Twitter Flag
Before start servers, Let’s look around for twitter flags related to Zipkin. If your server is not compatible to this flags, you have to version up Finatra.
-http.name: HTTP Server name which displayed in Zipkin.
-thrift.name: Thrift Server name which displayed in Zipkin.
-com.twitter.finagle.zipkin.host: Zipkin host and port number to pass trace span(data).
-com.twitter.finagle.zipkin.initialSampleRate: Sample rate. from 0 to 1.0. 1.0 is that trace all request and send to Zipkin.
Start Finatra HTTP Server
Now, go to project directory. You can see 5 sub-projects. One of them is Finatra HTTP-Server. Let’s start HTTP Server first.
$ sbt 'project http-server' "run -http.name=http-server -com.twitter.finagle.zipkin.host=localhost:9410 -com.twitter.finagle.zipkin.initialSampleRate=1"
Start Finatra Thrift Server
Now, let’s start another server. It’s Thrift Server
$ sbt 'project thrift-server' "-thrift.name=thrift-server -com.twitter.finagle.zipkin.host=localhost:9410 -com.twitter.finagle.zipkin.initialSampleRate=1"
Query Something.
Now connect to HTTP-Server and Query Something. There are some URL you can test.
get
- /users
- /user/:userId
- /user/car/
- /user/:userId/car
post
- /user
For example, if you want to get all users. You can get by call http://localhost:8080/users
After some queries, you can see tracing status in Zipkin Web UI like this.
The default setting is sort by longest latency first.
You can also see dependency like this.