- Сервис онлайн-консультирования Webim
- -
- База знаний
- -
- Для девопсов
- -
- Мониторинг
- -
- Рекомендации по настройке мониторинга
-
-
-
- API сервиса Webim
- Webim Mobile SDK и мобильное приложение Webim для посетителя
- Встраивание чата Webim на сайт
- Идентификаторы посетителя
- Интеграция со сторонними сервисами
- Интерфейс виджета чата
- Логика обработки чатов
- Настройка сервиса Webim
- Операторы и РМО
- Отделы в сервисе Webim
- Панель приборов: ответы на вопросы
- Эксплуатация сервиса Webim
- Основные понятия и термины
- Сброс пароля
- Система управления ролями и правами доступа
- Шаг 1. Установка виджета Webim на сайт
- Шаг 2. Начальная настройка сервиса
- Шаг 3. Регистрация оператора
- Шаг 4. Подключение каналов общения
-
-
-
- 01. Обнаружение нового посетителя, ожидающего ответа
- 02. Выбор посетителя сайта из списка и начало диалога
- 03. Набор ответа посетителю, выбор шаблона
- 04. Запрос контактной информации у посетителя
- 05. Отправка файла посетителю
- 06. «Телепортация» пользователей
- 07. Переадресация диалога другому оператору
- 08. Отправка переписки на адрес электронной почты оператора
- 09. Назначение категории посетителю
- 10. Блокировка посетителя
- 11. Вставка гиперссылки в сообщение
- 12. Добавление cкрытых сообщений
- 13. Проверка орфографии
- Agent`s Handbook
- Горячие клавиши в РМО
- Загрузка файлов в диалог
- Исходящие диалоги
- Как включить оповещения в Google Chrome
- Очереди в РМО
- Работа с офлайн-обращениями в РМО
-
- Автоприглашения
- Активность сотрудников
- Алгоритмы назначения чатов
- Видимость диалогов
- Возможности и ограничения Webim в каналах общения
- Вход в систему
- Геолокация посетителей
- График работы
- Добавление кнопки Webim в E-mail
- Закрытие диалогов
- Логотип компании в заголовке чата
- Маршрутизация чатов между операторами и ботами
- Маска телефонного номера
- Настройка языков
- Общие настройки организации
- Ограничения по длине сообщений и полей
- Особенности функционала «Начать чат» в каналах общения
- Отделы
- Оценки
- Переназначение специализированных клавиш управления в РМО
- Приоритетные страницы
- Рассылки
- Регистрация операторов и назначение супервизоров
- Системные сообщения
- Список тайм-аутов
- Финансы
- Шаблоны ответов
-
-
- Встраивание административного интерфейса через iframe
- Горизонтальное масштабирование (кластеризация)
- Интеграция с почтовыми серверами
- Обработка файлов, загружаемых в чат
- Описание сервисных периодов Webim
- Параметры настроек сервера
- Редактор настроек аккаунта (account config)
- Редактор ресурсов
- Сетевые конфигурации сервиса Webim
-
-
-
- Webim Mobile SDK 3.0 для интеграции в мобильные приложения iOS
- Информация о выпусках (Release notes) – Webim Mobile SDK 3 для Android
- Информация о выпусках (Release notes) – Webim Mobile SDK 3 для iOS
- Справочник по Webim Mobile SDK – SDK для интеграции в мобильные приложения iOS (iPhone/iPad)
- Справочник по Webim Mobile SDK для интеграции в мобильные приложения Android
- Push-уведомления
- Webim Cordova Plugin
-
- Webim CRM postMessage Interface
- Как сделать ссылку кнопкой старта чата
- Маршрутизатор чатов
- Обработчики событий чата
- Процедура установки чата Webim на сайт в iframe
-
-
-
- Настройка интеграции с Facebook* (для версий до 10.0 включительно)
- Настройка интеграции с Facebook* с помощью приложения Webim
- Настройка интеграции с Instagram* с помощью приложения Webim
- Настройка приложения для интеграции с Facebook* (для версий до 10.0 включительно)
- Создание бизнес-аккаунта в Instagram*
- Создание страницы организации в Facebook*
- Skype
- Telegram
- Viber
- ВКонтакте
- Одноклассники
-
-
Рекомендации по настройке мониторинга
СОДЕРЖАНИЕ
- Параметры мониторинга
- Требования к системе мониторинга
- Мониторинг нагрузки на CPU на сервере
- Мониторинг наличия процессов сервера, необходимых для работы Webim Server
- Мониторинг работоспособности процесса
- Мониторинг доступности PHP
- Мониторинг данных аккаунта
- Мониторинг доступности базы данных с сервера приложений
- Мониторинг доступности сервера из внешней сети
- Дополнительная информация
- Возможности мониторинга Webim в примерах
Параметры мониторинга
Круглосуточный мониторинг сервера базы данных осуществляется по следующим параметрам:
- Наличие процесса MySQL;
- Доступность порта 3306 с сервера клиента;
- Нагрузка на CPU с пороговым значением в 90% загрузки в течении 15 минут;
- Наличие 5% свободной оперативной памяти на сервере;
- Мониторинг здоровья жесткого диска по SMART и состояния RAID массива;
- Наличие ошибок при реплицировании, отставание репликации;
- Мониторинг корректности создания резервных копий MySQL, наличие файла последней резервной копии;
- Ежедневная или еженедельная проверка на корректность таблиц в базе данных;
- Мониторинг появления новых ошибок в логе сервера MySQL.
Требования к системе мониторинга
Рекомендуется настроить следующие виды мониторинга.
- Мониторинг нагрузки на CPU на сервере
Критическое длительное значение — 90%.
Проверить запросы к nginx. Возможно, имеется ненормальная активность. - Мониторинг наличия процессов сервера, необходимых для работы Webim Server
Для работы сервера используются следующие службы:- nginx
- php-fpm
- python server.py
- AdminBackend
- php2db (только для аккаунтов на СУБД отличной от MySQL)
Необходимо контролировать наличие этих процессов на сервере.
Служба Необходимые процессы Действия при отсутствии процессов nginx master + worker процессы service nginx restart
NB: в некоторых ОС управление сервисами может быть другое, например, systemctl restart nginx для CentOS/RHELphp-fpm Наличие master-процесса и всех пулов по списку: - webim-visitor
- webim-visitor2
- webim-admin
- webim-admin2
- webim-images
service php-fpm restart server.py - Наличие процесса python server.py, запущенного с переменной -port 8260 (по умолчанию).
При работе с ОС Ubuntu, Debian можно запустить процесс через supervisorctl.
$ supervisorctl
supervisor> status
supervisor> start tornado-8260 - Наличие процесса supervisord.
В случае отсутствия supervisord — запустить:
service supervisor start - Мониторинг работоспособности процесса
Мониторинг работоспособности процесса осуществляется с помощью обращения к нему по ссылке:/l/v/track.php?event=init&since=0&callback=c
Запрос:
curl "/l/v/track.php?event=init&since=0&callback=c" -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, то перезапустить:
service php5-fpm restart
- Мониторинг данных аккаунта
Запрос:curl https://service_user:service_pass@:8260/l/a/monitor/accounts-stat
— NB: запрос в такой форме выполняется только локально на сервере! В остальных случаях запрос не будет выполнен.
curl --request GET \ --url 'https://companyname.webim.ru/l/a/monitor/accounts-stat?=' \ --header 'Authorization: Basic d2FkbWluOm1lZ2FwYXNz'
- стандартная форма запроса (подробнее об этом и других эндпоинтах мониторинга смотрите в этой статье).
Пример ответа:
[{ "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.
Реакция: восстановить доступность базы данных. - Мониторинг доступности сервера из внешней сети
Проверку можно производить по ссылкам из пунктов 3 и 4, с удаленных серверов.
Реакция: проверить сетевые интерфейсы на сервере, маршруты до/с сервера.
Кроме этого, рекомендуем дополнительно использовать фоновый сервисatop
на сервере со сбором статистики раз в минуту. Он поможет оптимизировать процесс анализа состояния сервера.
Дополнительная информация
Рестарт сервисов для ротации логов не нужен.
Ротировать надо следующие логи: nginx (access, error), tornado, my PHP, fpm.
Желательно, чтобы логи были доступны одну неделю.
Больший объём логов будет занимать значительный объём диска.
При большой нагрузке рекомендуется проводить мониторинг блокировок, в частности при работе с MySQL 5.7.
Ниже перечислены некоторые конечные точки, которые могут быть полезны при мониторинге:
- /l/a/monitor - базовая информация о запущенном tornado server
- /l/a/monitor/timer-stats - что запущено в таймерах и сколько выполнялось
- /l/a/monitor/accounts-stat - оперативные показатели по аккаунтам (включая информацию о количестве чатов, сессий, страниц и прочего)
- /l/a/monitor/zabbix/channels - ошибки по каналам
- /l/a/monitor/object-stats - objgraph-данные от профайлера
- /l/i/instance-id - ID tornado
- /service/aux/check-php.php и т.п.- группа конечных точек для проверки healthcheck-a PHP и прочего
- /service/monitor/get-all-env-list.php - возвращает хост, окружение и адрес сервера
- /service/monitor/ - возвращает HTML-страницу для визуального мониторинга сервера
- /service/get-local-account-info.php - JSON с оперативной информацией по последнему периоду, чату и некоторым переменным
- /service/get_chats_by_date.php, /service/get_online_operators_by_date.php и т.п. - чаты за определённый период и похожие конечные точки
Возможности мониторинга Webim в примерах
Webim позволяет осуществлять мониторинг параметров на различных уровнях.
- Мониторинг ответов
Компоненты Webim Server позволяют осуществлять внешний мониторинг в реальном времени при помощи систем мониторинга наподобие Zabbix, благодаря чему можно анализировать задержку, код и тело ответа. - Таблицы мониторинга
Наиболее часто используемая для мониторинга информация агрегируется в виде таблиц, которые отправляются на Webim Server по запросам определённых эндпоинтов. - Мониторинг текущего состояния
Мониторинг текущего состояния в режиме реального времени, сохранять показатели в БД засчёт контроля системных параметров сервера и специализированных параметров Webim Server с помощью стандартных систем мониторинга. - Визуализация данных мониторинга
Полученные показатели можно визуализировать при помощи различных сервисов для аналитики и визуализации, таких как 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 и т.д.), осуществлять поиск необходимых объектов, строить графики и диаграммы по сложным выборкам. - Оповещения
Сверх этого, рекомендуется настраивать оповещающие системы, которые будут уведомлять сотрудников о превышении допустимых значений показателей через различные каналы (Telegram, SMS и т.д.).
Ping-сервис:
Оперативная информация по серверу (количество активных аккаунтов, сессий и т.д.):
Тестовая инициализация сессии чата:
Нагрузка на память:
Ping:
Количество открытых чатов и операторов онлайн на один аккаунт в моменте:
Количество объектов в очереди на запись, открытых сессий и т.д.:
Совмещённые графики системных параметров при исследовании инцидента:
Поиск записей о событии operator.update_status
внутри временного промежутка в GrayLog:
Графики величины времени ответа компонентов сервера: