RpcLoadBalancer.Metrics (rpc_load_balancer v0.3.1)

Copy Markdown View Source

Telemetry.Metrics definitions for RpcLoadBalancer.call/5, RpcLoadBalancer.cast/5, and node-selection events.

Consumers register these in their telemetry supervisor — e.g. through PrometheusTelemetry — to expose rpc_load_balancer.* series.

# in your_app/application.ex
children = [
  {PrometheusTelemetry,
   exporter: [enabled?: prod?()],
   metrics: [
     RpcLoadBalancer.Metrics.metrics(),
     PrometheusTelemetry.Metrics.VM.metrics()
   ]}
]

Emitted events

  • [:rpc_load_balancer, :rpc, :start]
  • [:rpc_load_balancer, :rpc, :stop] — measurement :duration (:native)
  • [:rpc_load_balancer, :rpc, :exception]
  • [:rpc_load_balancer, :node_selected]count: 1, members_count: pool_size
  • [:rpc_load_balancer, :node_selected, :empty]count: 1

Metadata

RPC events:

  • :type:call or :cast
  • :node — target node atom
  • :moduleinspect/1'd module name (string, low-cardinality)
  • :function — function name atom
  • :load_balancer — load balancer name atom, or nil for direct calls
  • :status (stop only) — :ok | :error | atom() mapped from ErrorMessage code

Selection events:

  • :algorithm — full algorithm module atom (e.g. Random, RoundRobin)
  • :load_balancer — load balancer name atom
  • :node — selected node atom (omitted on :empty event)

Prometheus series

  • rpc_load_balancer.rpc.request.start.count
  • rpc_load_balancer.rpc.request.stop.count
  • rpc_load_balancer.rpc.duration.milliseconds
  • rpc_load_balancer.node.selected.count
  • rpc_load_balancer.node.selected.empty.count
  • rpc_load_balancer.node.pool_size

Summary

Functions

metrics()

@spec metrics() :: [Telemetry.Metrics.t()]