Обнаружение проблем при выполнении стороннего кода. (работы NAS)

Я пытаюсь выяснить одну проблему, но я изо всех сил пытаюсь найти жизнеспособное решение. Вопрос скорее в теории, чем в реализации. Мне просто нужны другие точки зрения.

Проблема в:

Мы используем серверы приложений Navision (NAS), которые выполняют какую-то бизнес-логику, репликации, обработку XML и прочее через Reports и Codeunits. Иногда некоторые из этих заданий застревают в цикле или в тупике и т. д.

Идеальным решением было бы исправить проблемы в модулях Codeunits и Reports, чтобы они могли решать свои собственные проблемы; Но это не вариант. У меня действительно нет доступа к коду этих заданий.

Я пытаюсь найти способ хотя бы частично автоматизировать обнаружение этих проблем. Единственный способ, который я могу придумать, - это сохранить некоторую статистику потребления ресурсов (ЦП, ЦП SQL и ввод-вывод, возможно, время простоя) для каждого задания и сравнить ее во время следующего запуска. Если будут какие-то серьезные различия, это вызовет тревогу.

Если работа, которая занимает 4 часа, зависает в начале процесса, я хотел бы знать, что в разумные сроки, а не через 6 часов, когда это очевидно.

У меня есть полный доступ к SQL-серверу, NAS-серверу и его процессу. Я использую С# с .NET 4

Спасибо.


person Ondřej Fitzek    schedule 15.11.2013    source источник
comment
Я могу только представить, что вы можете использовать свой доступ к SQL Server, чтобы проверить, есть ли в конкретной таблице новые записи?   -  person pungggi    schedule 15.11.2013
comment
Это один из вариантов. Но не все задания меняют некоторые данные таблицы. Некоторые из них просто читают.   -  person Ondřej Fitzek    schedule 18.11.2013
comment
Я думаю, вы должны использовать свое решение для хранения некоторой статистики потребления ресурсов (ЦП, SQL-процессор и ввод-вывод, возможно, время простоя)   -  person pungggi    schedule 20.11.2013
comment
К сожалению, без доступа к выполняемому коду C/AL, я боюсь, что упомянутое вами решение - это все, что вы можете сделать. Если бы вы могли даже отредактировать codeunit, который запускает NAS, у вас было бы гораздо больше возможностей, но в противном случае вы как бы застряли.   -  person WiredWiz    schedule 13.12.2013
comment
Что ж, у меня есть доступ к модулям кода, которые являются частью обработки очереди заданий (1 448 449). Если вы имеете в виду те, о каких вариантах вы говорили?   -  person Ondřej Fitzek    schedule 25.12.2013


Ответы (1)


Учитывая, что у вас есть доступ к некоторым модулям кода, вам также потребуется свободная таблица для использования в вашей установке Navision для этого решения. Вы можете создать таблицу журнала с первичным ключом типа int, заданным как автонумерация, и на протяжении всего процесса вставлять запись в таблицу с отметкой времени. После этого вы захотите вызвать FINDFIRST для этой таблицы журнала, чтобы заставить вашу вставленную запись записывать в журнал транзакций SQL. Затем вы можете отслеживать эту таблицу с помощью внешнего процесса, и если отметка времени последней записи длиннее определенного порога (вероятно, около 30 минут), вы можете отправить электронное письмо или, как вы хотите, предупредить себя. Вы, вероятно, захотите очищать эту таблицу перед каждым запуском, чтобы не раздувать базу данных ненужными записями. В качестве альтернативы, вместо использования таблицы, вы можете просто записать файл на диск и неоднократно обращаться к файлу через код процесса, тем самым обновляя дату последнего изменения файла. Затем ваш инструмент мониторинга может таким же образом проверить дату последнего изменения файла и отправить предупреждение, если он слишком долго остается нетронутым, пока процесс все еще выполняется.

person WiredWiz    schedule 21.04.2014