На работе мы создаем распределенное приложение (возможно, на нескольких компьютерах в локальной сети, возможно, позже на нескольких континентах в WAN + VPN). Мы не хотим, чтобы файлы журналов были локальными для каждой машины (заполнение диска и невозможность просмотра в совокупности), поэтому нам необходимо централизовать ведение журнала по сети. Большинство журналов не будут важны, поэтому UDP подходит для них, но некоторые из них теряют важные предупреждения и должны быть надежно доставлены, что подразумевает TCP. Мы беспокоимся о том, чтобы перегружать сеть, если протокол протоколирования слишком чат, или перетаскивая приложения в обход, если он не реагирует.
Некоторые возможности, которые я рассмотрел, следующие:
- syslog (это кажется идеальным, но у моего босса есть анимус против этого, поэтому я не могу его выбрать).
- scribe из facebook (но он кажется немного тяжеловесным с сервером на каждом компьютере - не каждое сообщение журнала нуждается в сверхнадежности).
- используя очередь сообщений, например rabbitmq, которая может иметь несколько очередей, настроенных на разные уровни безопасности транзакций.
- худший случай, я могу написать свой собственный с нуля.
Есть ли у вас другие предложения? Какие централизованные каротажные решения вы использовали и насколько хорошо они работали?
Изменить: Я наклонялся к писцу, потому что его дизайн "store-and-forward" отделяет запущенное приложение от сетевой латентности. Но после попытки установить его, я обнаружил, что (1) он недоступен в виде двоичного пакета - в настоящее время это непростительно - и (2) он тесно зависит от библиотеки (бережливости), которая также недоступна в виде бинарного пакета! И хуже всего, он даже не будет компилироваться должным образом. Это не код качества выпуска, даже в открытом исходном коде.