<!-- review: finished -->

<a id="custom-metrics-config"></a>

# Настройка пользовательских метрик

Angie может собирать пользовательские числовые метрики в разделяемой памяти и
выводить их через [API статистики](https://angie.software//angie/docs/configuration/modules/http/http_api.md#metrics) по адресу
`/status/http/metric_zones/`. Это обеспечивает модуль
[Metric](https://angie.software//angie/docs/configuration/modules/http/http_metric.md#http-metric).

<a id="configuration-steps-1"></a>

## Шаги настройки

1. Создайте зону метрик в блоке `http`:
   - [metric_zone](https://angie.software//angie/docs/configuration/modules/http/http_metric.md#metric-zone) создает зону с одной метрикой.
   - [metric_complex_zone](https://angie.software//angie/docs/configuration/modules/http/http_metric.md#metric-complex-zone) создает зону с несколькими именованными метриками.
2. Обновляйте метрики при обработке запросов директивой [metric](https://angie.software//angie/docs/configuration/modules/http/http_metric.md#id5).
   Используйте пару `key=value` (оба — [комплексные значения](https://angie.software//angie/docs/configuration/configfile.md#syntax)),
   и выберите этап обновления параметром `on=` (`request`,
   `response` или `end`).
3. Откройте API через `location`:
   ```nginx
   location /status/ {
       api /status/http/metric_zones/;
   }
   ```

<a id="example"></a>

## Пример

Подсчет запросов по хостам и вывод метрик через API:

```nginx
http {
    metric_zone requests:128k count;

    server {
        listen 80;

        location / {
            metric requests $host=1;
        }

        location /status/ {
            api /status/http/metric_zones/;
        }
    }
}
```

<a id="notes"></a>

## Примечания

- При `expire=on` и переполнении памяти истекают самые давно неиспользуемые
  записи. При `expire=off` новые обновления отбрасываются, а счетчик
  `discarded` увеличивается.
- Если задан `discard_key`, метрики истекших записей агрегируются под этим
  ключом в API.
- Длина ключей и значений ограничена 255 байт; длинные ключи усекутся в API.
- Пустое значение трактуется как `0`, а непустая строка без числа в начале
  — как `1`.
