понедельник, 24 января 2011 г.

Мониторинг сервиса Workflow

Прошел почти месяц без новых статей, что не очень хорошо. Но вот все предновогодние и послепраздничные задачи решены. Продолжим.

Рассмотрим задачу мониторинга работы сервиса Workflow. Т.е. каким образом можно определить остановку сервиса, или его медленную работу. Сервис бизнес-процессов постоянно сохраняет новые записи в журналах бизнес-процессов, если в экземплярах включено журналирование. А все строки содержаться в одной таблице [dbo].[dvtable_{388F390F-139E-498E-A461-A24FBA160487}].
Значит если
  • новых записей в таблице в таблице не появляется,
  • записи в таблице появляются гораздо медленнее чем нужно,
то это может свидетельствовать о зависании или о медленной работе сервиса Workflow. И как минимум нужно уведомить администратора.

Каким может быть решение.
  • Job на MS SQL, который периодически запускает процедуру проверки
  • Процедура, которая проверяет, появляются ли новые записи в таблице, и если появляются, то какой временной интервал между ними.
  • При возникновении проблем процедура отправляет уведомление по электронной почте администратору, средствами sp_send_dbmail.
 Текст процедуры выложен на ftp ftp://ftp.docsvision.com/blog/dvsp_support_check_workflow.sql
 Процедура определяет, завис ли сервис Workflow, в случае если завис, то отправляет письмо, и может (если задан соответствующий параметр) перезапустить сервис Workflow.

Как настроить.

1. Необходимо включить возможность отправки почтового сообщения сервером MS SQL. Как это сделать, можно посмотреть, например, здесь http://www.kodyaz.com/articles/sql2005-database-mail.aspx.

2. Создать job на базе данных, который бы с некоторой периодичностью  будет вызывать процедуру. Формат вызова.
exec dvsp_support_check_workflow 'адреса e-mail через точку с запятой', 'имя сервера, где работает сервис workflow', 'имя профиля', максимальная задержка между двумя записями лога, перезапускать или нет сервисы

Пример:
Отправка уведомления на два почтовых адреса admin1@example.com и admin2@example.com, при зависании, либо при разнице между двумя записями лога более 30 секунд. Сервис Workflow не перезапускать.
execute dvsp_support_check_workflow 'admin1@example.com; admin2@example.com','server1','mail_profile',30,0

Примечание 1: Процедура корректно работает только в случае если не настроен кластер Workflow. Если остановится один из узлов кластера, то зафиксировать это можно будет только косвенно - записи в журналах будут появляться реже

Примечание 2: Хотя бы в одном экземпляре процесса должен вестись журнал.

Примечание 3: Указывать имя сервера Workflow нужно только только для того, чтобы была возможность перезапустить его.