Prometheus#

Предупреждение

Чтобы собирать статистику, включите в нужных контекстах зону разделяемой памяти с помощью:

Пример конфигурации#

Три метрики для сбора статистики запросов к серверным зонам разделяемой памяти, объединенные в шаблон 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#

Синтаксис

prometheus имя_шаблона;

По умолчанию

Контекст

location

Указывает для контекста location шаблон-обработчик, заданный директивой prometheus_template. При запросе этот location вычисляет и возвращает метрики шаблона в формате Prometheus.

location =/p8s {
    prometheus custom;
}
$ curl localhost/p8s

    # Angie Prometheus template "custom"
    ...

prometheus_template#

Синтаксис

prometheus_template имя_шаблона { ... }

По умолчанию

Контекст

http

Определяет именованный шаблон метрик, собираемых и экспортируемых 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

path=строка_сопоставления

Сопоставляется со всеми конечными путями метрик в поддереве /status API-интерфейса Angie, позволяя добавить в ответ сразу несколько экземпляров метрики.

При сопоставлении пути берутся с начальной косой чертой, но без конечной, например /angie/generation; при этом регистр символов не учитывается. Есть два способа сопоставления:

path=точное_соответствие

Проверяется посимвольным сравнением.

path=~регулярное_выражение

Проверяется при помощи библиотеки 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.

type=тип, help=справка

Задают соответственно тип и справочную строку метрики в формате Prometheus, которые добавляются с ней в ответ без изменений и проверок.

Встроенные переменные#

В модуле http_prometheus есть встроенная переменная, получающая значение при сопоставлении путей метрик из раздела /status API-интерфейса Angie с параметром строка_сопоставления метрик, заданных директивой prometheus_template.

$p8s_value#

Если строка_сопоставления метрики, заданной в prometheus_template, соответствует какому-либо пути, то значение метрики Angie, находящееся по этому пути, заносится в переменную $p8s_value. Она предназначена для использования в поле переменная в определениях метрик, которые вычисляются на основе параметра path=.

Значения метрик Angie, заносимые в переменную $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$;
}

Если у метрики Angie логическое значение, то есть true или false, переменная получает значение "1" или "0" соответственно; если значение метрики — null, то переменная будет равна "(null)". Для дат используется целочисленный формат эпохи UNIX.