Custom Collectors
Sometimes it is not possible to directly instrument code, as it is not in your control. This requires you to proxy metrics from other systems.
To do so you need to create a custom collector, for example:
from prometheus_client.core import GaugeMetricFamily, CounterMetricFamily, REGISTRY
from prometheus_client.registry import Collector
class CustomCollector(Collector):
def collect(self):
yield GaugeMetricFamily('my_gauge', 'Help text', value=7)
c = CounterMetricFamily('my_counter_total', 'Help text', labels=['foo'])
c.add_metric(['bar'], 1.7)
c.add_metric(['baz'], 3.8)
yield c
REGISTRY.register(CustomCollector())
SummaryMetricFamily
, HistogramMetricFamily
and InfoMetricFamily
work similarly.
A collector may implement a describe
method which returns metrics in the same
format as collect
(though you don’t have to include the samples). This is
used to predetermine the names of time series a CollectorRegistry
exposes and
thus to detect collisions and duplicate registrations.
Usually custom collectors do not have to implement describe
. If describe
is
not implemented and the CollectorRegistry was created with auto_describe=True
(which is the case for the default registry) then collect
will be called at
registration time instead of describe
. If this could cause problems, either
implement a proper describe
, or if that’s not practical have describe
return an empty list.