This is a sample application which deploys a mock Express.js server along with a mock client to send requests to the server. OpenTelemetry is used to build in automatic instrumentation for this app. Zipkin is used to expose the instrumentation data via the browser.
Start by cloning the current repository using the following command:
git clone git@github.com:kovid-r/opentelemetry-express-zipkin.git
Assuming that you have Docker installed on your system, you can quickly spin up a Zipkin Docker container which runs on port 9411
using the following command:
docker run -d -p 9411:9411 openzipkin/zipkin
Alternatively, you can run Zipkin using Java or build it from source.
After cloning the repository, head over to the directory and run the following command to start the Express.js server on port 8080
:
# Open the cloned directory
cd opentelemetry-express-zipkin
# Start the Express.js server
npm run server
Open another terminal tab and run the following command to start the client which will send mock HTTP requests to the Express.js server:
npm run client
The sendRequest
method will be called ten times at an interval of one second each.
Zipkin runs on port 9411
, by default. Log onto http://localhost:9411/zipkin to search the traces just generated by the OpenTelemetry for all the requests received from the client and served by the server.
Here's what a part of the trace will look like:
{
"traceId": "608174b6dc21ab4cea706cad484142fc",
"parentId": "30798d2f44f2cfe8",
"id": "a6f99f3c493b30ab",
"name": "middleware - jsonparser",
"timestamp": 1638184172048735,
"duration": 277,
"localEndpoint": {},
"tags": {
"express.name": "jsonParser",
"express.type": "middleware",
"http.route": "/",
"ot.status_code": "UNSET",
"service.name": "express-zipkin-opentelemetry",
"telemetry.sdk.language": "nodejs",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "0.25.0"
}
}
Here's what the summary of the trace would look like on Zipkin: