Class: LogStash::Outputs::Nagios

Inherits:
Base show all
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

Config::Mixin::CONFIGSORT

Instance Attribute Summary

Attributes included from Config::Mixin

#config, #original_params

Attributes inherited from Plugin

#logger, #params

Instance Method Summary collapse

Methods inherited from Base

#handle, #handle_worker, #initialize, #worker_setup, #workers_not_supported

Methods included from Config::Mixin

#config_init, included

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

#registerObject



47
48
49
# File 'lib/logstash/outputs/nagios.rb', line 47

def register
  # nothing to do
end