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:
- source,ruby
-
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
cmd()
click to toggle source
# File lib/logstash/outputs/nagios_nsca.rb, line 127 def cmd return @cmd if @cmd @cmd = [@send_nsca_bin, "-H", @host, "-p", @port, "-d", ":"] @cmd = @cmd + ["-c", @send_nsca_config] if @send_nsca_config @cmd end
command_file_exist?()
click to toggle source
# File lib/logstash/outputs/nagios_nsca.rb, line 123 def command_file_exist? File.exists?(@send_nsca_bin) end
receive(event)
click to toggle source
# File lib/logstash/outputs/nagios_nsca.rb, line 67 def receive(event) # exit if type or tags don't match # catch logstash shutdown return if event == LogStash::SHUTDOWN # skip if 'send_nsca' binary doesn't exist if !command_file_exist? @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!("'", "’") 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>" message = "#{nagios_host}:#{nagios_service}:#{status}:#{msg}" @logger.debug("Running send_nsca command", :nagios_nsca_command => cmd.join(" "), :message => message) begin send_to_nagios(cmd, message) rescue => e @logger.warn( "Skipping nagios_nsca output; error calling send_nsca", :error => $!, :nagios_nsca_command => cmd.join(" "), :message => message, :missed_event => event ) @logger.debug("Backtrace", :backtrace => e.backtrace) end end
register()
click to toggle source
# File lib/logstash/outputs/nagios_nsca.rb, line 62 def register #nothing for now end
send_to_nagios(cmd, message)
click to toggle source
# File lib/logstash/outputs/nagios_nsca.rb, line 134 def send_to_nagios(cmd, message) Open3.popen3(*cmd) do |i, o, e| i.puts(message) i.close end end