diff --git a/.changeset/export-admission-control-limit.md b/.changeset/export-admission-control-limit.md new file mode 100644 index 0000000000..0103cf64b9 --- /dev/null +++ b/.changeset/export-admission-control-limit.md @@ -0,0 +1,6 @@ +--- +'@core/electric-telemetry': patch +'@core/sync-service': patch +--- + +Export `electric.admission_control.acquire.limit` and `electric.admission_control.reject.limit` metrics so dashboards can plot fill percentage (`acquire.current / acquire.limit`) and over-limit pressure by `kind`. diff --git a/packages/electric-telemetry/lib/electric/telemetry/stack_telemetry.ex b/packages/electric-telemetry/lib/electric/telemetry/stack_telemetry.ex index 58679fe5c8..ef0d1dab77 100644 --- a/packages/electric-telemetry/lib/electric/telemetry/stack_telemetry.ex +++ b/packages/electric-telemetry/lib/electric/telemetry/stack_telemetry.ex @@ -114,7 +114,9 @@ defmodule ElectricTelemetry.StackTelemetry do last_value("electric.connection.consumers_ready.total"), last_value("electric.connection.consumers_ready.failed_to_recover"), last_value("electric.admission_control.acquire.current", tags: [:kind]), + last_value("electric.admission_control.acquire.limit", tags: [:kind]), sum("electric.admission_control.reject.count", tags: [:kind]), + last_value("electric.admission_control.reject.limit", tags: [:kind]), distribution("electric.shape_log_collector.transaction.affected_shape_count") | additional_metrics(telemetry_opts) ] diff --git a/packages/sync-service/lib/electric/admission_control.ex b/packages/sync-service/lib/electric/admission_control.ex index 907a03f6ad..63290690dc 100644 --- a/packages/sync-service/lib/electric/admission_control.ex +++ b/packages/sync-service/lib/electric/admission_control.ex @@ -91,13 +91,12 @@ defmodule Electric.AdmissionControl do # Emit telemetry event :telemetry.execute( [:electric, :admission_control, :reject], - %{count: 1}, + %{count: 1, limit: max_concurrent}, %{ stack_id: stack_id, reason: :overloaded, kind: kind, - current: current, - limit: max_concurrent + current: current } ) @@ -107,8 +106,8 @@ defmodule Electric.AdmissionControl do # Emit telemetry for current concurrency level :telemetry.execute( [:electric, :admission_control, :acquire], - %{count: 1, current: current}, - %{stack_id: stack_id, kind: kind, limit: max_concurrent} + %{count: 1, current: current, limit: max_concurrent}, + %{stack_id: stack_id, kind: kind} ) :ok diff --git a/packages/sync-service/test/electric/admission_control_test.exs b/packages/sync-service/test/electric/admission_control_test.exs index 05ab5de199..af2d6601aa 100644 --- a/packages/sync-service/test/electric/admission_control_test.exs +++ b/packages/sync-service/test/electric/admission_control_test.exs @@ -232,8 +232,8 @@ defmodule Electric.AdmissionControlTest do assert measurements.count == 1 assert measurements.current == 1 + assert measurements.limit == 10 assert metadata.kind == :initial - assert metadata.limit == 10 :telemetry.detach(handler_id) end @@ -278,10 +278,10 @@ defmodule Electric.AdmissionControlTest do %{stack_id: ^stack_id} = metadata} assert measurements.count == 1 + assert measurements.limit == 2 assert metadata.kind == :initial assert metadata.reason == :overloaded assert metadata.current == 3 - assert metadata.limit == 2 :telemetry.detach(handler_id) end