PryIn - Performance Monitoring built with and for Elixir and Phoenix

PryIn is the first performance monitoring platform built with and for Elixir and Phoenix - and it’s public now.

PryIn gives you performance metrics about your Phoenix controllers, channels and views, as well as Ecto queries.

With Elixir in mind from the beginning, PryIn also allows you to monitor your BEAM resources.
Get feedback about your application’s process count, scheduler usage, reductions count and a lot more.
See how much memory is used and for what (processes, binaries, atoms, …).

It’s also possible (and easy) to instrument custom functions and include them in your traces.
This allows monitoring the impact of outgoing API requests or Elasticseach queries for example.

To trace non-standard interactions like background jobs, custom tracing functionality is provided.
Just wrap those interactions in two function calls and get both aggregated and detailed data.

To reward early adopters, the free trial period is extended to 60 days for those signing up before July.
So hurry and check it out :slight_smile:

10 Likes
2 Likes

Update: pryin 1.1.0 now allows traces to include multiple processes.

We’re in Elixir and can’t be expected to care about just one process, right?

Check out the introductory blog post.

1 Like

@kseg Pretty late reply, I know, but PryIn lets you decide which percentile you want to look at now: https://blog.pryin.io/why-pryin-lets-you-choose-percentiles-and-what-alerts-have-to-do-with-that/

2 Likes

I’m seeing a lot of these message in one of our apps:

[debug] [PryIn] Interaction process down before finish was called

Anyone have any idea why this could be happening?

All traces in PryIn are associated with a process and whenever an Ecto query or something else you’re measuring happens, PryIn checks if it’s coming from that process.

At some point, a trace is considered finished and sent to the PryIn servers. For controller traces, for example, this is done right before the response is sent. For custom traces this would be when you call PryIn.CustomTrace.finish().

If the process dies before the associated trace is finished, those messages you are seeing are logged. It’s not really a problem, though. It just tells you that some data wasn’t sent to PryIn.

Are you getting those in your dev environment? They are logged with the debug level…

PryIn now supports GenServer instrumentation:

https://blog.pryin.io/monitoring-gen-servers-with-pryin/

2 Likes