logstash + redis + elasticsearch + kibana3

23 Jul 2013

Composition applied to logging has been a great sucess lately, this week I’ve verified how easy is to use logstash and friends with 48 servers distributed in two datacenters, I’ve created a script to deploy all programs in a single node.

$ bash <(wget -qO- https://raw.github.com/chilicuil/learn/master/sh/is/log-stack)

If you prefer using a node per service you’ll need to go your own way, it shouldn’t be too difficult.

##Extra, patterns

To send emails when a pattern is found, I used the grep and file logstash filters:

$ sudo service logstash-shipper stop
$ sudo vi /home/logstash/shipper.conf
$ sudo service logstash-shipper start

/home/logstash/shipper.conf

filter {
  grep {
    type => "syslog"
    match => ["@message","pattern"]
    add_tag => "Alert_flood"
    drop => false
  }

output {
  file {
    type => "syslog"
    tags => [ "Alert_flood" ]
    message_format => "%{@message}"
    path => "/tmp/logstash_alert"
  }

WARNING: shipper.conf doesn’t look exactly like this, these snippets must be integrated with your own files, copy and paste won’t work. If you’re not sure about the syntax, take a look at logstash documentation.

So, after rebooting the service logstash will add an “Alert_flood” tag to all messages where the pattern is found and will copy these messages (besides sending them to redis) to /tmp/logstash_alert.

Finally I wrote a script to send warning messages by email to the admins:

$ sudo crontab -l
*/1 * * * * /usr/local/bin/check_alerts_logstash.sh