Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Telemetria em codebases Elixir

Daniel
November 28, 2021

Telemetria em codebases Elixir

Em tempos onde desenvolvimento de software se torna cada vez ágil, reagir com velocidade ao que acontece em produção é fundamental. Dentro desse aspecto, ter mecanismos robustos de observabilidade tem um papel muito importante. Nessa palestra será apresentado um case de como foi construída a telemetria através de logs, métricas e traces no SumUp Bank, cujo backend é inteiramente construído com Elixir e como isso empodera o time a fazer deploys tranquilamente numa sexta-feira à tarde.

Daniel

November 28, 2021
Tweet

More Decks by Daniel

Other Decks in Programming

Transcript

  1. defmodule Module do require Logger def fun() do Logger.info("Something happened...")

    Logger.warn("Something suspicious happened...") Logger.error("Something bad happened...") end end
  2. defmodule MyBroadwayConsumer do use Broadway use LogRequestDecorator @impl Broadway @decorate

    trace_broadway_message_request_id() def handle_message(_processor, msg, _context) do ... end end
  3. metadata = %{} :telemetry.span( [:consumer, :events, :processing], metadata, fn ->

    result = # .. do the message processing .. {result, %{metadata: "Additional metadata"}} end )
  4. defmodule MyPrometheusTelemetrySupervisor use Supervisor import Telemetry.Metrics def init(_arg) do children

    = [ {TelemetryMetricsPrometheus, [port: 8123, metrics: metrics()] } ] Supervisor.init(children, strategy: :one_for_one) end end
  5. def metrics do [ counter("consumer.events.messages.total_handled", event_name: [:cons, :evts, :msgs, :total],

    measurement: :quantity, tags: [...] # keys to extract from metadata ) .. ] end
  6. {:opentelemetry_api, "~> 0.6.0"}, {:opentelemetry, "~> 0.6.0"}, {:opentelemetry_exporter, "~> 0.6.0"}, {:opentelemetry_ecto,

    "~> 0.1.0"}, {:opentelemetry_phoenix, "~> 0.2.0"}, {:opentelemetry_tesla, "~> 1.3.1-rc.1"}, {:open_telemetry_decorator, "~> 0.5.4"}