I have been playing with Graylog2 on my Mac today. Since the setup guides are all for Debian and not fully compatible with Mac OS X I thought I'd mention the changes I needed to make to get thing rolling smoothly. The guides are good, so go read them in the wikis on Github. I won't re-iterate them, only point out the minor changes and tweaks I had to make.
Graylog2 comes in two main parts. The server and the web interface. I'll start with the server component.
Install The Server
Mac OS X has java bundled with the OS (for now). There is no need to install anything. The configuration file needs one non-obvious tweak.
mongodb_host = 127.0.0.1 # localhost
Java resolves localhost to the strangest thing. It tries to connect to the Bonjour name and external IP (e.g. Martin's Mac/192.168.0.2) instead of 127.0.0.1 which is what you want. Instead of opening MongoDB up to external access I changed the configuration to point to the loopback IP directly.
Starting The Server
I didn't get the daemon script to start and did not investigate is since I run Graylog2 for evaluation and development and like seeing the output. Starting by running the jar file requires that you sudo.
sudo java -jar graylog2-server.jar debug
That gets Graylog2 running and spitting out a lot of fun info so you know you are logging thing as you expect.
Installing The Web Interface
You can follow most of those steps if you don't have rails and Bundler and that stuff installed. For testing and development, I would suggest running the interface using Passenger Standalone instead of Apache. And, you install Passenger as a gem and not apt, of-course.
The cool thing about installing passenger standalone is that it will compile and run itself the first time you call passenger start. It will take a few minutes that first time but after that it will start instantly.
Logging from your Rails app
In the Rails app I want to log from I installed Graylog2 Exceptions. It is a small Rack middleware with practically no configuration. Only problem is that it has not been updated to comply with the current version of the Graylog2 server. Until it is updated, you have to modify the source for it. A very small mod. For me it is ok as long as I am still on my Mac and not a server.
> cd /to/my/app/dir > bundle open graylog2_exceptions
This should get you the installed gem open in your editor. In the file lib/graylog2_exceptions.rb you need to add the version parameter to the notification message. Possibly this should be added to the gelf gem instead. I am not sure how that version string is supposed to be used.
Here is the modified method that does the actual notification:
def send_to_graylog2 err begin notifier = GELF::Notifier.new(@args[:hostname], @args[:port]) puts notifier.notify!( :version => "1.0", :short_message => err.message, # <- this line is new!!! :full_message => err.backtrace.join("\n"), :level => @args[:level], :host => @args[:local_app_name], :file => err.backtrace.split(":"), :line => err.backtrace.split(":") ) rescue => i_err puts "Graylog2 Exception logger. Could not send message: " + i_err.message end end
So, that is it. Finally I get all my exceptions in Graylog2. To try it out you can just raise some dummy exception – raise "Dummy Exception Error" – here and there and see them pop up in Graylog2.