Минимальные накладные расходы на распределенную библиотеку журналов событий? - PullRequest
5 голосов
/ 20 июня 2009

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

Средство ведения журнала событий должно быть максимально приближено к нулю для метателя событий, насколько это возможно, должно содержать структурированную информацию (в отличие от сообщений текстового журнала) и должно поддерживать распределенное развертывание (многие поля выдают много событий).

В прошлой жизни у нас была система на основе UDP, которая работала хорошо, потому что у нас был большой контроль над системой (минимизированная потеря пакетов). Четные метатели будут запускать UDP-пакеты, которые будут перехвачены и занесены в журнал на других компьютерах. Я ищу что-то похожее, надеюсь, с открытым исходным кодом, готовое к использованию и развернутое в более общих сетях. Кроме того, я открыт для предложений о том, как построить что-то вроде этого.

Это должно работать на нескольких языках, но будет в первую очередь предназначено для Java и Python. Участвующие (вызывающие события) заявки будут различаться; некоторые будут веб-приложениями, другие - пакетно-ориентированными приложениями. Результаты, скорее всего, будут жить в Hadoop / HDFS / HBase.

Ответы [ 3 ]

3 голосов
/ 20 июня 2009

Если вы хотите пойти по маршруту UDP (как вы, кажется, довольны этим), и Java является опцией, то проверьте Log4j и его поддержку передачи UDP через Log4j UDPAppender .

LoggingEvent примет java.lang.Object в качестве сообщения, поэтому оно довольно общее, и вы можете добавить в него любые данные, которые захотите. Если вы идете по сети, он должен (скорее всего) быть сериализуемым, и, учитывая, что вы хотите UDP, должен иметь соразмерный размер - 64 КБ или меньше, а затем зависеть от транспортного уровня). Вам просто нужно перехватить LoggingEvent на стороне сервера и затем обработать его так, как вы хотите.

Обратите внимание, что UDP-приложение поставляется как компаньон компонент для Log4j, и вам придется создавать его самостоятельно. Но это тривиально.

2 голосов
/ 20 июня 2009

Вы можете использовать старый добрый * nix Syslog. Он имеет очень небольшие накладные расходы и в основном используется через UDP или локальные сокеты UNIX, но может использовать TCP, если вам нужна надежная регистрация. Работает для моего (Python / Perl, в основном, но это полностью язык / платформенно-независимый) как шарм.

Извините, я не знаком с Java, но с точки зрения функциональности, похоже, это хорошая библиотека, которую я нашел: http://syslog4j.org/

Редактировать : Быстрый поиск в Google обнаружил статью под названием " Надежная регистрация событий с Syslog ", которая, кажется, довольно подробно описывает эту тему. Извините, я неправильно прочитал это после публикации и подумал, что это библиотека * nix syslog, но это не так.

0 голосов
/ 20 июня 2009

Звучит как потенциальный кандидат на обмен сообщениями (выстрели и забудь). Я, в основном, человек .NET, поэтому не знаю, какие существуют каркасы для Java. Но я быстро посмотрел, есть ли какие-нибудь приложения для обмена сообщениями для log4j (я часто использую log4net) - у IBM есть статья о приложении WebSphere MQ JMS , которая может быть вам полезна.

Так что вместо того, чтобы воспринимать мой ответ как пропаганду использования WebSphere MQ - пожалуйста, примите в качестве предложения рассмотреть возможность обмена сообщениями - существует множество платформ обмена сообщениями с открытым исходным кодом - RabbitMQ является лишь одним примером. 1007 *

...