# Мониторинг Webim Server через Prometheus

Начиная с версии **Webim** [10.6](https://webim.ru/webim-10-6/), в сервис была добавлена система мониторинга **Prometheus**. Эта система предоставляет подробные данные о состоянии сервера в режиме реального времени. **Prometheus** предоставляет большое количество собственных метрик, метрик отдельных библиотек, а также агрегирует метрики компонентов сервиса.

Для получения данных от **Prometheus** используется эндпоинт `/metrics`, доступный из **Admin Backend** и, при необходимости, **Chat Backend**.

!!! Note "Включение **Prometheus** в **Chat Backend**"
    Метрики **Prometheus** для **Chat Backend** по умолчанию выключены. Для их включения следует указать дополнительный параметр `--prometheus_port={port}` при запуске компонента, где `{port}` - номер порта, через который можно будет обратиться за метриками.

    Для **Admin Backend** порт `6001` является портом по умолчанию.

Обратиться к эндпоинту можно следующим образом:

```
curl http://127.0.0.1:6001/metrics
```

## Настройка Prometheus для получения метрик

Для того чтобы **Prometheus** принимал метрики **Admin Backend** и/или **Chat Backend**, Вам необходимо [установить](https://prometheus.io/download/) его на соответствующем сервере, после чего привести конфигурационный файл `prometheus.yml` к следующему виду:

```
global:
  scrape_interval:     15s

  external_labels:
    monitor: 'codelab-monitor'

scrape_configs:
  - job_name: 'prometheus'

    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:{Admin/Chat Backend port}']
```

Запустите **Prometheus**:

```
cd {path to prometheus directory}
./prometheus --config.file=prometheus.yml
```

Панель управления **Prometheus** по умолчанию доступна по адресу `127.0.0.1:9090`. Вы можете изменить параметры **nginx** для возможности доступа к панели управления извне локального сервера.

![Вид панели управления Prometheus](https://webim.ru/kb/img/devops/monitoring/prometheus/prometheus-control-panel.webp)

## Список кастомных метрик для Webim Server

Ниже приведён список метрик **Admin Backend**:

| Метрика                          | Тип       | Пример                                                                                                                                                                              | Метки                                                                                                                                                                                                                                                            | Описание                                                                   |
|----------------------------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|
| `uname`                          | `Info`    | `uname_info{machine="x86_64",nodename="482e03fd6382",release="5.15.0-88-generic",sysname="Linux",version="#98~20.04.1-Ubuntu SMP Mon Oct 9 16:43:45 UTC 2023"} 1.0`                 |                                                                                                                                                                                                                                                                  | Системная информация                                                       |
| `os`                             | `Info`    | `os_info{id="ubuntu",id_like="debian",name="Ubuntu",pretty_name="Ubuntu 18.04.6 LTS",version="18.04.6 (bionic)",version_codename="bionic",version_id="18.04"} 1.0`                  |                                                                                                                                                                                                                                                                  | Информация об операционной системе                                         |
| `build`                          | `Info`    | `build_info{branch="PRE_BUILD_BRANCH",build_at="PRE_VERSION_DATE",revision="PRE_BUILD_REVISION",short_version="10.7",version="10.7.9"} 1.0`                                         |                                                                                                                                                                                                                                                                  | Информация о сборке                                                        |
| `run`                            | `Info`    | `run_info{app_name="admin_backend",env="eta",host="172.195.0.2",port="6001",pretty_app_name="Admin Backend",started_at="2023-11-16 17:42:53 +0300",started_at_ts="1700145773"} 1.0` |                                                                                                                                                                                                                                                                  | Информация о запущенном инстансе сервиса                                   |
| `metric_settings`                | `Info`    | `metric_settings_info{set_account_name_label="true"} 1.0`                                                                                                                           |                                                                                                                                                                                                                                                                  | Информация о конфигурации метрик **Prometheus**                            |
| `initialized_accounts`           | `Counter` | `initialized_accounts_total{account_name="dev"} 1.0`                                                                                                                                | `account_name` - имя аккаунта **Webim**                                                                                                                                                                                                                          | Количество инициализированных аккаунтов в пуле БД                          |
| `failed_account_initializations` | `Counter` | `failed_account_initializations_total{account_name="dev"} 5.0`                                                                                                                      | `account_name` - имя аккаунта **Webim**<br>`reason` - причина неудачной инициализации аккаунта                                                                                                                                                                   | Количество аккаунтов в пуле БД, инициализация которых закончилась неудачно |
| `abac_policy_evaluations`        | `Summary` | `abac_policy_evaluations_seconds_count{account_name="dev",action_type="access",obj_type="feature",subj_roles="admin",subj_type="agent"} 15.0`                                       | `account_name` - имя аккаунта **Webim**<br>`subj_type` - тип субъекта ABAC<br>`subj_roles` - роли субъекта ABAC<br>`obj_type` - тип объекта ABAC, по отношению к которому применяется правило/политика<br>`action_type` - тип совершаемого над объектом действия | Время, затраченное на работу с правилом/политикой                          |
| `abac_acs_requests`              | `Summary` | `abac_acs_request_seconds_count{account_name="dev",request_type="can"} 244.0`                                                                                                       | `account_name` - имя аккаунта **Webim**<br>`request_type` - тип запроса к ABAC                                                                                                                                                                                   | Время выполнения сервисных запросов к ABAC                                 |
| `repository_caching_events`      | `Counter` | `repository_caching_events_total{account_name="<none>",cache_type="CachingRepository",event_type="miss",repository_type="AccountRepository"} 1.0`                                   | `account_name` - имя аккаунта **Webim**<br>`repository_type` - тип репозитория<br>`cache_type` - тип кэша<br>`event_type` - тип события                                                                                                                          | Количество кэшированных событий                                            |

Ниже приведён список метрик **Chat Backend**:

| Метрика                                     | Тип       | Пример                                                                                                                                                                            | Метки                                                                                                                                              | Описание                                                              |
|---------------------------------------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------|
| `uname`                                     | `Info`    | `uname_info{machine="x86_64",nodename="482e03fd6382",release="5.15.0-88-generic",sysname="Linux",version="#98~20.04.1-Ubuntu SMP Mon Oct 9 16:43:45 UTC 2023"} 1.0`               |                                                                                                                                                    | Системная информация                                                  |
| `os`                                        | `Info`    | `os_info{id="ubuntu",id_like="debian",name="Ubuntu",pretty_name="Ubuntu 18.04.6 LTS",version="18.04.6 (bionic)",version_codename="bionic",version_id="18.04"} 1.0`                |                                                                                                                                                    | Информация об операционной системе                                    |
| `build`                                     | `Info`    | `build_info{branch="PRE_BUILD_BRANCH",build_at="PRE_VERSION_DATE",revision="PRE_BUILD_REVISION",short_version="10.7",version="10.7.9"} 1.0`                                       |                                                                                                                                                    | Информация о сборке                                                   |
| `run`                                       | `Info`    | `run_info{app_name="chat_backend",env="eta",host="172.195.0.3",port="7001",pretty_app_name="Chat Backend",started_at="2023-11-16 17:42:53 +0300",started_at_ts="1700145773"} 1.0` |                                                                                                                                                    | Информация о запущенном инстансе сервиса                              |
| `timer_working_time_seconds`                | `Summary` |                                                                                                                                                                                   | `timer_name` - имя таймера                                                                                                                         | Суммарное время работы таймера                                        |
| `agent_full_updates`                        | `Counter` |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**<br>`agent_id` - идентификатор оператора<br>`mode` - режим                                                  | Количество операций `fullUpdate`                                      |
| `accounts`                                  | `Gauge`   |                                                                                                                                                                                   |                                                                                                                                                    | Количество аккаунтов **Webim** на сервере                             |
| `chats`                                     | `Gauge`   |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**                                                                                                            | Количество активных чатов                                             |
| `visit_sessions`                            | `Gauge`   |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**                                                                                                            | Количество сессий посетителей                                         |
| `alive_sessions`                            | `Gauge`   |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**                                                                                                            | Количество активных сессий посетителей                                |
| `visible_sessions`                          | `Gauge`   |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**                                                                                                            | Количество видимых сессий посетителей                                 |
| `visited_pages`                             | `Gauge`   |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**                                                                                                            | Количество посещённых посетителями страниц                            |
| `alive_visited_pages`                       | `Gauge`   |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**                                                                                                            | Количество страниц, посещённых активными посетителями                 |
| `agent_statuses`                            | `Gauge`   |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**<br>`status` - идентификатор статуса                                                                        | Количество операторов в статусе                                       |
| `bg_storager_objects_added`                 | `Counter` |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**<br>`storager_idx` - индекс хранилища<br>`object_class` - класс объекта                                     | Количество объектов, добавленных в хранилище                          |
| `bg_storager_objects_stored`                | `Counter` |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**<br>`storager_idx` - индекс хранилища<br>`object_class` - класс объекта                                     | Количество объектов, загруженных в хранилище                          |
| `bg_storager_objects_failed`                | `Gauge`   |                                                                                                                                                                                   | `account_name` - имя аккаунта **Webim**<br>`storager_idx` - индекс хранилища<br>`object_class` - класс объекта                                     | Количество объектов, загрузка которых в хранилище окончилась неудачно |
| `bg_storager_object_storing_seconds`        | `Summary` | `bg_storager_object_storing_seconds_count{object_class="Message"} 24`                                                                                                             | Время сохранения одного объекта в основное хранилище. Метрика с суффиксами `_sum` и `_count`. Метки: `object_class` (например, `Message`).         |                                                                       |
| `bg_storager_objects_storing_delay_seconds` | `Summary` | `bg_storager_objects_storing_delay_seconds_count{object_class="Message"} 24`                                                                                                      | Задержка между постановкой объекта в очередь на сохранение и фактическим началом сохранения. Также имеет `_sum` и `_count`. Метки: `object_class`. |                                                                       |

### Примеры выражений PromQL для мониторинга скорости сохранения объектов

Среднее время сохранения одного сообщения за последние 60 секунд:

```
increase(bg_storager_object_storing_seconds_sum{object_class="Message"}[60s])
/
increase(bg_storager_object_storing_seconds_count{object_class="Message"}[60s])
```

Средняя задержка до начала сохранения сообщения за последние 60 секунд:

```
increase(bg_storager_objects_storing_delay_seconds_sum{object_class="Message"}[60s])
/
increase(bg_storager_objects_storing_delay_seconds_count{object_class="Message"}[60s])
```

---

Источник: https://webim.ru/kb/devops/monitoring/prometheus.html
