Prometheus#
Предупреждение
Чтобы собирать статистику, включите в нужных контекстах зону разделяемой памяти с помощью:
директивы
zoneв http_upstream или stream_upstream;директивы status_zone;
параметра
status_zoneв директиве resolver.
Пример конфигурации#
Три метрики для сбора статистики запросов к серверным зонам разделяемой памяти,
объединенные в шаблон custom и опубликованные по пути /p8s:
http {
prometheus_template custom {
'angie_http_server_zones_requests_total{zone="$1"}' $p8s_value
path=~^/http/server_zones/([^/]+)/requests/total$
type=counter;
'angie_http_server_zones_requests_processing{zone="$1"}' $p8s_value
path=~^/http/server_zones/([^/]+)/requests/processing$
type=gauge;
'angie_http_server_zones_requests_discarded{zone="$1"}' $p8s_value
path=~^/http/server_zones/([^/]+)/requests/discarded$
type=counter;
}
# ...
server {
listen 80;
location =/p8s {
prometheus custom;
}
# ...
}
}
Его использование:
http {
include prometheus_all.conf;
# ...
server {
listen 80;
location =/p8s {
prometheus all;
}
# ...
}
}
$ curl localhost/p8s
# Angie Prometheus template "all"
...
Директивы#
prometheus#
Указывает для контекста location шаблон-обработчик,
заданный директивой prometheus_template.
При запросе этот location вычисляет и возвращает метрики шаблона
в формате Prometheus.
location =/p8s {
prometheus custom;
}
$ curl localhost/p8s
# Angie Prometheus template "custom"
...
prometheus_template#
Определяет именованный шаблон метрик, собираемых и экспортируемых Angie, для использования с директивой prometheus.
Примечание
В состав Angie также входит готовый шаблон all, куда включен набор наиболее общеупотребимых метрик.
Может содержать произвольное число определений метрик,
каждая из которых имеет следующую структуру:
<имя_метрики> <переменная> [path=<строка_сопоставления>] [type=<тип>] [help=<справка>].
| Задает имя метрики,
под которым она будет добавлена в формате Prometheus в ответ на запрос.
Может содержать необязательную часть с метками ( http_requests_total{method="$1",code="$2"}
В значениях меток можно использовать переменные Angie; если строка_сопоставления задана регулярным выражением, то можно также использовать определенные в этом выражении группы захвата. Такие переменные и группы вычисляются при получении значения метрики, которое задает переменная. |
| Задает имя переменной, которая будет вычислена и добавлена
как значение метрики в ответ на запрос.
Если переменной нет или результат вычисления пуст ( |
Метрика вычисляется со значением, которое задает переменная; при успехе вычисления метрика добавляется в ответ, например:
'angie_time{version="$angie_version"}' $msec;
$ curl localhost/p8s
angie_time{version="1.12.1"} 1695119820.562
| Сопоставляется со всеми конечными путями метрик в поддереве /status API-интерфейса Angie, позволяя добавить в ответ сразу несколько экземпляров метрики. |
При сопоставлении пути берутся с начальной косой чертой, но без конечной,
например /angie/generation; при этом регистр символов не учитывается.
Есть два способа сопоставления:
| Проверяется посимвольным сравнением. |
| Проверяется при помощи библиотеки PCRE; может задавать группы захвата для использования в метках поля имя метрики. |
Если строка_сопоставления соответствует какому-либо пути,
то значение метрики Angie по нему заносится в переменную
$p8s_value,
которую при заданном path= можно использовать в поле переменная.
Если строка_сопоставления заканчивается конечной косой чертой, значением метрики будет количество элементов соответствующего списка или объекта. Например:
'angie_http_server_zones_count' $p8s_value
path=/http/server_zones/;
В случае регулярного выражения совпадающих путей может быть несколько; метрика добавляется в ответ для каждого совпадения. В сочетании с группами захвата это позволяет получить ряд метрик с одним именем и разными метками, например:
'angie_slabs_slots_free{zone="$1",size="$2"}' $p8s_value
path=~^/slabs/([^/]+)/slots/([^/]+)/free$;
Это определение добавляет метрики для всех зон и всех размеров, которые есть сейчас в конфигурации:
angie_slabs_slots_free{zone="one",size="8"} 502
angie_slabs_slots_free{zone="one",size="16"} 249
angie_slabs_slots_free{zone="one",size="32"} 122
angie_slabs_slots_free{zone="one",size="128"} 22
angie_slabs_slots_free{zone="one",size="512"} 4
angie_slabs_slots_free{zone="two",size="8"} 311
...
Если совпадений нет (при любом способе сопоставления), то метрика не добавляется.
Примечание
Параметр path= доступен только
при сборке Angie с модулем API.
| Задают соответственно тип и справочную строку метрики в формате Prometheus, которые добавляются с ней в ответ без изменений и проверок. |
Встроенные переменные#
В модуле Если строка_сопоставления метрики, заданной в prometheus_template,
соответствует какому-либо пути,
то значение метрики Angie, находящееся по этому пути,
заносится в переменную Значения метрик Angie, заносимые в переменную Если у метрики Angie логическое значение, то есть http_prometheus есть встроенная переменная,
получающая значение при сопоставлении путей метрик из раздела
/status
API-интерфейса Angie
с параметром строка_сопоставления метрик, заданных директивой
prometheus_template.$p8s_value#$p8s_value.
Она предназначена для использования в поле переменная в определениях метрик,
которые вычисляются на основе параметра path=.$p8s_value,
не всегда отвечают потребностям формата Prometheus.
Тогда можно воспользоваться директивой map,
например для преобразования строк в числа:map $p8s_value $ups_state_n {
up 0;
unavailable 1;
down 2;
default 3;
}
prometheus_template main {
'angie_http_upstreams_state{upstream="$1",peer="$2"}' $ups_state_n
path=~^/http/upstreams/([^/]+)/peers/([^/]+)/state$;
}
true или false,
переменная получает значение "1" или "0" соответственно;
если значение метрики — null, то переменная будет равна "(null)".
Для дат используется целочисленный формат эпохи UNIX.