class LogStash::Outputs::NagiosNsca

The nagios_nsca output is used for sending passive check results to Nagios through the NSCA protocol.

This is useful if your Nagios server is not the same as the source host from where you want to send logs or alerts. If you only have one server, this output is probably overkill # for you, take a look at the 'nagios' output instead.

Here is a sample config using the nagios_nsca output:

output {
  nagios_nsca {
    # specify the hostname or ip of your nagios server
    host => "nagios.example.com"

    # specify the port to connect to
    port => 5667
  }
}

Public Instance Methods

receive(event) click to toggle source
# File lib/logstash/outputs/nagios_nsca.rb, line 66
def receive(event)
  # exit if type or tags don't match
  return unless output?(event)

  # catch logstash shutdown
  if event == LogStash::SHUTDOWN
    finished
    return
  end

  # skip if 'send_nsca' binary doesn't exist
  if !File.exists?(@send_nsca_bin)
    @logger.warn("Skipping nagios_nsca output; send_nsca_bin file is missing",
                 "send_nsca_bin" => @send_nsca_bin, "missed_event" => event)
    return
  end

  # interpolate params
  nagios_host = event.sprintf(@nagios_host)
  nagios_service = event.sprintf(@nagios_service)

  # escape basic things in the log message
  # TODO: find a way to escape the message correctly
  msg = event.sprintf(@message_format)
  msg.gsub!("\n", "<br/>")
  msg.gsub!("'", "&#146;")

  status = event.sprintf(@nagios_status)
  if status.to_i.to_s != status # Check it round-trips to int correctly
    msg = "status '#{status}' is not numeric"
    status = 2
  else
    status = status.to_i
    if status > 3 || status < 0
       msg "status must be > 0 and <= 3, not #{status}"
       status = 2
    end
  end

  # build the command
  # syntax: echo '<server>!<nagios_service>!<status>!<text>'  | \
  #           /usr/sbin/send_nsca -H <nagios_host> -d '!' -c <nsca_config>"
  cmd = %(echo '#{nagios_host}~#{nagios_service}~#{status}~#{msg}' |)
  cmd << %( #{@send_nsca_bin} -H #{@host} -p #{@port} -d '~')
  cmd << %( -c #{@send_nsca_config}) if @send_nsca_config
  cmd << %( 2>/dev/null >/dev/null)
  @logger.debug("Running send_nsca command", "nagios_nsca_command" => cmd)

  begin
    system cmd
  rescue => e
    @logger.warn("Skipping nagios_nsca output; error calling send_nsca",
                 "error" => $!, "nagios_nsca_command" => cmd,
                 "missed_event" => event)
    @logger.debug("Backtrace", e.backtrace)
  end
end
register() click to toggle source
# File lib/logstash/outputs/nagios_nsca.rb, line 61
def register
  #nothing for now
end