Concepts
Data model
Prometheus хранит все данные как timeseries потоки timestamped значений пренадлежащих некоторой метрике и некоторому набору labeled dimensions
Кроме того он может генерировать временные timeseries из результатов запросов
Каждый временной ряд уникально идентифицируется по имени метрики и опциональных key-value пар, называемых labeles
Имя метрики может содержать буквы, цифры, подчеркивания и точки[a-zA-Z_:][a-zA-Z0-9_:]*
Изменение лейбла включает добавление или удаление лейблов, а это влечет создание нового временного ряда
На картинке ниже видно как после изменения лейбла vandud_label
, графиков стало два
Имя лейбла может содержать буквы, цифры и подчеркивание[a-zA-Z_][a-zA-Z0-9_]*
Начинающиеся с двойного подчеркивания лейблы считаются зарезервированными для внутреннего использования
Значение лейбла может содержать любые unicode символы
Metric types
-
Counter - Одиночный монотонно увеличивающийся счетчик
Не нужно использовать его для значений которые могут уменьшаться - Gauge - Числовое значение
- Histogram - Гистограмма предоставляет дополнительную информацию, например, сумму измерений и их количество
- Summary - Это расширенные гистограммы, в которых добавляются квантили за скользящий период
Jobs and instances
В терминах prometheus'a, эндпоинты, с которых он собирает метрики, называются instance
Инстансы могут иметь реплики, например для масштабируемости или доступности. Коллекция таких инстансов называется - job
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus' # <--- job
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
labels:
vandud_label: 'vandud2'
scrape_configs:
- job_name: 'test1'
static_configs:
- targets: ['localhost:9091', 'localhost:9092']
labels:
vandud_label: 'vandud2'
- job_name: 'test2'
static_configs:
- targets: ['localhost:9093']
labels:
vandud_label: 'vandud2'
- targets: ['localhost:9094']
labels:
vandud_label: 'vandud2'
Когда prometheus собирает данные, он вешает некоторые лейблы автоматически
- job - job name
- instance - 'host:port'
Если какой-то из этих лейблов уже есть на метрике, то поведение зависит от опции honor_labels
Для каждого инстанса хранятся такие таймсерии:
-
up{job="<job-name>", instance="<instance-id>"}
: 1 if the instance is healthy, i.e. reachable, or 0 if the scrape failed. -
scrape_duration_seconds{job="<job-name>", instance="<instance-id>"}
: duration of the scrape. -
scrape_samples_post_metric_relabeling{job="<job-name>", instance="<instance-id>"}
: the number of samples remaining after metric relabeling was applied. -
scrape_samples_scraped{job="<job-name>", instance="<instance-id>"}
: the number of samples the target exposed. -
scrape_series_added{job="<job-name>", instance="<instance-id>"}
: the approximate number of new series in this scrape. New in v2.10