← Learning center

How do I sort and filter sample data?

AppSignal is designed to help you quickly get to the root cause of errors and performance issues.

This guide will familiarise you with AppSignal's filtering and sorting functionality, so you can quickly navigate to issues and samples with ease.

This article will help you to:

Add tags to performance and error samples

Tags are a great way to add additional context to performance and error samples. You could, for example, create tags containing user ids or other important logic like organization ids or order ids, to help you quickly access sample data relevant to specific contexts, like:

  • All samples for a specific user
  • All samples for a specific organization
  • All samples for a specific order

You can set tags wherever the current transaction or span is accessible. We recommend calling a tag before your application code runs in a request, such as a callback.

Let's imagine we have an e-commerce application that handles payments. We want to add tags to user_id and stripe_customer_id fields in samples to help us better filter issues. Below are examples of how to do this depending on which language you use:

Ruby

Use the Appsignal.tag_request helper method:

ruby
before_action do Appsignal.tag_request( :user_id => current_user.id, :stripe_customer_id => stripe_customer_id, ) end
ruby
before_action do Appsignal.tag_request( :user_id => current_user.id, :stripe_customer_id => stripe_customer_id, ) end

Elixir

Use the Appsignal.Span.set_sample_data helper function:

elixir
Appsignal.Span.set_sample_data( Appsignal.Tracer.root_span, "tags", %{ locale: "en", user_id: user_id, stripe_customer_id: stripe_customer_id, } )
elixir
Appsignal.Span.set_sample_data( Appsignal.Tracer.root_span, "tags", %{ locale: "en", user_id: user_id, stripe_customer_id: stripe_customer_id, } )

Node.js

Use the imported setTag helper function:

javascript
import { setTag } from "@appsignal/nodejs"; setTag("user_id", user_id); setTag("stripe_customer_id", stripe_customer_id);
javascript
import { setTag } from "@appsignal/nodejs"; setTag("user_id", user_id); setTag("stripe_customer_id", stripe_customer_id);

Python

Use the set_tag helper method:

python
from appsignal import set_tag set_tag("user_id", user_id) set_tag("stripe_customer_id", stripe_customer_id)
python
from appsignal import set_tag set_tag("user_id", user_id) set_tag("stripe_customer_id", stripe_customer_id)

Once that's configured, you'll see the following data when viewing error or performance samples in AppSignal:

Screenshot showing user_id and strip_customer_id tags

You can then use those tags to filter and sort sample data in AppSignal.

You can learn more about tagging by reading our Adding tags to a request documentation.

Sort and filter issue lists

By default, AppSignal offers six filterable variables for error and performance samples:

  • Namespace: The namespace where the incident occurred, for example, web, frontend, backend, or a custom namespace name.
  • Status: The status of an issue, which can have one of the following values:
    • Open
    • Work in progress
    • Closed
  • Severity: The severity of the issue, in order from most to least critical:
    • Critical
    • High
    • Low
    • Informational
    • No severity set
  • Assignee: The team member assigned to an issue.
  • Action name: The name of the action where an issue occurred.
  • Deployment: Filter issues to a specific deployment.
Screenshot showing example columns for performance issues

You can use these filters to search and filter issues in the Performance and Errors Issue lists.

Performance issue list columns

Issues can also be sorted in ascending or descending order alphabetically or numerically by clicking on the relevant column:

Column nameDescription
Action nameThe name of the endpoint where the performance issue occurred, for example, the controller/endpoint or background job name.
StatusThe status of a performance issue.
MeanThe mean of the value of all occurrences of this issue. For example, the mean response time for a slow performance issue.
ThroughputThe throughput of an application is the total number of requests sent through an action/job in a certain time frame.
Sorting by throughput can help you target performance issues in the areas of your application that receive the most traffic.
ImpactThe impact of an action on an application depends on its frequency and duration relative to other actions. When one action takes longer or occurs more frequently its impact increases.

You can use this metric to help understand and prioritize which issues are having the greatest impact on your application's performance.

For example:
  • Action A: 1000 times, average duration 0.5 seconds, total duration 500 seconds.
  • Action B: 500 times, average duration 3 seconds, total duration 1500 seconds.

  • Total combined duration: 2000 seconds.
  • Action A's impact: 25% (500/2000).
  • Action B's impact: 75% (1500/2000).
  • AssigneesThe team members assigned to an issue.

    Error issue list columns

    ColumnDescription
    Action and error typeThe action name and error type of an issue, for example: ActionName#NoMethodError
    StatusThe status of an error issue.
    In deployThe amount of times an error has occurred in the latest deployment.
    TotalTotal number of error occurrences.
    LastThe datetime of the most recent error occurrence.
    AssigneesThe team members assigned to an issue.

    Filter and sort samples

    When viewing an error or performance issue, you can filter samples of other occurrences for the same issue. The attributes that can be filtered will vary depending on what custom data tags you track with AppSignal. Clicking on an attribute value will automatically apply a filter to the overview.

    Samples can be sorted in ascending or descending order by clicking on the relevant column:

    Performance issue

    (This ignores any custom data tags your application tracks.)

    ColumnSorted by
    TimeThe datetime of the sample.
    DurationThe amount of time the request took to execute.
    N+1The amount of N+1 queries detected in the sample.
    HostnameThe name of the host where the sample occurred.
    MethodThe HTTP method of the action where the issue occurred.
    Request_idThe ID of the request.
    Request_methodThe method of the request.

    Error issue

    (This ignores any custom data tags your application tracks.)

    ColumnSorted by
    TimeThe datetime of the sample.
    HostnameThe name of the host where the sample occurred.
    MethodThe HTTP method of the action where the issue occurred.
    PathThe path where the error occurred.
    Request_methodThe method of the request.
    RevisionThe revision where the error occurred (if revisions are configured).

    Filter saved samples

    When reviewing an issue's saved sample, you can navigate and filter other saved samples. By default, you can filter samples based on datetime. Revisions are also a great way to quickly filter samples to a specific deployment. If you've configured deploy markers, you will see them in the saved samples list.

    Samples can be filtered by using tag values in the Saved samples search bar, or by clicking on the filter icon in the "Tags for sample" table.

    Screenshot of error sample details

    Customize sample overviews

    To make it easier to filter error and performance samples, you can customize what attributes the issue sample table shows.

    Screenshot of ability to show and hide sample columns

    What attributes are available will depend on what data you send to AppSignal.

    To learn more about sending custom data via tags, we recommend reading our tagging documentation.

    Start your free trial

    Don’t let the bad bugs bite. Try AppSignal for free.

    AppSignal offers a 30-day free trial, no credit card is required. All features are available in all plans. Start monitoring your application in just a few clicks!