# Описание эндпоинтов мониторинга

Возможности мониторинга работы сервиса **Webim** и его компонентов, а также рекомендации по настройке мониторинга описаны в [этой статье](https://webim.ru/kb/devops/monitoring/monitoring-setup-recommendations.html). Ниже будут изложены конкретные эндпоинты, которые можно использовать в рамках мониторинга.

!!! Note "О версии и составе эндпоинтов"
    Эта статья описывает **стандартный набор эндпоинтов для Webim 10.7**. В других версиях состав может отличаться.

Структура URL для проверки следующая:

```
https://{hostname}{endpoint}
```

где `{hostname}` — имя хоста, на котором размещается сервер **Webim**, вида `{account}.webim.ru` для облачных клиентов и `chat.mycompany.com` для hosted; `{endpoint}` — эндпоинт мониторинга.

Для проверки для большинства эндпоинтов будет необходимо авторизоваться с сервисным логином и паролем **Webim** ([базовая авторизация](https://webim.ru/kb/dev/api/basic-auth.html)).

## /metrics

!!! Warning "Внимание!"
    Эндпоинт был добавлен в версии **Webim** [10.6](https://webim.ru/webim-10-6/) и не будет работать на более ранних версиях продукта!

Эндпоинт используется для получения метрик **Prometheus** из **Chat Backend** и **Admin Backend**. Подробную информацию об этом эндпоинте можно прочитать в [соответствующей статье](https://webim.ru/kb/devops/monitoring/prometheus.html).

## /l/o/pingservice

Данный эндпоинт используется для проверки работоспособности **Chat Backend**. Для проверки будет необходимо осуществить авторизацию в **Agent Frontend**. Авторизация осуществляется при помощи токена авторизации, передаваемого в файле `cookie`.

Для данного эндпоинта также необходимы query-параметры `pinger-id` и `ts`.

Пример curl-запроса:

```
curl --request GET   --url 'https://companyname.webim.ru/l/o/pingservice?pinger-id=17595&ts=123'   --header 'Connection: keep-alive'   --header 'Cookie: WEBIM_LOCALE=ru; WEBIM_AUTH_TOKEN=SOME_TOKEN; WEBIM_ONLINE=true; WEBIM_URL=https%3A%2F%2Fcompanyname.webim.ru%2Fwebim; WEBIM_STATUS=online'
```

В случае успеха сервер возвращает ответ:

```
200 {'result': 'ok'}
```

В противном случае вернёт ошибку сервера (`5xx`). Если пропущены query-параметры, то вернёт ошибку с кодом `4хх`.

---

## /l/a/monitor

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url 'https://companyname.webim.ru/l/a/monitor?='   --header 'Authorization: Basic S0me7eX7'
```

Пример ответа:

```
{
  "mainInfo": 
  {
    "env": "wmtest107", 
    "port": 8248, 
    "multinodeMode": "", 
    "nodeName": "", 
    "startTs": 1759500493.7488275, 
    "startTime": "03-10-2025 17:08:13", 
    "version": "10.7.134", 
    "osName": "Ubuntu", 
    "osVersion": "20.04", 
    "ubuntuVersion": "20.04", 
    "branch": "remotes/webim-server/release-10.7", 
    "revision": "xxx", 
    "tag": "remotes/webim-server/release-10.7", 
    "avgNTries": 0.0, 
    "n": 2, 
    "storingEnabled": true
  }, 
  "host": "wmtest107.webim.ru"
}
```

Сервер возвращает ответ, содержащий следующие параметры:

| Параметр         | Тип       | Пример                              | Описание                                                                    |
|------------------|-----------|-------------------------------------|-----------------------------------------------------------------------------|
| `env`            | `String`  | `wmtest107`                         | Окружение (environment) **Webim**                                           |
| `port`           | `Integer` | `8248`                              | Номер порта                                                                 |
| `startTs`        | `Float`   | `1759500493.7488275`                | Время последнего рестарта бэкенда (unix timestamp)                          |
| `startTime`      | `String`  | `03-10-2025 17:08:13`               | Человекочитаемое время последнего рестарта                                  |
| `version`        | `String`  | `10.7.134`                          | Версия (сборка) **Webim**                                                   |
| `osName`         | `String`  | `Ubuntu`                            | Название ОС                                                                 |
| `osVersion`      | `String`  | `20.04`                             | Версия ОС                                                                   |
| `ubuntuVersion`  | `String`  | `20.04`                             | Версия Ubuntu                                                               |
| `branch`         | `String`  | `remotes/webim-server/release-10.7` | Ветка исходного кода                                                        |
| `revision`       | `String`  | `xxx`                               | Хэш ревизии исходного кода                                                  |
| `tag`            | `String`  | `remotes/webim-server/release-10.7` | Тег/метка сборки                                                            |
| `avgNTries`      | `Float`   | `0.0`                               | Среднее число попыток связи фронтенда клиента с бэкендом при `long polling` |
| `n`              | `Integer` | `2`                                 | Количество циклов обновления числа попыток связи                            |
| `storingEnabled` | `Boolean` | `true`                              | Возможна ли запись в БД                                                     |
| `nodeName`       | `String`  | `""`                                | Имя узла (если задано)                                                      |
| `multinodeMode`  | `String`  | `""`                                | Признак мультинодного режима                                                |
| `host`           | `String`  | `wmtest107.webim.ru`                | Имя хоста                                                                   |

---

## /l/a/monitor/connect-to-db

Эндпоинт проверяет, что у **Chat Backend** есть подключение к базе данных. Проверка выполняется простейшим способом и предназначена для использования в системах мониторинга.

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET --url 'https://companyname.webim.ru/l/a/monitor/connect-to-db' --header 'Authorization: Basic S0me7eX7'
```

В случае успеха сервер возвращает ответ:

```
200
{'result': 'ok'}
```

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

```
500
{'result': 'error', 'e': 'Failed to connect to database meta'}
```

Поле `e` содержит текст исключения. Возможные варианты:

  * `Failed to connect to database meta` — отсутствует соединение с мета-БД.
  
  * `Failed to connect to database pro @{account_name}` — отсутствует соединение с pro-БД указанного аккаунта.

---

## /l/a/monitor/timer-stats

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url 'https://companyname.webim.ru/l/a/monitor/timer-stats?='   --header 'Authorization: Basic S0me7eX7'
```

Пример ответа:

```
{
  "last_min": {
    "timer: close_surveys_if_needed": {
      "count": 1,
      "execution_times": [
        0.00010848045349121094
      ],
      "func_name": "t"
    },
    "timer: hide_or_unhide_chats_if_necessary": {
      "count": 1,
      "execution_times": [
        0.00017142295837402344
      ],
      "func_name": "t"
    },
    "timer: recheck_all_session_subset": {
      "count": 1,
      "execution_times": [
        0.0003540515899658203
      ],
      "func_name": "t"
    },
    "timer: BackgroundStorager 0": {
      "count": 20,
      "execution_times": [
        0.0001277923583984375,
        ...
      ],
      "func_name": "t"
    },
    "timer: BackgroundStorager 1": {
      "count": 20,
      "execution_times": [
        0.00008273124694824219,
        ...
      ],
      "func_name": "t"
    },
    ...
  },
  "failed": []
}
```

Сервер возвращает ответ, содержащий следующие параметры:

| Параметр   | Описание                                                            |
|------------|---------------------------------------------------------------------|
| `last_min` | Словарь текущих задач, запущенных в таймерах за последние 60 секунд |
| `failed`   | Список задач, завершившихся ошибкой                                 |

Параметры словаря `last_min` (по каждой задаче):

| Параметр                        | Тип               | Пример                                           | Описание                                     |
|---------------------------------|-------------------|--------------------------------------------------|----------------------------------------------|
| `<имя таймера>.count`           | `Integer`         | `1`                                              | Количество выполнений за последние 60 секунд |
| `<имя функции>.execution_times` | `Array of floats` | `[0.0001277923583984375, 0.0003540515899658203]` | Время выполнения по запускам                 |
| `<имя функции>.func_name`       | `String`          | `t`                                              | Имя задачи                                   |

Параметры словаря `failed` (для каждого элемента списка):

| Параметр         | Тип      | Пример                                                      | Описание                |
|------------------|----------|-------------------------------------------------------------|-------------------------|
| `timer_name`     | `String` | `CachedBelongingToCurrentTornadoInstance update_data async` | Имя таймера             |
| `func_name`      | `String` | `update_data`                                               | Имя функции             |
| `execution_time` | `Float`  | `27.347047567367554`                                        | Длительность выполнения |
| `ts`             | `Float`  | `1623246738.8386502`                                        | Метка времени           |

---

## /l/a/monitor/accounts-stat

Мониторинг данных аккаунта.

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url 'https://companyname.webim.ru/l/a/monitor/accounts-stat?='   --header 'Authorization: Basic S0me7eX7'
```

Пример ответа на запрос:

```
[
  {
    "name": "TOTAL",
    "sessions_cnt": 13,
    "visible_sessions_cnt": 13,
    "alive_sessions_cnt": 13,
    "pages_cnt": 12,
    "alive_pages_cnt": 0,
    "online_operators_cnt": 2,
    "working_operators_cnt": 2,
    "chats_cnt": 1,
    "offline_chats_cnt": 1,
    "in_queue_cnt": 2,
    "failed_to_store_objects_cnt": 0,
    "collected_to_store_objects_cnt": 0,
    "being_stored_now_objects_cnt": 0,
    "being_stored_now_processed_objects_cnt": 0,
    "failed_to_store_objects_cnt_1": 0,
    "collected_to_store_objects_cnt_1": 0,
    "being_stored_now_objects_cnt_1": 0,
    "being_stored_now_processed_objects_cnt_1": 0,
    "not_belongs_to_tornado_instance": 0
  },
  {
    "name": "wmtest107",
    "domain": "wmtest107.webim.ru",
    "sessions_cnt": 13,
    "visible_sessions_cnt": 13,
    "alive_sessions_cnt": 13,
    "pages_cnt": 12,
    "alive_pages_cnt": 0,
    "online_operators_cnt": 2,
    "working_operators_cnt": 2,
    "chats_cnt": 1,
    "offline_chats_cnt": 1,
    "in_queue_cnt": 2,
    "failed_to_store_objects_cnt": 0,
    "collected_to_store_objects_cnt": 0,
    "being_stored_now_objects_cnt": 0,
    "being_stored_now_processed_objects_cnt": 0,
    "failed_to_store_objects_cnt_1": 0,
    "collected_to_store_objects_cnt_1": 0,
    "being_stored_now_objects_cnt_1": 0,
    "being_stored_now_processed_objects_cnt_1": 0,
    "not_belongs_to_tornado_instance": false,
    "ignore_not_belongs_to_tornado_instance": false
  }
]
```

Сервер возвращает ответ, содержащий следующие параметры:

| Параметр                                   | Тип       | Пример               | Описание                                                   |
|--------------------------------------------|-----------|----------------------|------------------------------------------------------------|
| `name`                                     | `String`  | `wmtest107`          | Имя аккаунта или `TOTAL` для агрегированных значений       |
| `domain`                                   | `String`  | `wmtest107.webim.ru` | Домен аккаунта                                             |
| `sessions_cnt`                             | `Integer` | `13`                 | Количество чат-сессий (`VisitSession`)                     |
| `visible_sessions_cnt`                     | `Integer` | `13`                 | Количество отображаемых чат-сессий                         |
| `alive_sessions_cnt`                       | `Integer` | `13`                 | Количество активных (alive) чат-сессий                     |
| `pages_cnt`                                | `Integer` | `12`                 | Всего посещаемых страниц (`VisitedPage`)                   |
| `alive_pages_cnt`                          | `Integer` | `0`                  | Количество активных посещаемых страниц                     |
| `online_operators_cnt`                     | `Integer` | `2`                  | Количество операторов онлайн                               |
| `working_operators_cnt`                    | `Integer` | `2`                  | Количество работающих операторов                           |
| `chats_cnt`                                | `Integer` | `1`                  | Всего чатов                                                |
| `offline_chats_cnt`                        | `Integer` | `1`                  | Всего офлайн-чатов                                         |
| `in_queue_cnt`                             | `Integer` | `2`                  | Количество чатов в очереди                                 |
| `failed_to_store_objects_cnt`              | `Integer` | `0`                  | Объектов на запись с ошибкой (storager 0)                  |
| `collected_to_store_objects_cnt`           | `Integer` | `0`                  | Объектов в очереди на запись (storager 0)                  |
| `being_stored_now_objects_cnt`             | `Integer` | `0`                  | Объектов сейчас пишется (storager 0)                       |
| `being_stored_now_processed_objects_cnt`   | `Integer` | `0`                  | Обработанных объектов сейчас (storager 0)                  |
| `failed_to_store_objects_cnt_1`            | `Integer` | `0`                  | Объектов на запись с ошибкой (storager 1)                  |
| `collected_to_store_objects_cnt_1`         | `Integer` | `0`                  | Объектов в очереди на запись (storager 1)                  |
| `being_stored_now_objects_cnt_1`           | `Integer` | `0`                  | Объектов сейчас пишется (storager 1)                       |
| `being_stored_now_processed_objects_cnt_1` | `Integer` | `0`                  | Обработанных объектов сейчас (storager 1)                  |
| `not_belongs_to_tornado_instance`          | `Integer` | `0`                  | Запросов, направленных не к тому экземпляру `tornado`      |
| `ignore_not_belongs_to_tornado_instance`   | `Boolean` | `false`              | Флаг игнорирования метки `not_belongs_to_tornado_instance` |

---

## /l/a/monitor/zabbix/tornado

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url 'https://companyname.webim.ru/l/a/monitor/zabbix/tornado?='   --header 'Authorization: Basic S0me7eX7'
```

Пример ответа на запрос:

```
{
  "sessions_cnt": 13,
  "working_operators_cnt": 2,
  "chats_cnt": 2,
  "accounts_cnt": 1,
  "failed_to_store_objects_cnt": 0,
  "collected_to_store_objects_cnt": 0
}
```

Сервер возвращает ответ, содержащий следующие параметры:

| Параметр                         | Тип       | Пример | Описание                                                              |
|----------------------------------|-----------|--------|-----------------------------------------------------------------------|
| `sessions_cnt`                   | `Integer` | `1`    | Количество чат-сессий (`VisitSession`)                                |
| `working_operators_cnt`          | `Integer` | `0`    | Количество работающих операторов                                      |
| `chats_cnt`                      | `Integer` | `0`    | Всего чатов                                                           |
| `accounts_cnt`                   | `Integer` | `1`    | Количество активных аккаунтов Webim на данном бэкенде                 |
| `failed_to_store_objects_cnt`    | `Integer` | `0`    | Количество объектов для сохранения в базу данных с ошибкой сохранения |
| `collected_to_store_objects_cnt` | `Integer` | `0`    | Количество объектов для сохранения в базу данных (в очереди)          |

---

## /l/a/monitor/zabbix/channels

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url 'https://companyname.webim.ru/l/a/monitor/zabbix/channels?='   --header 'Authorization: Basic S0me7eX7'
```

Пример ответа на запрос:

```
{
  "channels": {
    "telegram": {
      "error_cnt": 1
    },
    "vk": {
      "error_cnt": 1
    }
  }
}
```

Сервер возвращает ответ, содержащий словарь из каналов, по которым были возвращены ошибки. Словарь содержит следующие параметры:

| Параметр                               | Тип       | Пример | Описание                                |
|----------------------------------------|-----------|--------|-----------------------------------------|
| `channels.<название канала>.error_cnt` | `Integer` | `1`    | Общее число ошибок (для каждого канала) |

---

## /l/a/monitor/collected-to-store-objects

Возвращает словарь классов объектов на сохранение и количество ошибок по ним.

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю с указанием аргументов.

Пример curl-запроса:

```
curl --request GET   --url 'https://companyname.webim.ru/l/a/monitor/collected-to-store-objects?mode=stats&account_name=companyname&collector_name=collected_to_store&num=100'   --header 'Authorization: Basic S0me7eX7'
```

---

## /l/a/object-stats

Возвращает словарь системных объектов со статистикой **ObjGraph** по ним с лимитом 50 штук.

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url https://companyname.webim.ru/l/a/object-stats   --header 'Authorization: Basic S0me7eX7'
```

---

## /l/i/instance-id

Возвращает значение параметра `TORNADO_INSTANCE_ID`, который генерируется во время запуска **Chat Backend**. Изменение значения параметра говорит о перезапуске **Chat Backend**.

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url https://companyname.webim.ru/l/i/instance-id   --header 'Authorization: Basic S0me7eX7'
```

Пример ответа:

```
9b5ad6b158354197bcfb949c55756c4c
```

---

## /l/i/account-state?action=get_state

Возвращает параметр `blocked` — заблокирован ли аккаунт (`true`/`false`).

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url 'https://companyname.webim.ru/l/i/account-state?action=get_state'   --header 'Authorization: Basic S0me7eX7'
```

Пример ответа:

```
{
  "blocked": false
}
```

---

## /service/monitor/get-tornado-ports.php

Возвращает список TCP-портов, на которых отвечает **Chat Backend**.

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url https://companyname.webim.ru/webim/service/monitor/get-tornado-ports.php   --header 'Authorization: Basic S0me7eX7'   --cookie 'WEBIM_LOCALE=ru; PHPSESSID=asur94kg5skdnm5kdg7sukc7f4'
```

Пример ответа:

```
[
  "8364",
  "8366",
  "8378",
  "8239",
  "8371",
  "8320",
  "8290",
  "8280",
  "8264",
  "8263",
  "8370",
  "8266",
  "8267"
]
```

---

## /service/monitor/get-all-env-list.php

Возвращает словарь окружений на сервере. Содержит названия хостов, ip-адреса и окружения.

Для проверки будет необходимо авторизоваться в системе по сервисному логину и паролю.

Пример curl-запроса:

```
curl --request GET   --url https://companyname.webim.ru/webim/service/monitor/get-all-env-list.php   --header 'Authorization: Basic S0me7eX7'   --cookie 'WEBIM_LOCALE=ru; PHPSESSID=asur94phj6kfhm5akfh4tkc7f4'
```

Пример ответа:

```
[
  {
    "host": "s1",
    "env": "eta",
    "ip": "192.168.1.15"
  },
  {
    "host": "s1",
    "env": "epsilon",
    "ip": "192.168.1.15"
  }
]
```

Сервер возвращает ответ, содержащий следующие параметры:

| Параметр | Тип      | Пример         | Описание                      |
|----------|----------|----------------|-------------------------------|
| `host`   | `String` | `s1`           | Название хоста                |
| `env`    | `String` | `eta`          | Окружение (environment) Webim |
| `ip`     | `String` | `192.168.1.15` | IP-адрес хоста                |

---

## /service/info.php

Возвращает информацию о размещении **Webim**.

Для проверки будет необходимо авторизоваться с сервисным логином и паролем **Webim**.

Пример curl-запроса:

```
curl --request GET   --url https://companyname.webim.ru/webim/service/info.php   --header 'Authorization: Basic S0me7eX7'   --cookie 'WEBIM_LOCALE=ru; PHPSESSID=asur94phj3fdnm5aut1sukc7f4'
```

Пример ответа:

```
array(12) {
  ["tornado port"]=>
  string(4) "8267"
  ["agent backend port"]=>
  string(4) "6001"
  ["account name"]=>
  string(7) "companyname"
  ["script location"]=>
  string(7) "companyname"
  ["tornado location"]=>
  string(0) ""
  ["server"]=>
  string(14) "s999.webim.ru
"
  ["branch"]=>
  string(13) "release-10.7
"
  ["revision"]=>
  string(41) "09523fed398a6351c5kfh637d6f5b1a6875232b7
"
  ["version"]=>
  string(6) "10.7.x"
  ["https"]=>
  string(8) "https://"
  ["uptime"]=>
  string(71) " 21:48:59 up 36 days, 22:02,  0 users,  load average: 1.62, 0.65, 0.35
"
  ["connections"]=>
  NULL
}
```

Сервер возвращает ответ, содержащий следующие параметры:

| Параметр             | Тип      | Пример                                                                | Описание                                                           |
|----------------------|----------|-----------------------------------------------------------------------|--------------------------------------------------------------------|
| `tornado port`       | `String` | `8267`                                                                | TCP/IP порт **Chat Backend**                                       |
| `agent backend port` | `String` | `6001`                                                                | TCP/IP порт **Admin Backend**                                      |
| `account name`       | `String` | `companyname`                                                         | Название аккаунта **Webim**                                        |
| `script location`    | `String` | `companyname`                                                         | Имя PHP-окружения                                                  |
| `tornado location`   | `String` |                                                                       | Имя окружения **Chat Backend**                                     |
| `server`             | `String` | `s999.webim.ru`                                                       | Hostname сервера, на котором работает PHP                          |
| `branch`             | `String` | `release-10.7`                                                        | Имя ветки с исходным кодом                                         |
| `revision`           | `String` | `09523fed398a6351c595df37d6f5b1a2904952b7`                            | Ревизия исходного кода                                             |
| `version`            | `String` | `10.7.x`                                                              | Версия **Webim**                                                   |
| `https`              | `String` | `https://`                                                            | Протокол http/https                                                |
| `uptime`             | `String` | `21:48:59 up 36 days, 22:02, 0 users, load average: 1.62, 0.65, 0.35` | Время с момента старта ОС на сервере, на котором запущен **Webim** |
| `connections`        | `String` |                                                                       | Соединения PHP-бэкенда с СУБД                                      |

## /l/a/monitor/set-log-level { #set-log-level }

Позволяет динамически изменять уровень логирования для определенных компонентов системы **Webim**.

Пример curl-запроса:

```
curl --request GET   --url 'https://companyname.webim.ru/l/a/monitor/set-log-level?name=auth&level=DEBUG&current_node_only=true'   --header 'Authorization: Basic S0me7eX7'
```

| Параметр            | Тип       | Пример  | Описание                                                                                                                                     |
|---------------------|-----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------|
| `name`              | `String`  | `auth`  | Имя компонента или подсистемы, для которой необходимо изменить уровень логирования                                                           |
| `level`             | `String`  | `DEBUG` | Уровень логирования, который необходимо установить для указанного компонента. Допустимые значения: `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL` |
| `current_node_only` | `Boolean` | `true`  | Применить изменение только на текущем узле (в мультинодной конфигурации)                                                                     |

Возвращаемые значения:

`200 OK` при успешном изменении уровня логирования.

`400 Bad Request` если параметры не заданы или заданы неверно.

`500 Internal Server Error` при возникновении ошибки на сервере.

---

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