Уведомление по электронной почте от Graylog2

У моего клиента есть сервер Greylog2, настроенный для объединения наших файлов журналов. У нас определено несколько потоков.

Я бы хотел, чтобы по электронной почте рассылались ежедневные уведомления - как минимум "Система получила x ошибок за последние 24 часа", в идеале - список из десяти наиболее частых ошибок.

Кто-нибудь реализовывал что-то подобное раньше - можете ли вы дать какие-либо советы или предложения? Я видел упоминание API REST в некоторых сообщениях на форуме, но не смог найти больше информации...


person laura    schedule 04.02.2013    source источник


Ответы (1)


На моем рабочем месте мы настроили задачи оповещения на основе задач rake + crontab. Это было до того, как стал доступен API оповещения на Graylog2-сервере (каталог плагинов). Мы по-прежнему используем задачи rake, поскольку они позволяют нам использовать модели и контроллеры rails.

В файл general.yaml добавляется следующее, чтобы мы могли найти идентификаторы потоков.

# section in general.yaml

streamalarms:
  error_stream: 50ef145471de3516b900000d

Ниже приведена фактическая задача rake:

namespace :gl2rake

    # Helper method for recording how long jobs took, which is used to debug / tune the jobs.
    def monitoring_wrapper(task)
    btime = Time.now
    task_name = task.name
    task_starting(task_name)

    if block_given?
      yield
    else 
      puts "No block given to monitoring_wrapper!"
    end

    etime = Time.now
    duration = (etime - btime)
    puts "Time elapsed: #{duration} seconds"
    task_completed(task_name, duration)
  end

    desc "Send an email if a job is written to the error queue. If there are more than 5 errored jobs in the last 6 minutes then send sms"
  task :error_queue => :environment do |task|
    monitoring_wrapper(task) do

      # the streams to check
      # I have customised the configuration class so that all of the stream ids are available. This can be automated.
      streams = Configuration.streamalarm_config('error_stream', '')

      # this method has been added to app/models/configuration.rb as a convenience.
      # def self.streamalarm_config(key, default)
      #   nested_general_config :streamalarms, key, default
      # end

      # get unix epoch time of 6 minutes ago
      six_mins_ago = 6.minutes.ago

      filters = {
        # optionally apply a message filter to the stream
        :message => "\"Writing job to error queue.\"",
        :date => "from #{six_mins_ago}" 
      }

      # get the stream
      stream = Stream.find_by_id(stream_id)

      if !stream
        $stderr.puts "Invalid stream id #{stream_id}"
        next
      end

      messages = MessageGateway.all_by_quickfilter(filters, nil, {:stream_id => stream_id})

      if messages.size > 0

        #alert - jobs written to error queue
        if messages.size > 5
            # send_sms_for_stream is a custom method we wrote that hooks into an sms api.
          send_sms_for_stream("There are #{messages.size} errored job(s) in the last 6 minutes. Check email for details", 'error_queue', stream.title)
        end

        message = "There are #{messages.size} errored job(s) in the last 6 minutes. (Stream #{stream.title})\n"

        messages.each do |m|
          message += "\t#{m.message}\n"
        end

        # sends an email to our designated alerting email
        send_mail("There are  #{messages.size} errored job(s)", message, 'error_queue', stream.title)
      end
    end
  end
end

Теперь это можно вызвать через задание cron: например

3-59/5 * * * * sudo rake -f /opt/graylog2-web-interface/Rakefile gl2rake:error_queue RAILS_ENV=production
person aj.esler    schedule 21.05.2013