ScrapeConfig CRD
Starting with prometheus-operator v0.65.x, one can use the ScrapeConfig CRD to scrape targets external to the Kubernetes cluster or create scrape configurations that are not possible with the higher level ServiceMonitor/Probe/PodMonitor resources.
Prerequisites
prometheus-operator>v0.65.1ScrapeConfigCRD installed in the cluster. Make sure to (re)start the operator after the CRD has been created/updated.
Configure Prometheus or PrometheusAgent to select ScrapeConfigs
Both the Prometheus and PrometheusAgent CRD have a scrapeConfigSelector field. This field needs to be set to a list of labels to match ScrapeConfigs:
spec: scrapeConfigSelector: matchLabels: prometheus: system-monitoring-prometheus With this example, all ScrapeConfig having the prometheus label set to system-monitoring-prometheus will be used to generate scrape configurations.
Use ScrapeConfig to scrape an external target
ScrapeConfig currently supports a limited set of service discoveries:
static_configfile_sdhttp_sdkubernetes_sdconsul_sd
The following examples are basic and don’t cover all the supported service discovery mechanisms. The CRD is constantly evolving, adding new features and support for new Service Discoveries. Check the API documentation to see all supported fields.
If you have an interest in another service discovery mechanism or you see something missing in the implementation, please open an issue.
static_config
For example, to scrape the target located at http://prometheus.demo.do.prometheus.io:9090, use the following:
apiVersion: monitoring.coreos.com/v1alpha1 kind: ScrapeConfig metadata: name: static-config namespace: my-namespace labels: prometheus: system-monitoring-prometheus spec: staticConfigs: - labels: job: prometheus targets: - prometheus.demo.do.prometheus.io:9090 file_sd
To use file_sd, a file has to be mounted in the Prometheus or PrometheusAgent pods. The following configmap is a service discovery file:
apiVersion: v1 kind: ConfigMap metadata: name: scrape-file-sd-targets namespace: monitoring labels: prometheus: system-monitoring-prometheus data: targets.yaml: | - labels: job: node-demo targets: - node.demo.do.prometheus.io:9100 - labels: job: prometheus targets: - prometheus.demo.do.prometheus.io:9090 This ConfigMap will then need to be mounted in the Prometheus spec:
apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: your-prometheus namespace: my-namespace labels: prometheus: system-monitoring-prometheus spec: scrapeConfigSelector: matchLabels: prometheus: system-monitoring-prometheus configMaps: - scrape-file-sd-targets You can then use ScrapeConfig to reference that file and scrape the associated targets:
apiVersion: monitoring.coreos.com/v1alpha1 kind: ScrapeConfig metadata: name: file-sd namespace: my-namespace labels: prometheus: system-monitoring-prometheus app.kubernetes.io/name: scrape-config-example spec: fileSDConfigs: - files: - /etc/prometheus/configmaps/scrape-file-sd-targets/targets.yaml http_sd
http_sd uses an endpoint for data, unlike file_sd which uses a file, removing the need for a configmap. For instance:
apiVersion: monitoring.coreos.com/v1alpha1 kind: ScrapeConfig metadata: name: http-sd namespace: my-namespace labels: prometheus: system-monitoring-prometheus app.kubernetes.io/name: scrape-config-example spec: httpSDConfigs: - url: http://my-external-api/discovery refreshInterval: 15s