- Онлайн-консультант Webim
- -
- База знаний
- -
- Для девопсов
- -
- Мониторинг
- -
- Рекомендации по настройке мониторинга
-
-
-
- 01. Обнаружение нового посетителя, ожидающего ответа
- 02. Выбор посетителя сайта из списка и начало диалога
- 03. Набор ответа посетителю, выбор шаблона
- 04. Запрос контактной информации у посетителя
- 05. Отправка файла посетителю
- 06. Кобраузинг
- 07. «Телепортация» пользователей
- 08. Переадресация диалога другому оператору
- 09. Отправка переписки на адрес электронной почты оператора
- 10. Назначение категории посетителю
- 11. Блокировка посетителя
- 12. Вставка гиперссылки в сообщение
- 13. Добавление заметок
- 14. Проверка орфографии
- Agent`s Handbook
- Как включить оповещения в Google Chrome
- Очереди в РМО
- Работа с офлайн-обращениями на РМО
-
- Алгоритмы назначения чатов
- Видимость диалогов
- Вход в систему
- Генератор лидов и автоприглашения
- График работы
- Добавление кнопки Webim в E-mail
- Закрытие диалогов
- Логотип компании в заголовке чата
- Мониторинг активности сотрудников
- Настройка языков
- Общие настройки организации
- Отделы
- Оценки
- Размещения и настройки кнопки на сайте
- Рассылки
- Регистрация операторов и назначение супервизоров
- Системные сообщения
- Список тайм-аутов
- Финансы
- Функции в каналах общения
- Шаблоны ответов
-
- Встраивание административного интерфейса через iframe
- Как узнать версию своего браузера
- Необходимые доступы на сервер
- Необходимые доступы с сервера
- Обработка файлов, загружаемых в чат
- Редактор настроек аккаунта (account config)
- Сетевые конфигурации сервиса Webim
- Системные требования Webim для веб-приложения операторов
- Системные требования Webim для посетителя
- Схемы сетевого размещения серверных компонентов
-
-
-
- Webim Mobile SDK 3.0 для интеграции в мобильные приложения iOS
- Webim Mobile SDK 3.0 для интеграции в мобильные приложения Windows Phone 8.1
- Информация о выпусках (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 Custom Channel API
- Как сделать ссылку кнопкой старта чата
- Маршрутизатор чатов
- Обработчики событий чата
- Процедура установки чата Webim на сайт в iframe
-
Рекомендации по настройке мониторинга
Параметры мониторинга
Круглосуточный мониторинг сервера базы данных осуществляется по следующим параметрам:
- Наличие процесса MySQL;
- Доступность порта 3306 с сервера клиента;
- Нагрузка на CPU с пороговым значением в 90% загрузки в течении 15 минут;
- Наличие 5% свободной оперативной памяти на сервере;
- Мониторинг здоровья жесткого диска по SMART и состояния RAID массива;
- Наличие ошибок при реплицировании, отставание репликации;
- Мониторинг корректности создания резервных копий MySQL, наличие файла последней резервной копии;
- Ежедневная или еженедельная проверка на корректность таблиц в базе данных;
- Мониторинг появления новых ошибок в логе сервера MySQL.
Требования к системе мониторинга
Рекомендуется настроить следующие виды мониторинга.
- Мониторинг нагрузки на CPU на сервере.
Критическое длительное значение - 90%.
Проверить запросы к nginx. Возможно, имеется ненормальная активность. - Мониторинг наличия процессов сервера, необходимых для работы Webim Server.
Для работы сервера используются следующие службы:- nginx
- php-fpm
- python server.py (порт 8260)
Необходимо контролировать наличие этих процессов на сервере.
Служба Необходимые процессы Действия при отсутствии процессов nginx master + worker процессы service nginx restart php-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.
Мониторинг осуществляется следующим образом:
<hostname>/client.php
Корректный ответ:
$ curl <hostname>/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=. </hostname><hostname>; secure; HttpOnly
Реакция: проверить лог /var/log/pro/error.log
Если имеются ошибки, то по ситуации исправить их.
Если недоступен или не отвечает php, то перезапустить:
service php5-fpm restart
-
Мониторинг данных.
Запрос:
curl https://service_user:service_pass@<hostname>:8260/l/a/monitor/accounts-stat
Пример ответа:
[{ "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": "<hostname>", "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 и т.д.).
operator.update_status
внутри временного промежутка в GrayLog: