Skip to content

Рекомендации по настройке мониторинга

В данной статье представлены рекомендации по настройке мониторинга системы онлайн-консультирования Webim для обеспечения контроля за бесперебойной работой.

Параметры мониторинга

Круглосуточный мониторинг сервера базы данных осуществляется по следующим параметрам:

  • Наличие процесса MySQL;

  • Доступность порта 3306 с сервера клиента;

  • Нагрузка на CPU с пороговым значением в 90% загрузки в течении 15 минут;

  • Наличие 5% свободной оперативной памяти на сервере;

  • Мониторинг здоровья жесткого диска по SMART и состояния RAID массива;

  • Наличие ошибок при реплицировании, отставание репликации;

  • Мониторинг корректности создания резервных копий MySQL, наличие файла последней резервной копии;

  • Ежедневная или еженедельная проверка на корректность таблиц в базе данных;

  • Мониторинг появления новых ошибок в логе сервера MySQL.


Требования к системе мониторинга

Рекомендуется настроить описанные ниже виды мониторинга.

Мониторинг нагрузки на CPU на сервере

Критическое длительное значение — 90%. Проверить запросы к nginx. Возможно, имеется ненормальная активность.

Мониторинг наличия процессов сервера, необходимых для работы Webim Server

Для работы сервера используются следующие службы:

Служба Необходимые процессы Действия при отсутствии процессов
nginx master + worker процессы systemctl restart nginx
php-fpm (необязательно) Наличие master‑процесса и всех пулов: webim-visitor, webim-visitor2, webim-admin, webim-admin2, webim-images systemctl restart php-fpm
server.py Наличие процесса python server.py (-port 8260 по умолчанию). На Ubuntu/Debian управление через supervisorctl. Также должен работать supervisord. При отсутствии supervisord: systemctl start supervisor
Admin Backend Процесс приложения и доступность порта (по умолчанию 6001) Рестарт приложения согласно способу инсталляции
php2db (для СУБД, отличных от MySQL)

Мониторинг работоспособности процесса

Эндпоинт: /l/v/init

Проверка:

curl "/l/v/init" -v

Ожидается 200 и JSON‑ответ.

Реакция: проверить лог /var/log/pro/tornado-8260.log.

Служба Необходимые процессы Действия при отсутствии процессов
nginx master + worker процессы systemctl restart nginx
php-fpm (необязательно) Наличие master‑процесса и всех пулов: webim-visitor, webim-visitor2, webim-admin, webim-admin2, webim-images systemctl restart php-fpm
server.py Наличие процесса python server.py (-port 8260 по умолчанию). На Ubuntu/Debian управление через supervisorctl. Также должен работать supervisord. При отсутствии supervisord: systemctl start supervisor
Admin Backend Процесс приложения и доступность порта (по умолчанию 6001) Рестарт приложения согласно способу инсталляции
php2db (для СУБД, отличных от MySQL)

Мониторинг работоспособности процесса

Эндпоинт: /l/v/init

Проверка:

curl "/l/v/init" -v

Ожидается 200 и JSON‑ответ.

Реакция: проверить лог /var/log/pro/tornado-8260.log.

В нормальных условиях должны появляться сообщения о старте сессий чата/отправки сообщений.В случае отсутствия новых данных стоит проверить доступность сервера из сети.

Если доступ есть, то перезапустить (для ОС Ubuntu, Debian):

supervisorctl restart tornado-8260

Мониторинг доступности PHP

Мониторинг осуществляется следующим образом:

Эндпоинт: /client.php

Пример корректного ответа (заголовки):

$ curl /client.php -I
HTTP/1.1 200 OK
Server: nginx
Date:
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Expires:
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=1111; path=/; domain=. ; secure; HttpOnly
Реакция: проверить /var/log/pro/error.log.

Если имеются ошибки, то по ситуации исправить их.

Если недоступен или не отвечает PHP, то перезапустить (для ОС Ubuntu, Debian):

systemctl restart php-fpm

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

Локальная проверка (только на сервере):

curl https://service_user:service_pass@:8260/l/a/monitor/accounts-stat

Ниже представлена стандартная форма запроса (подробнее об этом и других эндпоинтах мониторинга смотрите в этой статье).

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

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

[{
  "online_operators_cnt": 0,
  "being_stored_now_objects_cnt": 0,
  "offline_sessions_cnt": 223,
  "in_queue_cnt": 0,
  "failed_to_store_objects_cnt": 0,
  "visible_sessions_cnt": 39,
  "name": "TOTAL",
  "alive_pages_cnt": 6,
  "sessions_cnt": 74,
  "collected_to_store_objects_cnt": 0,
  "not_belongs_to_tornado_instance": 0,
  "pages_cnt": 63,
  "chats_cnt": 38,
  "alive_sessions_cnt": 39,
  "being_stored_now_processed_objects_cnt": 0
},
{
  "domain": "",
  "offline_sessions_cnt": 223,
  "name": "demo",
  "pages_cnt": 63,
  "sessions_cnt": 74,
  "in_queue_cnt": 0,
  "collected_to_store_objects_cnt": 0,
  "failed_to_store_objects_cnt": 0,
  "visible_sessions_cnt": 39,
  "ignore_not_belongs_to_tornado_instance": false,
  "being_stored_now_processed_objects_cnt": 0,
  "alive_pages_cnt": 6,
  "chats_cnt": 38,
  "working_operators_cnt": 0,
  "alive_sessions_cnt": 39,
  "online_operators_cnt": 0,
  "being_stored_now_objects_cnt": 0,
  "not_belongs_to_tornado_instance": false
}]

Переменные:

  • collected_to_store_objects_cnt – не более 2000

  • failed_to_store_objects_cnt – не более 0

Реакция: при срабатывании триггера collected_to_store_objects_cnt и failed_to_store_objects_cnt проверить доступность базы, возможность записи в нее.

Рост collected_to_store_objects_cnt может быть вызван медленным доступом.

Мониторинг доступности базы данных с сервера приложений

Используйте mysqladmin ping.

Также для проверки доступности базы данных со стороны Chat Backend можно использовать эндпоинт /l/a/monitor/connect-to-db (см. Описание эндпоинтов мониторинга).

Реакция: восстановить доступность базы данных.

Мониторинг доступности сервера из внешней сети

Проверку удобно производить по описанным выше эндпоинтам с внешних узлов. При проблемах — проверить интерфейсы и маршруты.

Реакция: проверить сетевые интерфейсы на сервере, маршруты до/с сервера.

Кроме этого, рекомендуем дополнительно использовать фоновый сервис atop на сервере со сбором статистики раз в минуту. Он поможет оптимизировать процесс анализа состояния сервера.


Дополнительная информация

Рестарт сервисов для ротации логов не нужен. Ротировать надо следующие логи: nginx (access, error), tornado, myPHP, fpm. Желательно, чтобы логи были доступны одну неделю. Больший объём логов будет занимать значительный объём диска.

При большой нагрузке рекомендуется проводить мониторинг блокировок, в частности при работе с MySQL 5.7.

Ниже перечислены некоторые конечные точки, которые могут быть полезны при мониторинге:

  • /l/a/monitor – базовая информация о запущенном Chat Backend

  • /l/a/monitor/connect-to-db – проверка подключения Chat Backend к базе данных

  • /l/a/monitor/timer-stats – что запущено в таймерах и сколько выполнялось

  • /l/a/monitor/accounts-stat – оперативные показатели по аккаунтам (включая информацию о количестве чатов, сессий, страниц и прочего)

  • /l/a/monitor/zabbix/channels – ошибки по каналам

  • /l/a/object-stats – objgraph-данные от профайлера

  • /l/i/instance-id – идентификатор Chat Backend

  • /service/monitor/ – возвращает HTML-страницу для визуального мониторинга сервера


Возможности мониторинга Webim в примерах

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

Мониторинг ответов

Компоненты Webim Server позволяют осуществлять внешний мониторинг в реальном времени при помощи систем мониторинга наподобие Zabbix, благодаря чему можно анализировать задержку, код и тело ответа.

Ping-сервис

Оперативная информация по серверу (количество активных аккаунтов, сессий и т.д.)

Тестовая инициализация сессии чата

Таблицы мониторинга

Наиболее часто используемая для мониторинга информация агрегируется в виде таблиц, которые отправляются на Webim Server по запросам определённых эндпоинтов.

Мониторинг текущего состояния

Мониторинг текущего состояния в режиме реального времени, сохранять показатели в БД за счёт контроля системных параметров сервера и специализированных параметров Webim Server с помощью стандартных систем мониторинга.

Нагрузка на память

Ping

Визуализация данных мониторинга

Полученные показатели можно визуализировать при помощи различных сервисов для аналитики и визуализации, таких как Grafana.

Количество открытых чатов и операторов онлайн на один аккаунт в моменте

Количество объектов в очереди на запись, открытых сессий и т.д.

Совмещённые графики системных параметров при исследовании инцидента

Логи

Каждый серверный компонент Webim записывает всю значимую информацию в log-файлы. По ним можно оперативно отслеживать ошибки и предупреждения. Логи ротируются и хранятся неделю.

2019/12/24 10:45:15 [error] 9327#0: *119085123 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: xx.xx.xx.22, server: , request: "GET /operator/history.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.webim-admin2.sock:", host: "***.***.ru", referrer: "https://***.***.ru/operator/"
...
[W 191212 14:01:53 visitor_tracking:2142] chat_start_params 800 9aff8484a12247d592fcd952f9d7d4f8 {'mode': u'chat', 'department_key': u'life'}
[W 191212 14:01:55 visitor_tracking:906] Starting chat on visitor message @centostest for session: 9aff8484a1*********9d7d4f8
[W 191212 14:01:55 visitor_tracking:2004] process_event 9aff8484a********52f9d7d4f8 visitor.chat.start
...
[E 191212 14:17:41 manager:160] WebimSiteMigrationManager: Previous migration failed. Service may encounter errors while working with the database. DB URL: postgresql+psycopg2cffi://webim_meta:***@127.0.0.1/webim_hosted_meta
[E 191212 14:17:45 wm_yandex:228] YandexAPI: error, account=@centostest, params={'status': 'offline', 'timestamp': 1576149464}, status_code=404, text={"message":"Organization with chat_id='3d5540e2***********5af0dbbf82' is not found","result":"error"}
[E 191212 14:17:45 wm_timer:114] Error while trying to execute target
...
[W 191128 10:07:13 visitor_tracking:3850] Result for action chat.read_by_visitor: {"result": "ok"}
[E 191128 10:07:13 wm_notification:564] Something wrong: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
Traceback (most recent call last):
File "/var/www/webim_ru/login/python.eta/webim/wm_notification.py", line 560, in send
self._send(payload)
File "/var/www/webim_ru/login/python.eta/webim/wm_notification.py", line 638, in _send
self.adapter.notify_single_device(registration_id=payload['push_token'], data_message=payload['data'])
File "/var/local/env.eta/lib/python2.7/site-packages/pyfcm/fcm.py", line 96, in notify_single_device
self.send_request([payload], timeout)
File "/var/local/env.eta/lib/python2.7/site-packages/pyfcm/baseapi.py", line 220, in send_request
response = self.do_request(payload, timeout)
File "/var/local/env.eta/lib/python2.7/site-packages/pyfcm/baseapi.py", line 210, in do_request
response = requests.post(self.FCM_END_POINT, headers=self.request_headers(), data=payload, timeout=timeout)
File "/var/local/env.eta/lib/python2.7/site-packages/requests/api.py", line 110, in post
return request('post', url, data=data, json=json, **kwargs)
File "/var/local/env.eta/lib/python2.7/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/var/local/env.eta/lib/python2.7/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/var/local/env.eta/lib/python2.7/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/var/local/env.eta/lib/python2.7/site-packages/requests/adapters.py", line 497, in send
raise SSLError(e, request=request)
SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)

Работа с логами

Log-файлы можно агрегировать и парсить при помощи различных сервисов (GrayLog, Logstash/ELK и т.д.), осуществлять поиск необходимых объектов, строить графики и диаграммы по сложным выборкам.

Поиск записей о событии operator.update_status внутри временного промежутка в GrayLog

Графики величины времени ответа компонентов сервера

Оповещения

Сверх этого, рекомендуется настраивать оповещающие системы, которые будут уведомлять сотрудников о превышении допустимых значений показателей через различные каналы (Telegram, SMS и т.д.).


Последнее обновление страницы: 26 февраля 2026 г.