Перейти к содержанию

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

Возможности мониторинга работы сервиса Webim и его компонентов, а также рекомендации по настройке мониторинга описаны в этой статье. Ниже будут изложены конкретные эндпоинты, которые можно использовать в рамках мониторинга.

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

https://{hostname}{endpoint}

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

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

/metrics

Внимание!

Эндпоинт был добавлен в версии Webim 10.6 и не будет работать на более ранних версиях продукта!

Эндпоинт используется для получения метрик Prometheus из Chat Backend и Admin Backend. Подробную информацию об этом эндпоинте можно прочитать в соответствующей статье.

/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": "wmdemo5",
    "port": 8267,
    "startTs": 1622648958.2465138,
    "startTime": "02-06-2021 18:49:18",
    "version": "10.3.4",
    "ubuntuVersion": "16.04",
    "branch": "release-10.3",
    "revision": "09523fed398a6351c595df37d6f5b1a2904952b7",
    "avgNTries": 0,
    "n": 0,
    "storingEnabled": true
  },
  "host": "wmdemo5.webim.ru"
}

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

Параметр Тип Пример Описание
env String wmdemo5 Окружение (environment) Webim
port Integer 8267 Номер порта
startTs Float 1622648958.2465138 Время последнего рестарта бэкенда
startTime String 02-06-2021 18:49:18 Время последнего рестарта бэкенда
version String 10.3.4 Версия (сборка) Webim
ubuntuVersion String 16.04 Версия ОС
branch String release-10.3 Ветка кода Webim
revision String 09523fed398a6351c595df37d6f5b1a2904952b7 Хэш коммита, по которому сделана данная сборка **Webim, в guid-формате
avgNTries Integer 0 Среднее число попыток связи фронтэнда клиента с бэкендом Webim при использовании long polling — чем больше значение, тем хуже связь
n Integer 0 Количество циклов обновления числа попыток связи фронтэнда клиента с бэкендом Webim
storingEnabled Boolean true Возможна ли запись в базу данных
host String wmdemo5.webim.ru Имя хоста Webim

/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: hide_chats_if_necessary": {
      "count": 2,
      "execution_times": [
        4.220008850097656e-05,
        4.3392181396484375e-05
      ],
      "func_name": "t"
    },
    "timer: recheck_all_session_subset": {
      "count": 1,
      "execution_times": [
        4.2438507080078125e-05
      ],
      "func_name": "t"
    },
    ...
  "failed": [
    {
      "timer_name": "CachedBelongingToCurrentTornadoInstance update_data async",
      "func_name": "__update_data",
      "execution_time": 15.081258773803711,
      "ts": 1623233952.7438087
    },
    {
      "timer_name": "CachedPrevPeriodsStatistics update_data async",
      "func_name": "__update_data",
      "execution_time": 27.347047567367554,
      "ts": 1623246738.8386502
    },
    ...
  ]
}

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

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

Параметры словаря last_min:

Параметр Тип Пример Описание
<имя таймера>.count Integer 2 Количество раз выполнения текущей задачи, запущенной в последние 60 секунд
<имя функции>.execution_times Array of floats [4.220008850097656e-05, 4.3392181396484375e-05] Массив, содержащий значения времени выполнения задачи (количество значений соответствует количеству раз выполнения задачи)
<имя функции>.func_name String t Наименование задачи, запущенной в таймере в течение последних 60 секунд

Параметры словаря 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": 10,
    "visible_sessions_cnt": 10,
    "alive_sessions_cnt": 10,
    "pages_cnt": 5,
    "alive_pages_cnt": 5,
    "online_operators_cnt": 6,
    "working_operators_cnt": 6,
    "chats_cnt": 10,
    "offline_chats_cnt": 1,
    "in_queue_cnt": 2,
    "failed_to_store_objects_cnt": 1,
    "collected_to_store_objects_cnt": 2,
    "being_stored_now_objects_cnt": 5,
    "being_stored_now_processed_objects_cnt": 11,
    "not_belongs_to_tornado_instance": 1
  },
  {
    "name": "companyname",
    "domain": "companyname.webim.ru",
    "sessions_cnt": 10,
    "visible_sessions_cnt": 10,
    "alive_sessions_cnt": 10,
    "pages_cnt": 5,
    "alive_pages_cnt": 5,
    "online_operators_cnt": 6,
    "working_operators_cnt": 6,
    "chats_cnt": 10,
    "offline_chats_cnt": 1,
    "in_queue_cnt": 2,
    "failed_to_store_objects_cnt": 1,
    "collected_to_store_objects_cnt": 2,
    "being_stored_now_objects_cnt": 5,
    "being_stored_now_processed_objects_cnt": 11,
    "not_belongs_to_tornado_instance": 1,
    "ignore_not_belongs_to_tornado_instance": false
  }
]

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

Параметр Тип Пример Описание
sessions_cnt Integer 10 Количество чат-сессий (VisitSession)
visible_sessions_cnt Integer 10 Количество отображаемых чат-сессий
alive_sessions_cnt Integer 10 Количество alive чат-сессий
pages_cnt Integer 5 Всего посещаемых страниц (VisitedPage)
alive_pages_cnt Integer 5 Количество посещаемых страниц (alive)
online_operators_cnt Integer 6 Количество операторов онлайн
working_operators_cnt Integer 6 Количество работающих операторов
chats_cnt Integer 10 Всего чатов
offline_chats_cnt Integer 1 Всего офлайн-чатов
in_queue_cnt Integer 2 Количество чатов в очереди
failed_to_store_objects_cnt Integer 1 Количество объектов для сохранения в базу данных с ошибкой сохранения
collected_to_store_objects_cnt Integer 2 Количество объектов в очереди
being_stored_now_objects_cnt Integer 5 Количество объектов в процессе сохранения
being_stored_now_processed_objects_cnt Integer 11 Количество обработанных объектов (в процессе)
not_belongs_to_tornado_instance Integer 1 Количество запросов, направленных не к тому экземпляру tornado

/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": 1,
  "working_operators_cnt": 0,
  "chats_cnt": 0,
  "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/monitor/object-stats

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

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

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

curl --request GET \
  --url https://companyname.webim.ru/l/a/monitor/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": "31.41.158.42"
  },
  {
    "host": "s1",
    "env": "epsilon",
    "ip": "31.41.158.42"
  }
]

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

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

/service/aux/check-php.php

Проверяет работоспособность всех PHP-пулов Webim. Результаты пишутся в файл php-check.log и my_php.log.

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

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

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

/service/aux/check-tornados.php

Проверяет работоспособность всех Chat Backend. Результаты пишутся в файл tornado-check.log и my_php.log.

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

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

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

/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) "6015"
  ["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.3
"
  ["revision"]=>
  string(41) "09523fed398a6351c5kfh637d6f5b1a6875232b7
"
  ["version"]=>
  string(6) "10.3.4"
  ["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 6015 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.3 Имя ветки с исходным кодом
revision String 09523fed398a6351c595df37d6f5b1a2904952b7 Ревизия исходного кода
version String 10.3.4 Версия 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 POST \
  --url 'https://companyname.webim.ru/l/a/monitor/set-log-level' \
  --header 'Authorization: Basic S0me7eX7' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "auth",
    "level": "DEBUG"
  }'
Параметр Тип Пример Описание
name String auth Имя компонента или подсистемы, для которой необходимо изменить уровень логирования
level String DEBUG Уровень логирования, который необходимо установить для указанного компонента. Допустимые значения: DEBUG, INFO, WARN, ERROR, FATAL

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

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

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

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