Set up telemetry and prometheus
authorhref <href@random.sh>
Wed, 30 Jan 2019 15:32:30 +0000 (16:32 +0100)
committerMark Felder <feld@FreeBSD.org>
Thu, 4 Apr 2019 16:30:43 +0000 (11:30 -0500)
config/config.exs
lib/pleroma/application.ex
lib/pleroma/repo.ex
lib/pleroma/web/endpoint.ex

index dccf7b2637c21d6fa7e7fb6b6c221e8b6f12039b..1e086f44ce190cb649c877606a46d50aea9a7f5f 100644 (file)
@@ -8,6 +8,10 @@ use Mix.Config
 # General application configuration
 config :pleroma, ecto_repos: [Pleroma.Repo]
 
+config :pleroma, Pleroma.Repo,
+  types: Pleroma.PostgresTypes,
+  loggers: [Pleroma.Repo.Instrumenter, Ecto.LogEntry]
+
 config :pleroma, Pleroma.Captcha,
   enabled: false,
   seconds_valid: 60,
@@ -87,6 +91,7 @@ websocket_config = [
 
 # Configures the endpoint
 config :pleroma, Pleroma.Web.Endpoint,
+  instrumenters: [Pleroma.Web.Endpoint.Instrumenter],
   url: [host: "localhost"],
   http: [
     dispatch: [
index 782d1d58997709635bb51099e8a6e6c982e869b4..03dcbab1af40b4952f4089df9137d4aa5e36edf4 100644 (file)
@@ -25,6 +25,7 @@ defmodule Pleroma.Application do
     import Cachex.Spec
 
     Pleroma.Config.DeprecationWarnings.warn()
+    setup_instrumenters()
 
     # Define workers and child supervisors to be supervised
     children =
@@ -140,6 +141,13 @@ defmodule Pleroma.Application do
       end
   end
 
+  defp setup_instrumenters() do
+    Pleroma.Web.Endpoint.MetricsExporter.setup()
+    Pleroma.Web.Endpoint.PipelineInstrumenter.setup()
+    Pleroma.Web.Endpoint.Instrumenter.setup()
+    Pleroma.Repo.Instrumenter.setup()
+  end
+
   if Mix.env() == :test do
     defp streamer_child, do: []
     defp chat_child, do: []
index 4af1bde566b4df98e299e87fbfb61a4b8613a426..aa5d427ae28401cccabfb82ab5734ff86d39aa71 100644 (file)
@@ -8,6 +8,10 @@ defmodule Pleroma.Repo do
     adapter: Ecto.Adapters.Postgres,
     migration_timestamps: [type: :naive_datetime_usec]
 
+  defmodule Instrumenter do
+    use Prometheus.EctoInstrumenter
+  end
+
   @doc """
   Dynamically loads the repository url from the
   DATABASE_URL environment variable.
index fa2d1cbe7f6034d592c0f28e3d49c61b615f8670..6d9528c862fd63a52456c4b2824c4b0053344c91 100644 (file)
@@ -70,6 +70,26 @@ defmodule Pleroma.Web.Endpoint do
     extra: "SameSite=Strict"
   )
 
+  # Note: the plug and its configuration is compile-time this can't be upstreamed yet
+  if proxies = Pleroma.Config.get([__MODULE__, :reverse_proxies]) do
+    plug(RemoteIp, proxies: proxies)
+  end
+
+  defmodule Instrumenter do
+    use Prometheus.PhoenixInstrumenter
+  end
+
+  defmodule PipelineInstrumenter do
+    use Prometheus.PlugPipelineInstrumenter
+  end
+
+  defmodule MetricsExporter do
+    use Prometheus.PlugExporter
+  end
+
+  plug(PipelineInstrumenter)
+  plug(MetricsExporter)
+
   plug(Pleroma.Web.Router)
 
   @doc """