peoj
I’m just starting out with Phoenix, thanks for your patience for the basic question that follows:
I want to publish the application start time as a metric.
Here’s what I have so far:
defmodule MyAppWeb.Telemetry do
use Supervisor
import Telemetry.Metrics
@application_start_time System.os_time(:second)
def start_link(arg) do
Supervisor.start_link(__MODULE__, arg, name: __MODULE__)
end
@impl true
def init(_arg) do
children = [
{TelemetryMetricsPrometheus, [metrics: MyAppWeb.Telemetry.metrics()]}
]
## Emit the application start time here
emit_process_start_time()
Supervisor.init(children, strategy: :one_for_one)
end
def metrics do
[
last_value("process.start.time.seconds")
]
end
def emit_process_start_time do
:telemetry.execute([:process, :start, :time], %{seconds: @application_start_time})
end
end
When I run the application, the metric is never published. When I manually execute MyAppWeb.Telemetry.emit_process_start_time() from iex, the metric is published.
I think my mistake is that in order for the metric to be exported it must be published after the Telemetry supervision tree has been started, but I’m uncertain of the best way of remedying that. The documentation suggests I should create my own metrics module, but for this simple task that seems a bit overkill. Indeed there may already be a metric that I can reuse that I’m not aware of!
Thanks for reading and for any help!
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #ai
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #elixirconf-eu
- #metaprogramming
- #hex











Showing Posts 1 to 2- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
hauleth
Well, the metric is fired, however it is fired way before the
TelemetryMetricsPrometheusstarted listening to it. What you want to do is to runemit_process_start_timeafter supervisor children are started. There are few ways to do so:start_phase/3:application/0inmix.exs:peoj
Thanks very much! I’ll give those a go.