Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вынос прикладных логов из БД / 5 сообщений из 5, страница 1 из 1
16.08.2019, 13:17
    #39850326
sbk
sbk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынос прикладных логов из БД
Добрый день.

Есть прикладное приложение на БД Oracle (хранимые pl/sql процедурки), осуществляющее запись определенных сообщений (прикладных логов) в прикладные таблицы.

Какие можно предложить способы по выносу записи прикладных логов с БД (при этом предполагается, что архитектура приложения не измениться - по прежнему логика на БД), при этом не слишком уронив текущую производительность:
- запись по db-link непосредственно в приемник,
- запись в файлы с последующим асинхронным чтением (logstash и пр.) и отправкой на приемник,
- запись в AQ очереди с последующим асинхронным вычитыванием и отправкой на приемник,
- отправка сообщений через rest-api,
- сохранение записи в текущие таблицы с настройкой репликации оперативных данных на удаленный приемник (например OGG) и удалением архивных данных (партиций) на источнике

Что еще?

Хотелось бы получить вариант при котором исходное приложение, отправившее сообщение, не дожидалось факта того получил ли его приемник или нет (независимо от того куда оно будет писать файл, таблица, web сервер и пр.), а продолжало свою работу.
...
Рейтинг: 0 / 0
16.08.2019, 13:30
    #39850337
rf_mail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынос прикладных логов из БД
...
Рейтинг: 0 / 0
16.08.2019, 14:31
    #39850383
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынос прикладных логов из БД
Еще можно в syslog писать, а на syslog-сервере бигдату прикрутить :)
...
Рейтинг: 0 / 0
16.08.2019, 14:34
    #39850386
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынос прикладных логов из БД
Потеря сообщений была не критична и была такая система:
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.
SQL> exec dbms_session.set_context('E2E_CONTEXT', 'ECID_UID', sys_guid())

PL/SQL procedure successfully completed.

SQL> select ecid from v$session where sid=sys_context('userenv', 'sid');

ECID
----------------------------------------------------------------
903B113E3E61530FE053DB1F13AC1B06


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. минимизация нагрузки на БД, создаваемой подсистемой логирования
...
Рейтинг: 0 / 0
16.08.2019, 14:45
    #39850392
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вынос прикладных логов из БД
sbkЕсть прикладное приложение на БД Oracle (хранимые pl/sql процедурки),
осуществляющее запись определенных сообщений (прикладных логов) в прикладные таблицы.Что вас сейчас не устраивает в имеющемся решении?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вынос прикладных логов из БД / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]