Thus far you’ve had Prometheus find what to scrape using static configuration via
static_configs. This is fine for simple use cases,1 but having to manually keep your
prometheus.yml up to date as machines are added and removed would get
annoying, particularly if you were in a dynamic environment where new instances
might be brought up every minute. This chapter will show you how you can let
Prometheus know what to scrape.
You already know where all of your machines and services are, and how they are laid out. Service discovery (SD) enables you to provide that information to Prometheus from whichever database you store it in. Prometheus supports many common sources of service information, such as Consul, Amazon’s EC2, and Kubernetes out of the box. If your particular source isn’t already supported, you can use the file-based service discovery mechanism to hook it in. This could be by having your configuration management system, such as Ansible or Chef, write the list of machines and services they know about in the right format, or a script running regularly to pull it from whatever data source you use.
Knowing what your monitoring targets are, and thus what should be scraped, is only the first step. Labels are a key part of Prometheus (see Chapter 5), and assigning target labels to targets allows them to be grouped and organised in ways that make sense to you. Target labels allow you to aggregate targets performing the same role, that are in the same ...