The VMServiceScrape
CRD allows to define a dynamic set of services for monitoring. Services
and scraping configurations can be matched via label selections. This allows an organization to introduce conventions
for how metrics should be exposed. Following these conventions new services will be discovered automatically without
need to reconfigure.
VMServiceScrape
object generates part of VMAgent configuration with
kubernetes service discovery targets by corresponding Service
.
It has various options for scraping configuration of target (with basic auth,tls access, by specific port name etc.).
Monitoring configuration based on discoveryRole
setting. By default, endpoints
is used to get objects from kubernetes api.
It’s also possible to use discoveryRole: service
or discoveryRole: endpointslices
.
Endpoints
objects are essentially lists of IP addresses.
Typically, Endpoints
objects are populated by Service
object. Service
object discovers Pod
s by a label
selector and adds those to the Endpoints
object.
A Service
may expose one or more service ports backed by a list of one or multiple endpoints pointing to
specific Pod
s. The same reflected in the respective Endpoints
object as well.
The VMServiceScrape
object discovers Endpoints
objects and configures VMAgent to monitor Pod
s.
The Endpoints
section of the VMServiceScrapeSpec
is used to configure which Endpoints
ports should be scraped.
For advanced use cases, one may want to monitor ports of backing Pod
s, which are not a part of the service endpoints.
Therefore, when specifying an endpoint in the endpoints
section, they are strictly used.
Note: endpoints
(lowercase) is the field in the VMServiceScrape
CRD, while Endpoints
(capitalized) is the Kubernetes object kind.
Both VMServiceScrape
and discovered targets may belong to any namespace. It is important for cross-namespace monitoring
use cases, e.g. for meta-monitoring. Using the serviceScrapeSelector
of the VMAgentSpec
one can restrict the namespaces from which VMServiceScrape
s are selected from by the respective VMAgent server.
Using the namespaceSelector
of the VMServiceScrape
one can restrict the namespaces from which Endpoints
can be
discovered from. To discover targets in all namespaces the namespaceSelector
has to be empty:
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMServiceScrape
metadata:
name: example-service-scrape
spec:
namespaceSelector: {}
# ...
More information about selectors you can find in this doc.
Specification #
You can see the full actual specification of the VMServiceScrape
resource in
the API docs -> VMServiceScrape.
Also, you can check out the examples section.
Migration from Prometheus #
The VMServiceScrape
CRD from VictoriaMetrics Operator is a drop-in replacement
for the Prometheus ServiceMonitor
from prometheus-operator.
More details about migration from prometheus-operator you can read in this doc.
Examples #
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMServiceScrape
metadata:
name: example-app
labels:
team: frontend
spec:
selector:
matchLabels:
app: example-app
endpoints:
- port: web