Skip to main content

PrometheusMetrics

Struct PrometheusMetrics 

Source
pub struct PrometheusMetrics { /* private fields */ }
Expand description

A ReconcileObserver that exports Prometheus metrics. Requires the prometheus feature.

The metrics, each prefixed with the namespace given to new, are:

  • <namespace>_reconciliations_total{controller, phase, outcome}: count of reconciliation passes. An outcome of failed is the signal to alert on. waiting is normal while a resource converges.
  • <namespace>_reconciliation_duration_seconds{controller, phase}: histogram of time spent in each pass. Reconcilers that wait by requeueing, rather than by blocking, return promptly, so this measures work done rather than time to converge.
  • <namespace>_reconciliation_steps_total{controller, step, outcome}: count of steps. Since a step that an error propagates out of is reported as abandoned, as is one in a pass that was cancelled, abandoned locates where passes stop, but is not itself a failure signal.
  • <namespace>_reconciliation_step_duration_seconds{controller, step}: histogram of time spent in each step.

Label values are the controller name, Phase::as_str, Outcome::as_str, and the step name.

This is a Collector, so it must be registered with a registry to be exported, and then shared by every controller that reports to it:

let metrics = k8s_controller::PrometheusMetrics::new("my_operator")?;
let registry = prometheus::Registry::new();
registry.register(Box::new(metrics.clone()))?;
let observer: Arc<dyn k8s_controller::ReconcileObserver> = Arc::new(metrics);
// pass `Arc::clone(&observer)` to each `Controller::with_observer`

Implementations§

Source§

impl PrometheusMetrics

Source

pub const DEFAULT_BUCKETS: &[f64]

The default histogram buckets, in seconds.

Source

pub fn new(namespace: &str) -> Result<Self, Error>

Creates the metrics, with names prefixed by namespace (which may be empty, for no prefix) and histograms using DEFAULT_BUCKETS.

Source

pub fn with_buckets(namespace: &str, buckets: Vec<f64>) -> Result<Self, Error>

Creates the metrics, with names prefixed by namespace (which may be empty, for no prefix) and histograms using the given buckets, in seconds.

Trait Implementations§

Source§

impl Clone for PrometheusMetrics

Source§

fn clone(&self) -> PrometheusMetrics

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Collector for PrometheusMetrics

Source§

fn desc(&self) -> Vec<&Desc>

Return descriptors for metrics.
Source§

fn collect(&self) -> Vec<MetricFamily>

Collect metrics.
Source§

impl Debug for PrometheusMetrics

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ReconcileObserver for PrometheusMetrics

Source§

fn reconciled(&self, record: &ReconcileRecord<'_>)

Called when a reconciliation pass ends, including when it is cancelled.
Source§

fn step_finished(&self, record: &StepRecord<'_>)

Called when a Step is finished or dropped.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ServiceExt for T

Source§

fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>
where Self: Sized,

Apply a transformation to the response body. Read more
Source§

fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using HTTP status codes. Read more
Source§

fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using gRPC headers. Read more
Source§

fn follow_redirects(self) -> FollowRedirect<Self>
where Self: Sized,

Follow redirect resposes using the Standard policy. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more