Отслеживание сеанса пользователя на сервере приложений Wildfly в сеансе БД - PullRequest
0 голосов
/ 23 января 2020

Давайте возьмем базовую c архитектуру веб-приложения, то есть клиент <=> веб-сервер <=> сервер приложений <=> DB

Во многих случаях нам необходимо отслеживать активность пользователей от начала до конца через приложение. Например: какой сеанс пользователя соответствует плохо работающему запросу в БД? et c

У нас есть четкое средство получения данных сеанса в базе данных (v $ session для нашей (или любой) Oracle БД). Если мы go вернемся к клиентской части, у нас есть файлы cookie, которые мы отслеживаем с помощью инструмента M & A (Dynatrace), а также идентификаторы пользователей отслеживаются в журналах веб-сервера и сервера приложений.

Однако я не могу установить соединение между записью сеанса БД и заданным c сеансом http пользователя, поскольку все сеансы в БД помечены одинаковым идентификатором пользователя приложения (идентификатор пользователя Wildfly, используемый для установления sh соединения с источником данных ).

Не могли бы вы помочь, как можно установить это соединение, чтобы можно было проследить весь путь пользователя?

Я попытался проверить консоль jmx на наличие mbean, которое может дать эту информацию, но может не найти один. Таблица v $ sql_bind_capture предоставляет данные переменных связывания. Если нам повезет, некоторые из переменных связывания могут быть использованы для обозначения одного пользователя [таких переменных, как идентификатор пользователя (или) местоположение, если оно используется), но это не верный способ отслеживания всех пользователей.

Ответы [ 2 ]

0 голосов
/ 30 января 2020

В вашей архитектуре сервер приложений является единственным компонентом, имеющим всю информацию для отслеживания всего путешествия. База данных должна рассматриваться как хранилище, которое не имеет никакого представления о контексте. Я обычно использую MessageDiagnosticContext (MD C), чтобы предоставить контекстную информацию от уровня веб-клиента до уровня сервера приложений для регистрации такого путешествия. Если этого недостаточно, вы можете настроить что-то вроде logsta sh для сбора всей информации со всех компонентов.

0 голосов
/ 24 января 2020

Добро пожаловать в StackOverflow.

Если у вас есть доступ к коду клиентского приложения, вы можете установить в клиенте информацию, позволяющую связать сеанс с указанным клиентским компьютером c. Да, но это предполагает соединение клиент-сервер и может не работать для сети, поскольку у вас могут быть пулы соединений.

Вы можете использовать DBMS_APPLICATION_INFO пакет и функцию SET_MODULE в любое время в клиенте. Затем вы можете увидеть эту информацию, просматривая информацию о сеансе Oracle. Посмотрите в документации размер этих полей, первое из них составляет около 64 символов, а действие довольно короткое.

-- Set Connection Info on Client
DBMS_APPLICATION_INFO.SET_MODULE( 
  'app_name_v1.2.3.4 3rd floor, office 212', 
  'Opened the main window'); 

-- Clear out connection info on Client (not necessary)
DBMS_APPLICATION_INFO.SET_MODULE(null,null); 
...