Open Telemetry
It is a set of APIs, SDKs, tooling and integrations which are designed for creating and manageming of telemetry data such as traces, metrics, and logs. This project provides a vendor-agnostic implementation that can be configured to send telemetry data to any backend of your choice. It has support for a variety of popular open-source projects including Jaeger and Prometheus.
Telemetry data is very important for powering observability products. Usually until now, telemetry data was provided by open-source projects or commercial vendors. But due to the lack of standardization, there was a lack of data portability and also it burdened the user to maintain the instrumentation.
By adopting open telemetry we can solve all the problems given above as it gives us a single, vendor-agnostic solution which also has a broad industry support and it is also being used by the cloud providers themselves ,the end to end users and also its venders.
What does OpenTelemetry provide you with?
- A single, vendor-agnostic instrumentation library per language with support for both automatic and manual instrumentation.
- A single collector binary which can be deployed in a variety of ways which also incude an agent or gateway.
- An end-to-end implementation which helps in generating, emitting, collecting, processing and exporting telemetry data.
- You will have a full control over your data which also has the ability to send data to multiple destinations in parallel via configuration.
- Open-standard semantic conventions to ensure vendor-agnostic data collection
- The ability to support multiple context propagation formats in parallel to assist with migrating as standards evolve.
- It has a support for a wide variety of open-source and commercial protocols, format and context propagation mechanisms as well as it can provide shims to the OpenTracing and OpenCensus projects, it is very easy to adopt OpenTelemetry
What is Observability?
It is the practice of measuring the state of a system by its outputs. It is a term which originated in the control theory, it is concerned with describing and understanding how the self-regulating systems operate. Now a days a lot of organizations have increased its use and are adding it to distributed IT systems which helps them to understand and improve their performance. Observability alse uses telemetry data to gain a deep visibility into these systems and help teams to answer multitude of questions about the systems behavior.
How does OpenTelemetry work?
Observability is generally achieved by utilizing 4 fundamental data groups known as the M.E.L.T
Metrics provide time-based numerical measurements on elements of the application ecosystems.
Events track individual actions, producing a time-stamped inventory of data related to operations that are defined by the user. You can use events to confirm that a particular action occurred at a particular time.
Logging : It is used for collecting application generated text added to troubleshoot.There is a lot of suspicion regarding the effectiveness of log data in the context of microservices , as it is very difficult to scale and it is often considered as overly expensive. We can consider logs as essentially just lines of text a system produces when certain code blocks get executed.
Tracing :It provides an understanding of how requests flow through the system. It can be used for understand interacting parts and their behaviors.
Benefits of OpenTelemetry
- Observability helps achieve business objectives
- OpenTelemetry simplifies observability integration
- Broad Language Support -> Java , C# , Go , JavaScript , Python , Rust , C++ , Erlang/Elixir
- Integrates With Popular Frameworks and Libraries -> MySQL , Redis , Django , Kafka , Jetty , Akka , RabbitMQ ,Spring , Quarkus , Flask , net/http , gorilla/mux , WSGI , JDBC , PostgreSQL
What is OpenTelemetry used for?
It can be used to solve common issues encountered at organizations running cloud-native applications across distributed systems.
Monitor the health of microservices applications
Attribute resource usage to different user groups
Create prioritized requests among shared resources