paint-brush
Mobile App Debugging in 2023: Top 3 Tools by@strateh76
165 reads

Mobile App Debugging in 2023: Top 3 Tools

tldt arrow

Too Long; Didn't Read

Developers are settled on ELK, Sentry, and Jaeger. The ELK stack is megapopular. Sentry allows mobile developers to see when each error first appeared. Jaeger is an open-source distributed system written in Go. There are out-of-the-box integration SDKs in various languages.
featured image - Mobile App Debugging in 2023: Top 3 Tools
Shariy Ivan | Content marketer & Copywriter HackerNoon profile picture


Debugging mobile applications in production is a non-trivial task. When you have a microservice architecture, the problem is magnified. When choosing tools for mobile debugging in production, developers have two key requirements:


  1. It is essential to make a stack of universal tools with good documentation
  2. It is important to have a large community with an easy entrance: the teams are constantly growing, and they want to spend less time diving into the work


Most developers are settled on ELK, Sentry, and Jaeger. The ELK stack is megapopular. The majority of developers had at least heard something about Sentry. Jaeger is little known.


I hope that my review will be helpful for companies that are looking for low-cost mobile debugging tools for their productions.

Sentry. Real-time error tracking and aggregation

Mobile developers use Sentry as their primary bug-tracking tool with alerts to corporate chat. Sentry features:


  • Suitable for frontend, backend, and mobile applications
  • CI/CD integration. Ability to quickly understand which release caused problems
  • Sentry groups the same bugs
  • If an error occurs too often, Sentry increments the number of times that error occurred rather than saving each one - this saves space
  • Sentry allows mobile developers to see when each error first appeared
  • Sentry provides client libraries for almost all languages (most developers are interested in JS, PHP, and Go)
  • Sentry can be integrated with various applications (Jira, Slack, GitLab, etc.).


What makes it convenient is that developers can send a task to Jira directly from Sentry. When it's done, Jira marks the bug as solved, and if it happens again, Sentry tracks it again.

ELK. Combination of Elasticsearch, Logstash, and Kibana

Many developers use ELK for monolith software. This is where they keep track of application and balancer (nginx) logs. There they also write MySQL slow query logs. ELK includes:


  • Elasticsearch (ES). It is a NoSQL database with full-text search capability, allowing developers to store, search and analyze large amounts of data.
  • Logstash. It is a real-time tool for collecting, converting, and storing events from files, databases, logs, and other sources in a common repository. Logstash allows developers to modify the obtained data using filters: break a string into fields, enrich it, aggregate several strings, convert it into JSON documents, etc.
  • Kibana. It is a UI client for Elasticsearch to interact with data stored in ES indexes. Kibana's web interface allows developers to quickly create and share dynamic dashboards, including tables, graphs, and charts that reflect changes in ES queries in real-time.


Kibana often helps developers understand what caused the error or is working incorrectly because it contains logs of a business nature: a customer made an appointment, a dealer renewed a subscription, an auction was completed, etc. Here developers also write all the stdout, and in case of an application crashes, they can always see the reasons.

Jaeger. Allows for tracking trace between services


Many developers started to use Jeager when working on microservices. It's an open-source distributed tracking system written in Go. Jaeger data is compatible with the OpenTracing specification, which defines what collected traces will look like. There are out-of-the-box integration SDKs in various languages for quick input.


A trace unit (span in OpenTracing terminology) represents an action: a file read, a logical operation, a request to a service, or a database. A span has a name, a start time, and a duration and may contain tags and logs.


Jaeger consists of several components:


  • Jaeger client. These are libraries written in various programming languages that are responsible for creating spans.

  • Jaeger Agent. This network daemon listens to the spans received from the Jaeger client over UDP. It collects them in batches and then sends them to the Collector.

  • Jaeger Collector. It receives traces from the Jaeger Agent and performs checks and conversions. It then sends them to storage.

  • Storage. Jaeger supports various repositories that hold spans and traces for later retrieval. Supported storages are In-Memory, Cassandra, and Elasticsearch.

  • Jaeger Query. It is responsible for retrieving traces from the Jaeger repository server side and making them available to the Jaeger UI.

  • Jaeger UI. It is an application written in React. It allows developers to visualize traces and analyze them, which is helpful for debugging system problems. It filters traces by service, operation type, tags, time range, and duration.


Jaeger features:


  • Error search
  • Search for long network requests: both to internal and external services
  • Search for long operations, which need to be optimized
  • Developers can visually trace the whole path of the request from service to service


It is important to add an appropriate error tag when an error occurs. Then Jaeger UI will correctly highlight the span with it. Also, developers can add some critical information to tags, for example, user ID, for further filtering. And in the span log, write auxiliary information, for example, error text.


The disadvantage of Jaeger is that developers need to modify application code by adding spans when required.


I also recommend you reading: