Monitoring extensions
A monitoring extension connects OpenEverest instances to one monitoring technology, such as PMM, Prometheus or VictoriaMetrics. The OpenEverest core contains no monitoring backend: every monitoring technology is added by an extension, in the same way that every data technology is added by a provider.
The monitoring extension API was added after OpenEverest 2.0.0 Developer Preview 4 and is still evolving.
What an extension contains
A monitoring extension is a Helm chart with:
- a cluster-scoped
MonitoringClass, which names the technology, declares the parameters and authentication modes aMonitoringDestinationof that class accepts, and says how the class is fulfilled; - a controller that claims the class, checks every destination of the class (reachability, credentials, server version), and — for extension-managed classes — configures the collection for each instance.
Users then create MonitoringDestinations of the class and reference them from their instances. See Monitoring.
Provider-managed and extension-managed classes
Monitoring is a contract between three parties: the core, the provider of the instance and the monitoring extension.
- Provider-managed classes are fulfilled by the provider. The provider declares in
Provider.spec.monitoring.integrationswhich operator-native integrations it can render, for examplepmmwith a range of supported agent versions. When an instance sends to a destination of such a class, the provider configures its Operator to run the agent, using the agent image named by the class. The extension only checks destinations. - Extension-managed classes are fulfilled by the extension. The provider declares in
Provider.spec.monitoring.componentTypeswhat each component exposes — native metrics, metrics through an exporter, or none — and publishes the actual endpoints of each instance inInstance.status.monitoring.sources. The extension's controller turns them into the configuration of its backend, for example one PrometheusPodMonitorper component.
The core connects the two: for every instance entry it creates a MonitoringBinding, decides whether the provider and the class are compatible and in which mode, and reports the result on the binding and on the instance. Each condition has exactly one writer, and extensions never write Instance resources.
Build a monitoring extension
The provider-runtime/monitoring package of the openeverest repository contains the helpers an extension's controller uses to claim a class and to report the status of destinations and bindings. The existing extensions in the openeverest GitHub organization, such as monitoring-prometheus, are working examples.