журнал или аудит весной и база данных для двух целей, сколько времени занял метод, задача и задание, а также хранить расчеты для целей аудита отладки

Наше приложение использует сервер java/sql. У нас есть задания ETL (около 35 для разных восходящих потоков), использующие спринт-пакет. Часть кода находится в Java, а часть в базе данных. Мы хотим отслеживать жизненный цикл задания из базы данных. Например. когда началось задание, когда был вызван конкретный компонент, когда был вызван метод / хранимая процедура и сколько времени это заняло. Цель состоит в том, чтобы проверить работоспособность того, какой компонент занимает больше времени, и в случае, если какая-то хранимая процедура занимает много времени в производстве, мы должны иметь возможность запрашивать базу данных. Более того, мы также хотим хранить промежуточные вычисления для аудита и отладки.

Это отслеживание времени и промежуточные вычисления будут храниться помимо обычного ведения журнала приложений.

Текущее решение, которое мы реализовали, — это нормализованные таблицы в базе данных (например, задание, задача, статус и т. д.), для которых у нас есть оболочка хранимой процедуры, а также классы java для вызова этих хранимых процедур.

Мы не переделываем наше приложение, поэтому хотели проверить, как лучше всего отслеживать такую ​​информацию. АОП? но я считаю, что обычно это требуется до и после, а как насчет промежуточных вычислений, которые мы хотим сохранить?

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


person Naren    schedule 21.02.2016    source источник


Ответы (2)


Бесплатный инструмент с открытым исходным кодом, который вам следует рассмотреть, — это Jamon. Это всеобъемлющая структура мониторинга, которая предоставляет множество полезные функции:

JAMon позволяет разработчикам отслеживать производительность и поведение своих приложений с помощью предустановленных модулей. Существуют модули, которые автоматически отслеживают: SQL, запросы HTTP-страниц, компоненты Spring, вызовы методов, Log4j и исключения. Другие модули часто легко построить. JAMon отслеживает следующие показатели для любого из элементов, которые он отслеживает в модулях: хиты, общее количество, среднее, минимальное, максимальное и параллелизм (среднее, максимальное, текущее/активное), и это лишь некоторые из них.

Теперь о хранении вычислений. Я бы предложил разбить ваши методы на более мелкие подметоды, а затем использовать АОП или любой другой инструмент для захвата возвращаемого значения и выполнения любой операции с этими данными.

Кроме того, если вам нужно получить более подробную информацию об уровне базы данных, я бы рекомендовал log4jdbc, что даст вам хороший аудит и метрики вокруг вызовов jdbc. Например, вы сможете получить время выполнения, входные и выходные параметры вызываемых процедур, параметры, предоставляемые любым операторам.

Вы даже можете расширить этот инструмент, чтобы обеспечить индивидуальное поведение (проверить только некоторые процедуры, сделать что-то конкретное с собранными данными.

person Guillaume    schedule 21.02.2016
comment
Вау, спасибо за варианты. JAMon и log4jdbc выглядят хорошо, а также спасибо за совет о том, как правильно использовать АОП, если нужно сохранять промежуточные результаты. Позвольте мне изучить JAMon и log4jdbc, возможно, я вернусь за вопросами. Однако один быстрый вопрос: как log4jdbc, так и JAMon, можно ли использовать в производстве или они интенсивно используют память / процессор? - person Naren; 21.02.2016
comment
Jamon предназначен для производства, но не для log4jdbc. Однако я использовал настроенную версию log4jdbc в рабочей среде для аудита только части системы (хранимые процедуры, используемые для передачи данных во внешние системы). Накладные расходы довольно малы по сравнению с самим вызовом процедуры. - person Guillaume; 22.02.2016
comment
Я забыл ответить на это ранее, сделал сейчас. Хотя я не мог использовать ваше предложение, но правильно подчеркивает правильный подход. - person Naren; 18.12.2016

Аспекты — очень хороший способ изолировать временной код в одном месте.

Хранимые процедуры кажутся мне ненужными. Простой SQL INSERT должен помочь. Это нормально, если вы используете хранимую процедуру в качестве интерфейса для сокрытия схемы от пользователей, но я сомневаюсь, что эта таблица будет сильно развиваться.

Ведение журнала, синхронизация и аудит — это «привет мир» аспектно-ориентированного программирования.

person duffymo    schedule 21.02.2016
comment
Спасибо, duffymo, но позволит ли AOP отслеживать работу. то есть какой метод начался, какой метод закончился и когда? в настоящее время я могу запросить кучу таблиц с именем задания в предложении where, и это дает мне построчный отчет о том, что произошло во время выполнения задания. Извините, я новичок в АОП, поэтому, пожалуйста, не обращайте внимания, если это выглядит довольно просто. - person Naren; 21.02.2016
comment
Отследить работу? Нет, если вы не скажете, как это сделать. Хороший способ справиться с этим — передать какой-либо GUID для конкретного задания и передать его аспекту, чтобы записать его для каждой записи. Затем, когда вы запрашиваете базу данных, вы можете группировать записи по GUID и упорядочивать их по отметке времени, чтобы увидеть, что и когда произошло. - person duffymo; 21.02.2016
comment
Круто, так что, может быть, я могу использовать JobID, который уникален. Никто в моей команде не работал с АОП, на самом деле команда только начала изучать Spring, хотя у всех есть от 5 до 8 лет опыта работы с Java. примерно, сколько времени, по вашему мнению, потребуется, чтобы изучить АОП? и примерно сколько времени нужно для создания AOP-фреймворка по моему требованию? Как вы сказали, это программа типа hello world для АОП, поэтому я не ожидаю многого. - person Naren; 21.02.2016
comment
Более того, можно ли через АОП хранить промежуточные вычисления, происходящие с методом? - person Naren; 21.02.2016
comment
Создать структуру АОП? С какой стати ты это делаешь? Используйте Весну. Я не знаю, что означает хранить промежуточные вычисления. Эти операции должны выполняться методами, которые вы определяете по времени. Похоже, вы собираетесь устроить беспорядок, попросив АОП делать то, чего он не должен. - person duffymo; 21.02.2016
comment
Никто не сердится; хорошо, когда тебе говорят, что ты вот-вот упадешь в яму. - person duffymo; 21.02.2016