abstract class Crometheus::Metric
- Crometheus::Metric
- Reference
- Object
Overview
Metric is the base class for individual metrics types.
If you want to create your own custom metric types, you'll need to
subclass Metric.
#samples is the only abstract method you'll need to override; then
you will also need to implement your custom instrumentation.
You'll probably also want to define .type on your new class; it
should return a member of enum Type.
The following is a perfectly serviceable, if useless, metric type:
require "crometheus/metric"
class Randometric < Crometheus::Metric
def self.type
Type::Gauge
end
def samples(&block : Crometheus::Sample -> Nil)
yield Crometheus::Sample.new my_value_method
end
def my_value_method
rand(10).to_f64
end
end
See the source to the Counter, Gauge, Histogram, and Summary
classes for more detailed examples of how to subclass Metric.
Direct Known Subclasses
- Crometheus::Counter
- Crometheus::Gauge
- Crometheus::Histogram
- Crometheus::Metric::LabeledMetric(LabelType, MetricType)
- Crometheus::StandardExports
- Crometheus::Summary
Defined in:
crometheus/metric.crcrometheus/standard_exports.cr
Constructors
-
.new(name : Symbol, docstring : String, register_with : Crometheus::Registry | Nil = Crometheus.default_registry)
Initializes
#nameand#docstring, then passesselftoregister_with.registerif notnil.
Class Method Summary
-
.type
Returns the type of Prometheus metric this class represents.
-
.valid_label?(label : Symbol) : Bool
Called by
#initializeto validate that thisMetric's labels do not violate any of Prometheus' naming rules.
Instance Method Summary
-
#docstring : String
The docstring that appears in the
HELPline of the exported metric. -
#name : Symbol
The name of the metric.
-
#samples(&block : Sample -> Nil) : Nil
Yields one
Samplefor each time series this metric represents.
Macro Summary
-
[](*labels)
Convenience macro for generating a
LabeledMetricwith appropriate type parameters.
Constructor Detail
Initializes #name and #docstring, then passes self to
register_with.register if not nil.
Raises an ArgumentError if #name does not conform to
Prometheus' standards.
Class Method Detail
Returns the type of Prometheus metric this class represents.
Should be overridden to return the appropriate member of Type.
Called by Registry to determine metric type to report to
Prometheus.
Users generally do not need to call this.
Called by #initialize to validate that this Metric's labels
do not violate any of Prometheus' naming rules. Returns false
under any of these conditions:
- the label is
:jobor:instance - the label starts with
__ - the label is not alphanumeric with underscores
This generally does not need to be called manually.
Instance Method Detail
The name of the metric. This will be converted to a String and
exported to Prometheus.
Yields one Sample for each time series this metric represents.
Called by Registry to collect data for exposition.
Users generally do not need to call this.
Macro Detail
Convenience macro for generating a LabeledMetric with
appropriate type parameters.
Takes any number of Symbols as arguments, returning a
LabeledMetric class object with those arguments as label names.
Note that this macro causes type inference to fail when used with
class or instance variables; see Crometheus.alias for that use
case.
require "crometheus/gauge"
ages = Crometheus::Gauge[:first_name, last_name].new(:age, "Age of person")
ages[first_name: "Jane", last_name: "Doe"].set 32
ages[first_name: "Sally", last_name: "Generic"].set 49
# ages[first_name: "Jay", middle_initial: "R", last_name: "Hacker"].set 46
# => compiler error; label names don't match.