Is there a predefined Telemetry event in Phoenix for a request?

I’m trying to setup pushing telemetry into Application Insights and don’t seem to see a default metric for http requests.

Am I missing something?

Emitted here:

All events documented here:

2 Likes

Jose,

In the telemetry module of my phoenix project I’m putting the following in the metrics function:

summary("phoenix.endpoint.stop.duration",
  tag_values: &Monitoring.log_http_request/4,
  unit: {:native, :millisecond}
),

And my log_http_request function looks like:

def log_http_request(_event, %{duration: duration}, %{conn: conn} = metadata, _config) do
    start_time = System.system_time() - duration
    response_code = Plug.Conn.Status.code(conn.status)
    success? = response_code >= 200 && response_code < 300

    Logger.info("In log_http_request.  Start time #{start_time}, Response code: #{response_code}, Success: #{success?}.")
  end

But it doesn’t appear to get called when an endpoint is visited.

Do I need to do a :telemetry.attach on [:phoenix, :endpoint, :stop]?

Never mind, got it figured out.

Good to hear! Would you mind sharing your solution?

5 Likes

Yeah, I was completely reading the docs wrong.

summary("phoenix.endpoint.stop.duration",
  tag_values: &Monitoring.log_http_request/4,
  unit: {:native, :millisecond}
),

The tag_values fun isn’t what gets triggered for event processing like I thought it was. That’s used to transform the data in the event to something else it looks like.

What I actually needed to do was subscribe to the event like:

:telemetry.attach("log_request", [:phoenix, :endpoint, :stop], &Monitoring.log_http_request/4, :no_config)

I also needed to make sure I was doing it in a place that was actually called. I was placing this in Telemetry.metrics, but that function was never called so I wasn’t actually subscribing to the event.

2 Likes

If you need any examples of leveraging the Phoenix Telemetry metrics along with custom tags, be sure to check out the PromEx Phoenix plugin that I wrote: prom_ex/phoenix.ex at master · akoutmos/prom_ex · GitHub

Might help out with some inspiration for your particular use case :slight_smile:.

1 Like

Thank you. I’m going to dig into this as soon as my workday is over.