[Catalyst] Anyone logging with RabbitMQ?
Tomas Doran
bobtfish at bobtfish.net
Sat Feb 25 08:56:26 GMT 2012
On 25 Feb 2012, at 00:12, Devin Austin wrote:
> Logging with RabbitMQ? Seems like a weird thing to do but I could be
> wrong. I use Munin to keep track of stats.
Logging != stats, logging is a superset
And you have N application servers, and you want to aggregate logs for them…
Pushing your logs into a message queue gains you a crap tonne of stuff - you have automatic aggregation (as they're all in one place), and you can have N consumers - one writing to a file, one pushing messages into elastic search, one doing bulk-inserts into a DB for usage logging, you can trivially tail the logs for N servers in one command etc..
See also:
http://logstash.net/
which should give you a nice idea of what you could do with this…
Notably, I also emit a load of more structured logging from my applications - i.e. something like:
$self->log('info', WebHit->new(
uri => $c->req->uri,
time_end => time(),
time_taken => $req_time,
memcache_hist => $req_memcache_hits,
memcache_misses => $req_memcache_misses,
… etc …
);
When dumped to the console, these just stringify nicely (Log::Message::Structured::Stringify::Sprintf)
The subset of messages which are specifically structured, as per above example (rather than just lines) then get pulled off RabbitMQ and stats come from them - so the same solution is nicely used for the stats collection and aggregation as well as general logging - by consuming a subset of the message queue (topic exchanges tfw!) I can draw graphs of memcache hit rate % aggregated by vhost and/or generally across all apps..
Cheers
t0m
More information about the Catalyst
mailing list