|
вынос прикладных логов из БД
|
|||
---|---|---|---|
#18+
Добрый день. Есть прикладное приложение на БД Oracle (хранимые pl/sql процедурки), осуществляющее запись определенных сообщений (прикладных логов) в прикладные таблицы. Какие можно предложить способы по выносу записи прикладных логов с БД (при этом предполагается, что архитектура приложения не измениться - по прежнему логика на БД), при этом не слишком уронив текущую производительность: - запись по db-link непосредственно в приемник, - запись в файлы с последующим асинхронным чтением (logstash и пр.) и отправкой на приемник, - запись в AQ очереди с последующим асинхронным вычитыванием и отправкой на приемник, - отправка сообщений через rest-api, - сохранение записи в текущие таблицы с настройкой репликации оперативных данных на удаленный приемник (например OGG) и удалением архивных данных (партиций) на источнике Что еще? Хотелось бы получить вариант при котором исходное приложение, отправившее сообщение, не дожидалось факта того получил ли его приемник или нет (независимо от того куда оно будет писать файл, таблица, web сервер и пр.), а продолжало свою работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2019, 13:17 |
|
вынос прикладных логов из БД
|
|||
---|---|---|---|
#18+
Еще можно в syslog писать, а на syslog-сервере бигдату прикрутить :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2019, 14:31 |
|
вынос прикладных логов из БД
|
|||
---|---|---|---|
#18+
Потеря сообщений была не критична и была такая система: 1. прикладное ПО вызывало PLOG, который писал в buffered AQ (PLOG был допилен для этого) 2. было несколько процессов, читающих AQ, и вызывающих rsyslog через UTL_TCP (кол-во процессов регулировалось настройкой в прикладной таблице) 3. дальше был logstash, ElasticSearch, Kibana (ELK), куда шли логи и с серверов приложений, что в одном месте можно было видеть клиентские запросы end-to-end. Java-программисты были обучены использовать Execution Context ID (ECID), который присутствовал во всех логах, а также v$session.ecid, v$active_session_history.ecid, что на любой вопрос, почему такая-то операция работала дольше обычного, поддержка могла по логам определять проблемное место (DB/AppServer). А дальше уже команда, отвечающая за конкретный компонент по ECID могла смотреть детально, в чем причина медленной работы. 4. вызов PLOG также добавлял в сообщение мета-атрибуты (некоторые из sys_context('USERENV') и ECID)) Не успел реализовать: 1. покрытие клиентского уровня (JavaScript) и генерации ECID на клиенте с последующей отправкой данных в микро-сервис логирования и пробросом ECID по всем остальным уровням стэка. 2. поддержка ECID в фоновых заданиях DBMS_SCHEDULER через соответствующий context: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
3. Автоматическое сохранение данных ASH по ECID, работавших более определенного времени, определенного владельцем сервиса, в отдельную БД (Performance Data Warehouse, которая являлась и AWR Warehouse ). 4. Автоматическая классификация сохраненных "долгих" ECID и известных проблем (ASH имеет SQL_ID. Все запросы по оптимизации в Jira тоже имели SQL_ID => Можно автоматически привязывать ECID/Jira Issue, чтобы оставлять для ручного разбора только новые проблемы) Были какие-то костыли на случай на случай того, что AQ не будет успевать разбираться в виде либо отключения логирования автоматически, либо переключения на non-buffered запись. В непромышленных средах разработчик мог указать параметром в прикладной таблице, чтобы использовалась запись логов в таблицу PLOG для удобства отладки. buffered AQ использовались по двум причинам: 1. производительность 2. минимизация нагрузки на БД, создаваемой подсистемой логирования ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2019, 14:34 |
|
вынос прикладных логов из БД
|
|||
---|---|---|---|
#18+
sbkЕсть прикладное приложение на БД Oracle (хранимые pl/sql процедурки), осуществляющее запись определенных сообщений (прикладных логов) в прикладные таблицы.Что вас сейчас не устраивает в имеющемся решении? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2019, 14:45 |
|
|
start [/forum/topic.php?fid=52&fpage=69&tid=1882183]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
others: | 253ms |
total: | 406ms |
0 / 0 |