Class: LogStash::Outputs::Nagios
- Defined in:
- lib/logstash/outputs/nagios.rb
Overview
The nagios output is used for sending passive check results to nagios via the nagios command file.
For this output to work, your event must have the following fields:
* "nagios_host"
* "nagios_service"
These fields are supported, but optional:
* "nagios_annotation"
* "nagios_level"
There are two configuration options:
* commandfile - The location of the Nagios external command file
* nagios_level - Specifies the level of the check to be sent. Defaults to
CRITICAL and can be overriden by setting the "nagios_level" field to one
of "OK", "WARNING", "CRITICAL", or "UNKNOWN"
match => [ "message", "(error|ERROR|CRITICAL)" ]
output{
if [message] =~ /(error|ERROR|CRITICAL)/ {
nagios {
# your config here
}
}
}
Constant Summary
Constants included from Config::Mixin
Instance Attribute Summary
Attributes included from Config::Mixin
Attributes inherited from Plugin
Instance Method Summary collapse
Methods inherited from Base
#handle, #handle_worker, #initialize, #worker_setup, #workers_not_supported
Methods included from Config::Mixin
Methods inherited from Plugin
#eql?, #finished, #finished?, #hash, #initialize, #inspect, lookup, #reload, #running?, #shutdown, #teardown, #terminating?, #to_s
Constructor Details
This class inherits a constructor from LogStash::Outputs::Base
Instance Method Details
#receive(event) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/logstash/outputs/nagios.rb', line 52 def receive(event) return unless output?(event) if !File.exists?(@commandfile) @logger.warn("Skipping nagios output; command file is missing", :commandfile => @commandfile, :missed_event => event) return end # TODO(petef): if nagios_host/nagios_service both have more than one # value, send multiple alerts. They will have to match up together by # array indexes (host/service combos) and the arrays must be the same # length. host = event["nagios_host"] if !host @logger.warn("Skipping nagios output; nagios_host field is missing", :missed_event => event) return end service = event["nagios_service"] if !service @logger.warn("Skipping nagios output; nagios_service field is missing", "missed_event" => event) return end annotation = event["nagios_annotation"] level = @nagios_level if event["nagios_level"] event_level = [*event["nagios_level"]] case event_level[0].downcase when "ok" level = "0" when "warning" level = "1" when "critical" level = "2" when "unknown" level = "3" else @logger.warn("Invalid Nagios level. Defaulting to CRITICAL", :data => event_level) end end cmd = "[#{Time.now.to_i}] PROCESS_SERVICE_CHECK_RESULT;#{host};#{service};#{level};" if annotation cmd += "#{annotation}: " end # In the multi-line case, escape the newlines for the nagios command file cmd += (event["message"] || "<no message>").gsub("\n", "\\n") @logger.debug("Opening nagios command file", :commandfile => @commandfile, :nagios_command => cmd) begin File.open(@commandfile, "r+") do |f| f.puts(cmd) f.flush # TODO(sissel): probably don't need this. end rescue => e @logger.warn("Skipping nagios output; error writing to command file", :commandfile => @commandfile, :missed_event => event, :exception => e, :backtrace => e.backtrace) end end |
#register ⇒ Object
47 48 49 |
# File 'lib/logstash/outputs/nagios.rb', line 47 def register # nothing to do end |