From a89da38da7f12c341e465852493b0b5e408a6258 Mon Sep 17 00:00:00 2001 From: Artem Sheremet Date: Wed, 22 Feb 2012 03:25:56 +0300 Subject: [PATCH] adding scanlog plugin and images * a couple of images: for ** ejabberd_scanlog ** netstat_bsd_ ** tcp_retries * ejabberd_scanlog plugin --- images/network/ejabberd_scanlog.png | Bin 0 -> 37069 bytes images/network/netstat_bsd_.png | Bin 0 -> 19551 bytes images/network/tcp_retries.png | Bin 0 -> 20610 bytes plugins/ejabberd/ejabberd_scanlog | 148 ++++++++++++++++++++++++++++ 4 files changed, 148 insertions(+) create mode 100644 images/network/ejabberd_scanlog.png create mode 100644 images/network/netstat_bsd_.png create mode 100644 images/network/tcp_retries.png create mode 100755 plugins/ejabberd/ejabberd_scanlog diff --git a/images/network/ejabberd_scanlog.png b/images/network/ejabberd_scanlog.png new file mode 100644 index 0000000000000000000000000000000000000000..974be823a1d102abda1b0acf802af99117d157bd GIT binary patch literal 37069 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 N?~d&4RB^2r{|{hmL5TnW literal 0 HcmV?d00001 diff --git a/images/network/tcp_retries.png b/images/network/tcp_retries.png new file mode 100644 index 0000000000000000000000000000000000000000..19582809113c9ba5d5508c30b961aafcae76f41d GIT binary patch literal 20610 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 RfI|gQcO(@gGQ^*F|9>e-09yb6 literal 0 HcmV?d00001 diff --git a/plugins/ejabberd/ejabberd_scanlog b/plugins/ejabberd/ejabberd_scanlog new file mode 100755 index 00000000..1daf8626 --- /dev/null +++ b/plugins/ejabberd/ejabberd_scanlog @@ -0,0 +1,148 @@ +#!/usr/bin/env ruby +require 'yaml' + +# ejabberd_scanlog revision 1 (Feb 2012) +# +# Scans ejabberd 2.1.x log for known error signatures and counts them +# +# Required privileges: read ejabberd log (user ejabberd or, in some cases, root) +# +# OS: Unix +# +# Configuration: +# env.log: ejabberd log file (defaults to /var...) +# +# Author: Artem Sheremet +# + +LOG_FILE = ENV['log'] || '/var/log/ejabberd/ejabberd.log' +CACHE_FILE = '/tmp/ejabberd_scanlog_cache' # cache file position + +DEFAULT_CACHE = { :start => 0 } + +debug_mode = ARGV.first == 'debug' + +begin + log_info = YAML.load IO.read(CACHE_FILE) +rescue + log_info = DEFAULT_CACHE +end + +if File.size(LOG_FILE) < log_info[:start] + # logrotate? + log_info = DEFAULT_CACHE +end + +new_data = '' +File.open(LOG_FILE, 'r') do |flog| + flog.seek(log_info[:start]) + new_data = flog.read +end + +LABELS = { + :wait_for => 'EJAB-1482 Crash when waiting for item', + :ejabberd_odbc_failure => 'EJAB-1483 ODBC sup failure (wrong PID?)', + :ejabberd_odbc_failure_echo => 'EJAB-1483 ODBC sup wrong PID failure echo', + :dns => 'DNS failure', + :database => 'Database unavailable/too slow', + :auth_error => 'The auth module returned an error', + :timeout => 'State machine terminated: timeout', + :mysql_shutdown => 'MySQL disconnected', + :mysql_refused => 'Connecting to MySQL: failed', + :hook_timeout => 'Timeout while running a hook', + :sql_transactions_exceeded => 'SQL transaction restarts exceeded', + :unexpected_info => 'Unexpected info', + :other_sql_cmd_timeout => 'Other sql_cmd timeout', + :UNKNOWN => 'Unknown error/warning' +} +def log_type(text) + if text.include? 'ejabberd_odbc_sup' + :ejabberd_odbc_failure + elsif text.include? "mod_pubsub_odbc,'-unsubscribe" + :ejabberd_odbc_failure_echo + elsif text.include? 'You should check your DNS configuration' + :dns + elsif text.include? 'Database was not available or too slow' + :database + elsif text.include? 'wait_for_' + :wait_for + elsif text.include?('State machine') and + text.include?('terminating') and + text.include?('Reason for') and + text.include?('timeout') + :timeout + elsif text.include?('The authentication module') and + text.include?('returned an error') + :auth_error + elsif text.include?('mysql') and text.include?('Received unknown signal, exiting') + :mysql_shutdown + elsif text.include?('mysql') and text.include?('Failed connecting to') + :mysql_refused + elsif text.include?('ejabberd_hooks') and text.include?('timeout') + :hook_timeout + elsif text.include?('SQL transaction restarts exceeded') + :sql_transactions_exceeded + elsif text.include?('nexpected info') + :unexpected_info + elsif text.include?('timeout') and text.include?('sql_cmd') + :other_sql_cmd_timeout + else + puts "Cannot parse text: #{text}" if debug_mode + :UNKNOWN + end +end + +new_data.split("\n=").each { |report| + next if report.empty? + report =~ /\A(\w+) REPORT==== (.*) ===\n(.*)\z/m + type, time, text = $1, $2, $3 + next unless type and time and text + + log_info[type] = (log_info[type] || 0) + 1 + if sub_type = log_type(text) + log_info[sub_type] = (log_info[sub_type] || 0) + 1 + end +} + +log_info[:start] += new_data.size +File.open(CACHE_FILE, 'w') { |f| f.write log_info.to_yaml } + +if ARGV.first == 'config' + puts <