Skip to main content

How to add Distributed Tracing to a Quarkus application with Jaeger

If you are running your applications on a microservices architecture you might want to trace which instances are getting called, how often and which one may have performance issues. In this post we are going to add a distributed tracing to monitor our Quarkus application so we can easily identify which instances are being called.

In this post we will see how to log all received requests by adding Jaeger as the Distributed Tracing system of an existing Quarkus application.

First we need to add the smallrye-opentracing extension to our project by running the Quarkus add-extension command:

Hopefully, you should get a success message printed out in your terminal telling you that your extension has been installed and as usual we now need to import our new maven dependency into the project.

The next thing we need to do is configure our application properties file to set, among other things, the name of the service for the Jaeger UI in which all of our logs will be saved to.

Before running our Quarkus application, lets run Jaeger in Docker so we can test if all of our requests are being logged appropriately.

Start Quarkus and access your application endpoint so Quarkus can send logs of the request to Jaeger: To access the Jaeger UI go to: http://your-host:16686 and select the name of your service in the dropdown menu. You can also specify a different host where you have Jaeger running like this:
quarkus.jaeger.endpoint=http://your-host:14268/api/traces
If everything went well you should be able to select your service name from the Jaeger UI:
In the next post we will add fault tolerance to our quarkus application!

Comments

Popular posts from this blog

Understanding RabbitMQ

Introduction RabbitMQ is a centralized message broker based on the AMQP (Advanced Message Queuing Protocol) protocol, acting as a Middleware between Producers and Consumers of different systems. In a message system, Publishers sends a message to a message broker where messages are consumed some time later by one or more Subscribers. By introducing a message brokeer between systems we are decoupling the sender application from the receiver. In this case the service that is responsible for sending or publishing the message does not need to know about any other service. All it needs to care about is the message and its format. With a message system you send a message to a message broker first and when the consumers or listeners of it become online they can start consuming from the message queue. This means you can keep sending messages without even care if the other application is online or if they had any failures. RabbitMQ Architecture Exchange, queue and bindings are the ...

A Retrospective board to call your own made with React, GraphQL and MongoDB

Introduction I have been working in a project to enable anyone to fork and run a retrospective board in its own server. I have created 2 (two) projects: one for the UI with React and GraphQL using Apollo client and one for the GraphQL server also using Apollo (Server) and MongoDB for the database. In the following sections I am going to walk you through the steps and explain how to run both projects. Main features The board main features: - History of your past iteractions saved in the Mongo database - Easy url link format to quick access any past iteractions - Automatically add action items as last action items in the new board - Quick move items to Action Items Coming next You can fork the React UI from the following GitHub repo: - Support for multiple teams - Authentication - Subscriptions (pub/sub) Code Repo You can fork the React UI from the following GitHub repo: React Retrospective UI You can fork the GraphQL Server from the following GitHub rep...

How to become a Blockchain developer and write your first Smart Contract - Part II

Introduction Now that you've already learned the basic concepts needed to become a Blockchain developer, in our introductory article , and are more familiar with the entire ecosystem of tools needed, in this article we will see how to write and deploy our first Smart Contract using Solidity. According to Solidity website: Solidity is an object-oriented, high-level language for implementing smart contracts. Smart contracts are programs that govern the behavior of accounts within the Ethereum state. Getting Started with the Solidity language The easiest way to start writing your first Solidity Smart Contrat is using Remix an online Ethereum IDE. To start creating your first Smart Contract you need to create a file with the .sol extension. So if you see a file with the .sol extension, that's a Smart Contract. In Solidity we make use of a preprocessor directive to tell the compiler how to compile our code. Being a statically typed language, all types in our code ...