Feature Idea: Elixir / Phoenix Agent

I want this too! I know my organization is heavily invested in Elixir, and we will do whatever we can to help.

1 Like

My department uses both Elixir and New Relic. This would be really helpful for our team!

Hey @fredrik_bjork, @ryan.stubblefield and @joe.grossberg! Thanks for adding your use cases to this thread. I will pas your input along to our product team. :thumbsup:

Be sure to also give an official vote at the top of this thread as a way of giving your +1 and adding to the growing number!

Thanks! and check back frequently for future updates!

+1
We’re using NR to monitor our PHP/Java applications, as well as Mobile apps, Memcached, Redis and the fact that we’re looking for alternatives for NR for our Elixir apps is a really bad idea.

We would love to have our apps monitoring tool unified, a NR agent for Elixir/Phoenix would really help.

Thanks @bghatasheh. In addition to your interest, it would be great to get any feedback you have about what you need in this particular agent would be great. The more specific details you can share about your use case, the more useful this is for our engineers. :+1:

Thanks @hross , you can check one of our applications we’re monitoring using NR here https://rpm.newrelic.com/accounts/76938/applications/34801092

This is using a 3rd party plugin, which is a nightmare to compile and integrate, and doesn’t really give the insights we need, and most importantly, constantly crashing.
Currently this integration is missing:

  • Insights visibility
  • Service Map, we can’t link this application to our other applications
  • Code traces, there are no transaction traces or breakdowns of what’s actually taking time
  • No proper DB tracking, no queries
  • No external transaction tracking
  • Doesn’t work outside the scope of a web transaction, and needs explicit passing for conn struct to Ecto Repo calls.

Phoenix framework already has instrumentation built in within, Ecto repos can easily leverage log function to instrument queries.

Even a minimal agent, with minimal features is better than any 3rd party integration out there.

1 Like

Hi, can we get an update on this?

Is this feature request being discussed?

This feature/ addition is indeed being discussed, @tomp_r! Thanks for checking in—I don’t have any new news at this time, but I will pass your interest along to the people looking into this. Please also vote above! Thanks! :blush:

Thank you for the update @Linds! Yes, I already voted.

The organization in which I work is a committed NewRelic user, and we value the consistency and synergies that come from using the same tooling and reporting across the board.
Having an official Elixir and Phoenix agent would definitely be a welcome addition.

1 Like

Hey @tomp_r - thanks for voting and checking in. If you have any particular feedback about how or what you would want instrumented in this agent, that would be very helpful to our engineers.

Best,
Holly

Hi, sure.

I would suggest to replicate the functionality of the Ruby on Rails agent.

A lot of Elixir and Phoenix developers come from a Ruby and Rails background or, at least, in the Ruby community we’ve seen a very strong trend of developers enthusiastically diving into Elixir and finding in Phoenix a more performant alternative to Rails.
Since New Relic is the de-facto standard to monitor Rails applications, I would venture that most Rubyists writing Phoenix apps would see the benefits of using a familiar monitoring tool.

I’m not saying that currently there is a lack of monitoring options. Exometer has been a staple of Erlang for a while, and Pinterest has open-sourced their Elixir wrapper Elixometer. You can find guides and tutorials on how to push data to Prometheus or Statds, and in general the ecosystem is maturing.
And yet, if these solutions were people’s first choice then NewRelic wouldn’t be in business, would it?

Going back to what it would be nice to instrument, these main things come to mind:

  • the breakdown of how the time is spent inside each web request (e.g. CPU time, web external, DB I/O, queue time)
  • Transactions (slowest, most time consuming, ideally with the ability to drill-down into the breakdown)
  • DB instrumentation (Ecto library)
  • External Services (network I/O)
  • Exception and Error data
  • Some Erlang VM stats

I understand why this can be a bit of a challenge, since in Ruby it’s possible to open any class and auto-magically refine and instrument any method, whereas Elixir and Erlang are a bit of a different beast. At least, Phoenix has an instrumentation API.

Another thing to consider is that while Elixir and Erlang support NIFs (Natively Implemented Functions, in C) just like Ruby has native extensions and FFI, this is often a sub-optimal choice.
In a few words, the Erlang runtime is built on the idea of non-blocking parallel processes and easy crash recovery, and interacting with C extensions is considered an unsafe operation as it could potentially block or crash the VM.
As a consequence, ideally, instead of a NIF agent built with your C SDK it would be better to have something written in Erlang or Elixir. Such an agent could integrate with the running VM as standard OTP application.

I hope that my suggestions make sense!
Cheers,
Tom

4 Likes

Thanks to much @tomp_r! That level of detail is really fantastic.

It will be very great to have official support for this :heart_eyes:

Thanks @tony.han - glad to record your interest in this feature. Can you share any more detail about what you are looking for from the agent? The more specifics you can share, the more our engineering team can understand what you’re looking for.

I tried this https://github.com/TheRealReal/new-relixir with a new Phoenix App tonight
it works fine, expect for a small bug with rebar3, I had to unlock a dependency and use my fork…
https://github.com/mathieujobin/new-relixir

one annoyance, reports shows as python

I tried switching the string here to erlang

but it stopped working

maybe the language needs to be in a supported list of languages?

“New Relixir” that is great :blush:
Thanks for sharing, @mathieu_vn! Since this isn’t officially supported by New Relic, I don’t have any insight on why this stopped working for you. If you figure it out, please let us know!

Bump! I also voted to request an official agent. Our engineering team is beginning the process of migrating from Ruby to Elixir – we would love to continue using NewRelic for our instrumentation, but if we aren’t able to do this then we’ll have to start looking for another provider.

It’s great that the community has provided some of their own work – new-relixir, discorelic, etc. – but community solutions often don’t have the same commitment to maintenance and fixes going forward that official agents do. We’d prefer the stability of an official Elixir agent, even if this only means that NewRelic sanctions one of the existing agents and commits some developer time to maintaining that project.

Up at the top of this thread it says “We take feature ideas seriously and our product managers review every one when plotting their roadmaps.” And you’ve mentioned a few times that it’s “being discussed,” but discussion is not necessarily prioritization. I’m a little concerned that, after almost a year of voting, with 100% of voters saying they want this (and with many technical details in the thread from users like tomp_r, bghatasheh and keith.gaddis), that it still doesn’t seem to have made its way onto anybody’s roadmap. Can you give us a more detailed update on the status of this feature? How seriously is it being taken? Is is on the roadmap for the rest of 2017? What about 2018? Is it on a roadmap at all? Is this something that anyone at NewRelic perceives as a priority?

Thanks!

2 Likes

We are using Elixir and Phoenix running on Cowboy. Please add support for Elixir!

We are also using Elixir with Phoenix :wink: Please add support for Elixir!

1 Like

We’re using Elixir with Phoenix. Please add support! :smiley:

1 Like