Log4j has all the necessary plugins to support numerous scenarios, and I've
found three ways to support Graylog, for example:

1. GelfLayout + SocketAppender: send log messages straight to a Graylog
server. Simplest setup (no additional dependencies required), but not the
most reliable in theory.
2. GelfLayout + KafkaAppender: send log messages to Kafka first, then have
a consumer on the other side ingest those into Graylog. This style is more
flexible since the layout doesn't necessarily need to be a GelfLayout, but
this is the most efficient way to handle that scenario. The cons, however,
is that a message in memory that hasn't been sent to Kafka yet can be lost
in a crash scenario, similar to the SocketAppender limitation.
3. GelfLayout + FlumeAppender: send messages formatted for Graylog, but
persist locally first before passing off to another flume agent. I'm not
too familiar with this setup, but based on what Ralph has explained before,
this is probably the most reliable way to ensure logs are aggregated.

Similar patterns can be followed for other services like Logstash, Splunk,
etc.

Anyways, what I'm looking for here are suggestions on architecture here and
perhaps the desire to get a page written in the manual describing these
types of distributed system logging scenarios. If we can explain how to
follow these architectures, we can also find any inefficiencies in them to
improve on.

-- 
Matt Sicker <boa...@gmail.com>

Reply via email to