Uptrace: open source APM
Uptrace is an open source APM tool that supports distributed tracing, metrics, and logs. You can use it to monitor applications and set up automatic alerts to receive notifications via email, Slack, Telegram, and more.
Uptrace uses OpenTelelemetry to collect data and ClickHouse database to store it. Uptrace also requires PostgreSQL database to store metadata such as metric names and alerts.
Open source APM
Uptrace is a source available APM tool that supports OpenTelemetry tracing, OpenTelemetry metrics, and logs. You can use it to monitor applications and set up alerts to receive notifications via email, Slack, Telegram, and more.
Uptrace provides tools and enables techniques to measure and analyze the performance of an application, identify areas of inefficiency or potential issues, and make improvements to optimize performance.
In just 5 minutes, you can start using Uptrace to monitor Go, Python, JavaScript, Ruby, Java, Rust, Erlang, Elixir, and PHP applications.
Screenshots
Uptrace allows to monitor your whole application stack on a compact and informative dashboard. You get a quick overview for all your services, hosts, and systems.
You can also analyze application performance using a fast and intuitive query language. You have the full power of SQL at your disposal to get deep insights from your data.
What is OpenTelemetry?
Uptrace uses OpenTelemetry to instrument code and collect traces, metrics, and logs. OpenTelemetry specifies how to collect and export telemetry data. With OpenTelemetry, you can instrument your application once and then add or change vendors without changing the instrumentation.
OpenTelemetry is available for most programming languages and provides interoperability across different languages and environments.
How Uptrace works?
Uptrace uses OpenTelemetry protocol to receive telemetry data directly from your application or from OpenTelemetry Collector.
Uptrace efficiently stores the data in ClickHouse database which, when compared with Elasticsearch or Cassandra, allows to significantly reduce storage requirements and improve query performance.
Uptrace uses AlertManager to create alerts and send notifications via email, Slack, Telegram, and more.
Uptrace comes with a modern Vue-based UI that helps you analyze and optimize application performance using a fast and intuitive query language.
APM basics
- Application performance management (APM) is the practice of monitoring software applications. It includes performance and availability monitoring, alerting, root cause analysis, and more.
- Span is an operation (unit of work) in a trace, for example, an HTTP endpoint or a database query.
- Trace is a tree of spans that shows the path that a request makes through an app. Root span is the first span in a trace.
- You create spans with a tracer. Usually, there is a single tracer for an app or a library.
- Event is like a span without duration, for example, a read message event or an error event. You can also think of events as spans without end time (and thus duration).
- Attribute is a key-value pair on a span that carries some information about the operation. For example,
host.name: localhost
orhttp.request_content_length: 10000
. - OpenTelemetry is a vendor-neutral API for distributed traces and metrics. Uptrace uses OpenTelemetry to collect telemetry data.
- Uptrace client is an OpenTelemery distribution configured to export data to Uptrace.
Why Uptrace?
- Single UI for traces, metrics, and logs.
- Efficient ingestion: more than 10K spans / second on a single core.
- Excellent on-disk compression. For example, using ZSTD, 1KB span can be compressed down to <40 bytes.
- S3-like storage support with ability to automatically upload cold data to S3-like storage or HDD.
- Alerting with notifications via email, Slack, Telegram, and more.
- Pre-configured OpenTelemetry SDKs for popular programming languages.
Why not ...?
There are many distributed tracing tools available on the market and each of them offers varying features, integrations, and pricing models.
The choice of an OpenTelemetry backend may depend on specific requirements, technology stack, and preferences of the organization or individual, but here are some vendors that we find interesting and inspiring.
SkyWalking
SkyWalking is an open-source distributed tracing system designed to monitor and diagnose complex microservices-based architectures.
SkyWalking is often used in cloud-native and microservices-based architectures to gain visibility into application performance and troubleshoot issues.
SkyWalking does not support ClickHouse and instead uses ElasticSearch/OpenSearch, which is less efficient for storing telemetry. SkyWalking also does not directly support OpenTelemetry protocol and provides OpenTelemetry adapters instead.
SkyWalking has an official demo (skywalking:skywalking) so you can easily compare it with Uptrace demo yourself.
Signoz
Signoz is an emerging tool in the observability space, offering distributed tracing capabilities to improve monitoring and troubleshooting in microservices architectures.
The main difference between Signoz and Uptrace is in the user interface which has too many differences to be described accurately.
- Both projects use Go, OpenTelemetry, and ClickHouse.
- Both projects support all 3 major observability signals: traces, metrics, and logs.
- Uptrace uses the BSL license. Signoz uses dual licensing: Apache 2.0 and Enterprise License.
- Signoz uses AlertManager for notifications, but Uptrace has built-in alerting capabilities.
- Uptrace provides spans grouping and optimizes ClickHouse schema for filtering and analyzing similar spans. Signoz uses more service-oriented schema design.
- Uptrace provides pre-configured OpenTelemetry distros, but Signoz provides instructions how to configure OpenTelemetry SDK.
Jaeger
Jaeger is an open-source end-to-end distributed tracing system. It is designed to monitor and troubleshoot complex microservices-based architectures.
Jaeger is widely adopted in the cloud-native community and is used to monitor and diagnose complex microservices architectures.
Jaeger requires a plugin to work with ClickHouse, but it abstracts storage access which allows to support multiple backends at small performance cost.
Jaeger does not support metrics, charts, percentiles, and has limited filtering capabilities.
See Jaeger vs OpenTelemetry to learn how projects work with each other.
Zipkin
Zipkin is an open source distributed tracing system developed by Twitter. It provides end-to-end visibility into the flow and latency of requests as they traverse a distributed system.
Zipkin is widely used in the microservices and cloud-native communities for distributed tracing and observability.
Zipkin does not support ClickHouse and requires OpenTelemetry -> Zipkin transformation to convert data between different protocols.
Zipkin's UI is minimalistic and can't be directly compared with Uptrace.
Open Source
All Uptrace code is open and battle-tested in production by thousands of happy users:
What's next?
Next, get started with Uptrace by downloading the Uptrace binary or creating a cloud account.