Message::Passing::Manual::Cookbook - Common recipies
You can use Log::Dispatch, or any log system which will output into Log::Dispatch.
use Log::Dispatch; use Log::Dispatch::Message::Passing; use Message::Passing::DSL; my $log = Log::Dispatch->new; $log->add(Log::Dispatch::Message::Passing->new( name => 'myapp_aggregate_log', min_level => 'debug', output => log_chain { output zmq => ( class => 'ZeroMQ', connect => 'tcp://192.168.0.1:5558', ); }, )); $log->warn($_) for qw/ foo bar baz /;
As simple as using the command line interface:
message-pass --input ZeroMQ --input_options '{"socket_bind":"tcp://192.168.0.1:5558"}' \ --output File --output_options '{"filename":"/tmp/mylog"}'
And you've now got a multi-host log aggregation system for your application!
Assuming that you've got a regular syslogd setup and working, then you probably want to keep that. Having some of the log files on individual hosts can be very useful. Also, we'd like to avoid the script being a privileged user (which would be needed to get the standard port).
Therefore, we'll run a syslog listener on a high port (5140), and get the regular syslogd to ship messages to it. The listener will then forward from each host to a central aggregate logger (which is setup as above).
message-pass --input Syslog --output ZeroMQ --output_options '{"connect":"tcp://192.168.0.1:5558"}'
This should be easy, here's an example of what to add to rsyslogd.conf to get the syslog resent.
*.* =192.168.0.1:5140
If you have hosts with both applications and syslog that you want to aggregate, then you can easily do both at once. This also means that your apps ship logs to a local buffer process rather than directly across the network - which is more resilient to short network outages.
See Message::Passing.
To install Message::Passing, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Message::Passing
CPAN shell
perl -MCPAN -e shell install Message::Passing
For more information on module installation, please visit the detailed CPAN module installation guide.