premier commit

tags/smeserver-zabbix-agent-0.4.3-1
Daniel Berteaud 13 years ago
commit 903736c78f
  1. 20
      createlinks
  2. 1
      root/etc/e-smith/db/configuration/defaults/zabbix-agent/RemoteCommands
  3. 1
      root/etc/e-smith/db/configuration/defaults/zabbix-agent/ServerPort
  4. 1
      root/etc/e-smith/db/configuration/defaults/zabbix-agent/Servers
  5. 1
      root/etc/e-smith/db/configuration/defaults/zabbix-agent/TCPPort
  6. 1
      root/etc/e-smith/db/configuration/defaults/zabbix-agent/access
  7. 1
      root/etc/e-smith/db/configuration/defaults/zabbix-agent/active
  8. 1
      root/etc/e-smith/db/configuration/defaults/zabbix-agent/passive
  9. 1
      root/etc/e-smith/db/configuration/defaults/zabbix-agent/status
  10. 1
      root/etc/e-smith/db/configuration/defaults/zabbix-agent/type
  11. 20
      root/etc/e-smith/templates/etc/crontab/zabbix_mail_stats
  12. 11
      root/etc/e-smith/templates/etc/sudoers/00zabbixAgentAlias
  13. 2
      root/etc/e-smith/templates/etc/sudoers/30zabbixAgent
  14. 5
      root/etc/e-smith/templates/etc/zabbix/zabbix_agent.conf/00header
  15. 6
      root/etc/e-smith/templates/etc/zabbix/zabbix_agent.conf/10zabbixServers
  16. 5
      root/etc/e-smith/templates/etc/zabbix/zabbix_agent.conf/20timeout
  17. 14
      root/etc/e-smith/templates/etc/zabbix/zabbix_agent.conf/30monitor10mysql
  18. 6
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/00header
  19. 12
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/10zabbixServers
  20. 6
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/15hostname
  21. 12
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/20listen
  22. 7
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/30fork
  23. 20
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/40freq
  24. 8
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/50active_passive
  25. 5
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/60remoteCommands
  26. 21
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/70logs
  27. 5
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/80timeout
  28. 28
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_asterisk
  29. 13
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_certExpire
  30. 14
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_cpuNum
  31. 42
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_diskIO
  32. 9
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_extIP
  33. 10
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_lvm
  34. 15
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_mailIn
  35. 16
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_mailOut
  36. 37
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_megaRaid
  37. 24
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_memory
  38. 16
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_mysql
  39. 62
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_netStats
  40. 11
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_sensors
  41. 43
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_smart
  42. 53
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_squid
  43. 16
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_swRaid
  44. 12
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_swap
  45. 34
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_ups
  46. 11
      root/etc/e-smith/templates/etc/zabbix/zabbix_agentd.conf/90UserParameters_yumUpdates
  47. 142
      root/var/lib/zabbix/bin/cert_expire.pl
  48. 210
      root/var/lib/zabbix/bin/check_asterisk
  49. 36
      root/var/lib/zabbix/bin/check_lvm
  50. 95
      root/var/lib/zabbix/bin/logtail.pl
  51. 15
      root/var/lib/zabbix/bin/mail_in.sh
  52. 11
      root/var/lib/zabbix/bin/mail_out.sh
  53. 23
      root/var/lib/zabbix/bin/mailstatus.pl
  54. 137
      root/var/lib/zabbix/bin/mdstat-parser.pl
  55. 226
      root/var/lib/zabbix/bin/megaraid-parser.pl
  56. 5
      root/var/lib/zabbix/bin/mysqladmin_status
  57. 103
      root/var/lib/zabbix/bin/parse_mail_in.pl
  58. 70
      root/var/lib/zabbix/bin/parse_mail_out.pl
  59. 57
      root/var/lib/zabbix/bin/sensors
  60. 403
      smeserver-zabbix-agent.spec

@ -0,0 +1,20 @@
#!/usr/bin/perl -w
use esmith::Build::CreateLinks qw(:all);
# Templates to expand
templates2events("/etc/zabbix/zabbix_agent.conf", qw(zabbix-agent-update bootstrap-console-save));
templates2events("/etc/zabbix/zabbix_agentd.conf", qw(zabbix-agent-update bootstrap-console-save));
templates2events("/etc/sudoers", "zabbix-agent-update");
templates2events("/etc/rc.d/init.d/masq", "zabbix-agent-update");
templates2events("/etc/crontab", "zabbix-agent-update");
# Services to restart
safe_symlink("restart", "root/etc/e-smith/events/zabbix-agent-update/services2adjust/zabbix-agent");
safe_symlink("adjust", "root/etc/e-smith/events/zabbix-agent-update/services2adjust/masq");
# Start and stop links
service_link_enhanced("zabbix-agent", "S98", "7");
service_link_enhanced("zabbix-agent", "K10", "6");
service_link_enhanced("zabbix-agent", "K10", "0");

@ -0,0 +1,20 @@
{
if ((${'zabbix-agent'}{'status'} || 'disabled') eq 'enabled'){
$OUT .=<<"HERE";
# Parse mail logs and write stats in zabbix tmp directory
*/10 * * * * root /var/lib/zabbix/bin/mail_in.sh
*/10 * * * * root /var/lib/zabbix/bin/mail_out.sh
HERE
if ((${'zabbix-agent'}{'StatusMail'} || 'disabled' ) eq 'enabled'){
$OUT .=<<"HERE";
# Send a status mail
*/15 * * * * root /var/lib/zabbix/bin/mailstatus.pl
HERE
}
}
}

@ -0,0 +1,11 @@
{
my $runasroot = '/usr/bin/mysqladmin status, /sbin/e-smith/db yum_updates show, /var/lib/zabbix/bin/sensors *, /var/lib/zabbix/bin/check_lvm *, /usr/sbin/smartctl -A /dev/*';
if ( -x '/opt/MegaRAID/MegaCli/MegaCli' ){
$runasroot .= ', /var/lib/zabbix/bin/megaraid-parser.pl';
}
$runasroot .= "\n";
$OUT .= 'Cmnd_Alias ZABBIX_AGENT_ROOT = '.$runasroot;
}
Cmnd_Alias ZABBIX_AGENT_MYSQL = /usr/bin/du -s /var/lib/mysql

@ -0,0 +1,2 @@
zabbix ALL=(root) NOPASSWD: ZABBIX_AGENT_ROOT
zabbix ALL=(mysql) NOPASSWD: ZABBIX_AGENT_MYSQL

@ -0,0 +1,5 @@
# This is config file for zabbix_agent
# To get more information about ZABBIX,
# go http://www.zabbix.com

@ -0,0 +1,6 @@
# IP address of ZABBIX server
# Connections from other hosts will be denied
Server={ (${'zabbix-agent'}{'Servers'} || '127.0.0.1'); }

@ -0,0 +1,5 @@
# Spend no more than Timeout seconds on processing
# Must be between 1 and 30
Timeout=3

@ -0,0 +1,14 @@
####### USER-DEFINED MONITORED PARAMETERS #######
# Format: UserParameter=<key>,<shell command>
# Note that shell command must not return empty string or EOL only
#UserParameter=system.test,who|wc -l
### Set of parameter for monitoring MySQL server (v3.23.42 and later)
### Change -u<username> and add -p<password> if required
#UserParameter=mysql.ping,mysqladmin -uroot ping|grep alive|wc -l
#UserParameter=mysql.uptime,mysqladmin -uroot status|cut -f2 -d":"|cut -f1 -d"T"
#UserParameter=mysql.threads,mysqladmin -uroot status|cut -f3 -d":"|cut -f1 -d"Q"
#UserParameter=mysql.questions,mysqladmin -uroot status|cut -f4 -d":"|cut -f1 -d"S"
#UserParameter=mysql.slowqueries,mysqladmin -uroot status|cut -f5 -d":"|cut -f1 -d"O"
#UserParameter=mysql.qps,mysqladmin -uroot status|cut -f9 -d":"
#UserParameter=mysql.version,mysql -V

@ -0,0 +1,6 @@
# This is config file for zabbix_agentd
# To get more information about ZABBIX, go http://www.zabbix.com
############ GENERAL PARAMETERS #################

@ -0,0 +1,12 @@
# List of comma delimited IP addresses (or hostnames) of ZABBIX servers.
# No spaces allowed. First entry is used for sending active checks.
# Note that hostnames must resolve hostname->IP address and
# IP address->hostname.
Server={ (${'zabbix-agent'}{'Servers'} || '127.0.0.1'); }
# Server port for sending active checks
ServerPort={ (${'zabbix-agent'}{'ServerPort'} || '10051'); }

@ -0,0 +1,6 @@
{
my $host = (${'zabbix-agent'}{'Hostname'} || $SystemName.".".$DomainName);
$OUT = "Hostname=$host\n";
}

@ -0,0 +1,12 @@
# Listen port. Default is 10050
ListenPort={ (${'zabbix-agent'}{'TCPPort'} || '10050'); }
# IP address to bind agent
# If missing, bind to all available IPs
#ListenIP=127.0.0.1
# Source IP address for outgouing connections
#SourceIP=

@ -0,0 +1,7 @@
# Number of pre-forked instances of zabbix_agentd.
# Default value is 5
# This parameter must be between 1 and 16
StartAgents=5

@ -0,0 +1,20 @@
# How often refresh list of active checks. 2 minutes by default.
#RefreshActiveChecks=120
# Buffers parameters
# Do not keep data longer than
# N seconds in buffer.
# Number of seconds, 1-3600.
BufferSend=30
# Maximum number of values
# in a buffer. The agent will
# send all collected data to
# ZABBIX Server or Proxy if
# the buffer is full.
BufferSize=100

@ -0,0 +1,8 @@
# Disable active checks. The agent will work in passive mode listening server.
DisableActive={ ((${'zabbix-agent'}{'active'} || 'enabled') eq 'disabled' ? '1':'0'); }
# Disable passive checks. The agent wont listen TCP port
# Set this to 1 if you use only active checks
DisablePassive={ ((${'zabbix-agent'}{'passive'} || 'enabled') eq 'disabled' ? '1':'0'); }

@ -0,0 +1,5 @@
# Enable remote commands for ZABBIX agent. By default remote commands disabled.
EnableRemoteCommands={ (${'zabbix-agent'}{'RemoteCommands'} || 'disabled') eq 'enabled' ? '1':'0'; }

@ -0,0 +1,21 @@
# Specifies debug level
# 0 - debug is not created
# 1 - critical information
# 2 - error information
# 3 - warnings (default)
# 4 - for debugging (produces lots of information)
DebugLevel=3
# Name of PID file
PidFile=/var/run/zabbix/zabbix_agentd.pid
# Name of log file.
# If not set, syslog will be used
LogFile=/var/log/zabbix/zabbix_agentd.log
# Maximum size of log file in MB. Set to 0 to disable automatic log rotation.
LogFileSize=10

@ -0,0 +1,5 @@
# Spend no more than Timeout seconds on processing
# Must be between 1 and 30
Timeout={${'zabbix-agent'}{'TimeOut'} || '3'}

@ -0,0 +1,28 @@
{
if ( -x '/usr/sbin/asterisk' ){
my $login = "";
my $user = ${'zabbix-agent'}{'AsteriskManagerLogin'} || '';
my $pass = ${'zabbix-agent'}{'AsteriskManagerPassword'} || '';
if ($user ne ''){
$login .= "--user=$user";
}
if ($pass ne ''){
$login .= " --secret=$pass";
}
$OUT.=<<"HERE"
# Type: Agent or Agent (active)
# Key: asterisk[key] where key can be max_latency, sip_peers, channels, internal_calls,
# outgoing_calls, incoming_calls, external_calls, duration_internal or duration_external
# Type of information: Numeric (integer 64bit)
# Units: depends on the key
# Custom multiplier: Do not use
# Store Value: As is
UserParameter=asterisk[*],/var/lib/zabbix/bin/check_asterisk $login --what=\$1
HERE
}
}

@ -0,0 +1,13 @@
# Certificate expiration
# Description: Remaining days
# Type: Agent or Agent (active)
# Key: crt.expire[<port>]
# Type of information: Numeric (integer 64bit)
# Units: days
# Use multiplier: No
# Update interval: 86400
# Store Value: As is
# Show Value: As is
UserParameter=crt.expire[*],/var/lib/zabbix/bin/cert_expire.pl -p $1

@ -0,0 +1,14 @@
# Number of CPU
# Description: Number of CPU
# Type: Agent or Agent (active)
# Key: cpu.number
# Type of information: Numeric (integer 64bit)
# Units: cpu
# Use multiplier: do not use
# Update interval: 86400 (once a day)
# Store Value: As is
# Show Value: As is
UserParameter=cpu.number,cat /proc/cpuinfo | grep processor | wc -l

@ -0,0 +1,42 @@
# Disk I/O Monitoring
# Description: Read operations on hdX
# X can be from 1 to 8
# you'll have to create a custom template if
# you want to support more than 8 drives
# You can also monitor raid devices (/dev/md1 for example)
# Type: Agent or Agent (active)
# Key: vfs.dev.read.hdX vfs.dev.write.hdX
# Type of information: Numeric (Float or integer 64bit)
# Units: bytes/sec
# Use multiplier: 512
# Update interval: 60 (for example)
# Store Value: Delta (speed/sec)
# Show Value: As is
# For these UserParameter to work, you need to configure the drives you want to monitor
# in the DB:
# db configuration setprop zabbix-agent HardDrives /dev/sda,/dev/sdb,/dev/sdc,/dev/sdd
# signal-event zabbix-agent-update
{
my @hd = split( /[,;]/,( ${'zabbix-agent'}{'HardDrives'} || '' ));
my $cnt = 1;
foreach my $drive (@hd){
if ( -e $drive){
$drive =~ s|/dev/||;
$OUT .= "Alias=vfs.dev.read.hd" . $cnt . ":vfs.dev.read[$drive,sectors]\n";
$OUT .= "Alias=vfs.dev.write.hd" . $cnt . ":vfs.dev.write[$drive,sectors]\n";
$cnt++;
}
}
for (;$cnt < 9; $cnt++){
$OUT .= "UserParameter=vfs.dev.read.hd" . $cnt . ",echo '0'\n";
$OUT .= "UserParameter=vfs.dev.write.hd" . $cnt . ",echo '0'\n";
}
}

@ -0,0 +1,9 @@
# Retrieve real external IP
# Description: Ext IP
# Type: Agent or Agent (active)
# Key: ip.external
# Type of information: Character
# Show Value: As is
UserParameter=ip.external,/usr/bin/curl --connect-timeout 5 -s -o - -k "http://www.wimip.fr/?t="

@ -0,0 +1,10 @@
# Type: Agent or Agent (active)
# Key: lvm[key] where key can be snapshot_max_allow, snapshots, lv or vg
# Type of information: Numeric (integer 64bit) or characters (for version)
# Units: depends on the key (snapshot_max_alloc is in %)
# Custom multiplier: Do not use
# Store Value: As is
UserParameter=lvm[*],/usr/bin/sudo /var/lib/zabbix/bin/check_lvm $1

@ -0,0 +1,15 @@
# Incomming mails statistics
# Description: Incoming Mail <key>
# Type: Agent or Agent (active)
# Key: mail.in[<key>] (for example mail.in[dnsbl])
# Type of information: Numeric (integer 64bit)
# Units: mails/h
# Use multiplier: Custom multiplier
# Custom multiplier: 6
# Update interval: 600
# Store Value: As is
# Show Value: As is
UserParameter=mail.in[*],cat /var/lib/zabbix/tmp/mail.in.$1

@ -0,0 +1,16 @@
# Outgoing mails statistics
# Description: Incoming Mail <key>
# Type: Agent or Agent (active)
# Key: mail.out.[<key>] (for example mail.out[total])
# Type of information: Numeric (integer 64bit)
# Units: mails/h
# Use multiplier: Custom multiplier
# Custom multiplier: 6
# Update interval: 600
# Store Value: As is
# Show Value: As is
UserParameter=mail.out[*],cat /var/lib/zabbix/tmp/mail.out.$1

@ -0,0 +1,37 @@
{
my $options = '';
my $spares = ${'zabbix-agent'}{'MegaRaidSpares'} || '';
$options .= "-s $spares " if ($spares =~ /\d+/);
my $media_error = ${'zabbix-agent'}{'MegaRaidMediaError'} || '';
$options .= "-m $media_error " if ($media_error =~ /\d+/);
my $other_error = ${'zabbix-agent'}{'MegaRaidOtherError'} || '';
$options .= "-o $other_error " if ($other_error =~ /\d+/);
my $predictive_error = ${'zabbix-agent'}{'MegaRaidPredictiveError'} || '';
$options .= "-p $predictive_error " if ($predictive_error =~ /\d+/);
# As this check requires the MegaCli utility, first check if it's present:
if ( -x '/opt/MegaRAID/MegaCli/MegaCli' ){
$OUT .=<<"HERE";
# Report status of every Raid Array using the MegaRaid controler (Requires the MegaCli utility)
# This controler is used for example on perc5/6(i) Raid card
# Description: MegaRaid Status
# Type: Agent or Agent (active)
# Key: raid.mega.status
# Type of Information: Character
# Show Value: As is
# The value reported is like:
# State: OK: 0:0:RAID-1:2 drives:68GB:Optimal 0:1:RAID-5:4 drives:837GB:Optimal Drives:7
#
# Tips: You can add a simple trigger on this check like:
# \{ hostname:raid.mega.status.str( OK ) \}=0
UserParameter=raid.mega.status,/usr/bin/sudo /var/lib/zabbix/bin/megaraid-parser.pl $options
HERE
}
}

@ -0,0 +1,24 @@
# Amount of used memory (the agent lacks this stats)
# Description: Used Memory
# Type: Agent or Agent (active)
# Key: vm.memory.size.used
# Type of information: Numeric (integer 64bit)
# Units: B
# Use multiplier: do not use
# Store Value: As is
# Show Value: As is
UserParameter=vm.memory.size.used,free -b | grep 'buffers/cache' | awk '\{print $3\}'
# Amount of used memory in % (the agent lacks this stats)
# Description: Used Memory in %
# Type: Agent or Agent (active)
# Key: vm.memory.size.pused
# Type of information: Numeric (integer 64bit)
# Units: %
# Use multiplier: do not use
# Store Value: As is
# Show Value: As is
UserParameter=vm.memory.size.pused,echo $(($(free -b | grep 'buffers/cache' | awk '\{print $3\}')*100/$(free -b | grep 'Mem' | awk '\{print $2\}')))

@ -0,0 +1,16 @@
# Some stats about MySQL
# Description: MySQL <key>
# Type: Agent or Agent (active)
# Type of information: Numeric (float)
# Unit: <depend on the key> (for example, qps)
# Use multiplier: do not use
# Store Value: As is
UserParameter=mysql.uptime,/var/lib/zabbix/bin/mysqladmin_status | cut -d" " -f2
UserParameter=mysql.threads,/var/lib/zabbix/bin/mysqladmin_status | cut -d" " -f5
UserParameter=mysql.questions,/var/lib/zabbix/bin/mysqladmin_status | cut -d" " -f8
UserParameter=mysql.slowqueries,/var/lib/zabbix/bin/mysqladmin_status | cut -d" " -f12
UserParameter=mysql.qps,/var/lib/zabbix/bin/mysqladmin_status | cut -d" " -f29
UserParameter=mysql.size,/usr/bin/sudo -u mysql /usr/bin/du -s /var/lib/mysql | awk '\{print $1\}'

@ -0,0 +1,62 @@
# Some networks statistics
# zabbix agent support natively interface stats, but, it's hard to create templates for a lot of
# SME Servers which can use different interface name (External can be eth0, eth1, ppp0 etc...)
# This way, net.if.in.internal, net.if.in.external, net.if.out.internal and net.if.out.external
# will always refers to the correct interface.
{
my $internal = $InternalInterface{'Name'} || 'eth0';
my $external = $ExternalInterface{'Name'} || 'eth1';
# Do we use the bridge contrib ?
# If yes, we reports only the traffic on the real ethernet interface.
if ( (($bridge{'status'} || 'disabled') eq 'enabled') && (defined $bridge{'ethernetInterface'}) ){
$internal = $bridge{'ethernetInterface'};
}
$OUT .=<<"HERE";
# Description: In Internal
# Type: Agent or Agent (active)
# Key: net.if.in.internal
# Type of information: Numeric (float)
# Units: b/s
# Custom multiplier: 8 (if you want the value in bits/s instead of Bytes/s)
# Store Value: Delta (speed per second)
UserParameter=net.if.in.internal,cat /proc/net/dev | grep $internal | cut -d":" -f2 | awk '{print \$1}'
# Description: Out Internal
# Type: Agent or Agent (active)
# Key: net.if.out.internal
# Type of information: Numeric (float)
# Units: b/s
# Custom multiplier: 8 (if you want the value in bits/s instead of Bytes/s)
# Store Value: Delta (speed per second)
UserParameter=net.if.out.internal,cat /proc/net/dev | grep $internal | cut -d":" -f2 | awk '{print \$9}'
HERE
if (($SystemMode || 'serveronly') ne 'serveronly'){
$OUT .=<<"HERE";
# Description: In External
# Type: Agent or Agent (active)
# Key: net.if.in.external
# Type of information: Numeric (float)
# Units: b/s
# Custom multiplier: 8 (if you want the value in bits/s instead of Bytes/s)
# Store Value: Delta (speed per second)
UserParameter=net.if.in.external,cat /proc/net/dev | grep $external | cut -d":" -f2 | awk '{print \$1}'
# Description: Out External
# Type: Agent or Agent (active)
# Key: net.if.out.external
# Type of information: Numeric (float)
# Units: b/s
# Custom multiplier: 8 (if you want the value in bits/s instead of Bytes/s)
# Store Value: Delta (speed per second)
UserParameter=net.if.out.external,cat /proc/net/dev | grep $external | cut -d":" -f2 | awk '{print \$9}'
HERE
}
}

@ -0,0 +1,11 @@
# Description: Temperature
# Type: Agent or Agent (active)
# Key: sensors[mb] (for example)
# Type of information: Numeric (float)
# Units: °C
# Custom multiplier: Do not use
# Store Value: As is
UserParameter=sensors[*],/usr/bin/sudo /var/lib/zabbix/bin/sensors $1

@ -0,0 +1,43 @@
# Smart Monitoring
# Description: Smart Value <key>
# Key can be one of: Raw_Read_Error_Rate, Spin_Up_Time, Start_Stop_Count
# Reallocated_Sector_Ct, Seek_Error_Rate, Power_On_Hours, Spin_Retry_Count,
# Power_Cycle_Count, Temperature_Celsius, Hardware_ECC_Recovered,
# Current_Pending_Sector, Offline_Uncorrectable, UDMA_CRC_Error_Count,
# Multi_Zone_Error_Rate, TA_Increase_Count
# Type: Agent or Agent (active)
# Key: system.smart.hdX[<key>] (for example system.smart.hd1[Reallocated_Sector_Ct])
# Type of information: Numeric (integer 64bit)
# Units: (none)
# Use multiplier: No
# Update interval: 120 (for example)
# Store Value: As is
# Show Value: As is
# For Seek_Error_Rate, Raw_Read_Error_Rate, Hardware_ECC_Recovered you can store value as Delta
# in order to graph the error rate in a readable format
# For these UserParameter to work, you need to configure the drives you want to monitor
# in the DB:
# db configuration setprop zabbix-agent SmartDrives /dev/sda,/dev/sdb,/dev/sdc,/dev/sdd
# signal-event zabbix-agent-update
{
my @hd = split( /[,;]/,( ${'zabbix-agent'}{'SmartDrives'} || '' ));
my $cnt = 1;
foreach my $drive (@hd){
if ( -e $drive){
$OUT .= "UserParameter=system.smartd.hd" . $cnt. "[*],/usr/bin/sudo /usr/sbin/smartctl -A $drive| grep \$1| tail -1| cut -c 88-|cut -f1 -d' '\n";
$cnt++;
}
}
for (;$cnt < 9; $cnt++){
$OUT .= "UserParameter=system.smartd.hd" . $cnt. "[*],echo '0'\n";
}
}

@ -0,0 +1,53 @@
# Squid
# Description: Squid Request Hit Ratio
# Type: Agent or Agent (active)
# Key: squid.request_hit_ratio
# Type of information: Numeric (float)
# Units: %
# Custom multiplier: Do not use
# Store Value: As is
UserParameter=squid.request_hit_ratio,squidclient mgr:info|grep 'Request Hit Ratios:'|cut -d':' -f3|cut -d',' -f1|tr -d ' %'
# Description: Squid Byte Hit Ratio
# Type: Agent or Agent (active)
# Key: squid.byte_hit_ratio
# Type of information: Numeric (float)
# Units: %
# Custom multiplier: Do not use
# Store Value: As is
UserParameter=squid.byte_hit_ratio,squidclient mgr:info|grep 'Byte Hit Ratios:'|cut -d':' -f3|cut -d',' -f1|tr -d ' %'
# Description: Squid Average HTTP request per minute
# Type: Agent or Agent (active)
# Key: squid.avg_http_req_per_min
# Type of information: Numeric (float)
# Units: Req/min
# Custom multiplier: Do not use
# Store Value: As is
UserParameter=squid.avg_http_req_per_min,squidclient mgr:info|grep 'Average HTTP requests per minute since start:'|cut -d':' -f2| tr -d ' \t'
# Description: Squid Disk Cache Size
# Type: Agent or Agent (active)
# Key: squid.cache_size_disk
# Type of information: Numeric (integer 64bits)
# Units: Bytes
# Custom multiplier: 1024
# Store Value: As is
UserParameter=squid.cache_size_disk,squidclient mgr:info|grep 'Storage Swap size:' | awk '\{print $4\}'
# Description: Squid Memory Cache Size
# Type: Agent or Agent (active)
# Key: squid.cache_size_mem
# Type of information: Numeric (integer 64bits)
# Units: Bytes
# Custom multiplier: 1024
# Store Value: As is
UserParameter=squid.cache_size_mem,squidclient mgr:info|grep 'Storage Mem size:' | awk '\{print $4\}'

@ -0,0 +1,16 @@
# Report status of every Raid Array (parsing /proc/mdtstat)
# Description: Software Raid Status
# Type: Agent or Agent (active)
# Key: raid.sw.status
# Type of Information: Character
# Show Value: As is
# The value reported is like:
# OK: md3:raid1:2 drives:931GB:Optimal md2:raid1:2 drives:931GB:Optimal md1:raid1:2 drives:101MB:Optimal
# Tips: You can add a simple trigger on this check like:
# \{ hostname:raid.sw.status.str( OK ) \}=0
UserParameter=raid.sw.status,/var/lib/zabbix/bin/mdstat-parser.pl

@ -0,0 +1,12 @@
# Amount of used swap in bytes
# Description: Used swap space
# Type: Agent or Agent (active)
# Key: system.swap.size.used
# Type of information: Numeric (integer 64bit)
# Units: B
# Multiplier: do not use
# Store Value: As is
# Show Value: As is
UserParameter=system.swap.size.used,free -b | grep Swap | awk '\{print $3\}'

@ -0,0 +1,34 @@
# Monitor UPS status
# Description: Nut UPS load
# Type: Agent or Agent (active)
# Key: ups.load
# Type of information: Numeric (float)
# Units: %
# Multiplier: Do not use
# Store Value: As is
UserParameter=ups.load[*],upsc $1@localhost ups.load
# Description: Nut UPS Battery Charge
# Type: Agent or Agent (active)
# Key: ups.battery.charge
# Type of information: Numeric (float)
# Units: %
# Multiplier: Do not use
# Store Value: As is
UserParameter=ups.battery.charge[*],upsc $1@localhost battery.charge
# Description: Nut UPS Status
# Type: Agent or Agent (active)
# Key: ups.status
# Type of information: Character
# Show Value: As is (you can also define a dictionnary OL=>On Line etc...)
UserParameter=ups.status[*],upsc $1@localhost ups.status
# Description: Nut UPS Model
# Type: Agent or Agent (active)
# Key: ups.model
# Type of information: Text
UserParameter=ups.model[*],upsc $1@localhost ups.model

@ -0,0 +1,11 @@
# Description: Number of updates available through yum
# Type: Agent or Agent (active)
# Key: updates.available
# Type of information: Numeric (integer 64bit)
# Units: packages
# Custom multiplier: Do not use
# Store Value: As is
UserParameter=updates.available,/usr/bin/sudo /sbin/e-smith/db yum_updates show | grep package | wc -l

@ -0,0 +1,142 @@
#!/usr/bin/perl -w
# Check peer certificate validity for Zabbix
# Require perl module : IO::Socket, Net::SSLeay, Date::Parse
# Require unix programs : openssl, echo, sendmail
#
# Based on sslexpire from Emmanuel Lacour <elacour@home-dn.net>
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version.
#
# This file is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file; see the file COPYING. If not, write to the Free
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301, USA.
#
use strict;
use IO::Socket;
use Net::SSLeay;
use Getopt::Long;
use Date::Parse;
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
# Default values
my $opensslpath = "/usr/bin/openssl";
my $host = '127.0.0.1';
my $port = '443';
my %opts;
GetOptions (\%opts,
'host|h=s',
'port|p=s',
'help',
);
if ($opts{'host'}) {
$host = $opts{'host'};
}
if ($opts{'port'}){
$port = $opts{'port'};
}
if ($opts{'help'}) {
&usage;
}
# Print program usage
sub usage {
print "Usage: sslexpire [OPTION]...
-h, --host=HOST check this host
-p, --port=TCPPORT check this port on the previous host
--help print this help, then exit
";
exit;
}
# This will return the expiration date
sub getExpire {
my ($l_host,$l_port) = @_;
my ($l_expdate,$l_comment);
# Connect to $l_host:$l_port
my $socket = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => $l_host,
PeerPort => $l_port
);
# If we connected successfully
if ($socket) {
# Intiate ssl
my $l_ctx = Net::SSLeay::CTX_new();
my $l_ssl = Net::SSLeay::new($l_ctx);
Net::SSLeay::set_fd($l_ssl, fileno($socket));
my $res = Net::SSLeay::connect($l_ssl);
# Get peer certificate
my $l_x509 = Net::SSLeay::get_peer_certificate($l_ssl);
if ($l_x509) {
my $l_string = Net::SSLeay::PEM_get_string_X509($l_x509);
# Get the expiration date, using openssl
$l_expdate = `echo "$l_string" | $opensslpath x509 -enddate -noout 2>&1`;
$l_expdate =~ s/.*=//;
chomp($l_expdate);
}
else {
$l_expdate = 1;
}
# Close and cleanup
Net::SSLeay::free($l_ssl);
Net::SSLeay::CTX_free($l_ctx);
close $socket;
}
else {
$l_expdate = 1;
}
return $l_expdate;
}
# Print remaining days before expiration
sub report {
# Convert date into epoch using date command
my ($l_expdate) = @_;
if ($l_expdate ne "1") {
# The current date
my $l_today = time;
my $l_epochdate = str2time($l_expdate);
# Calculate diff between expiration date and today
my $l_diff = ($l_epochdate - $l_today)/(3600*24);
# Report if needed
printf "%.0f\n", $l_diff;
}
else {
print "Unable to read certificate!\n";
exit (1);
}
}
# Get expiration date
my $expdate = getExpire($host,$port);
# Report
report("$expdate");

@ -0,0 +1,210 @@
#!/usr/bin/perl -w
use Asterisk::AMI::Common;
use Getopt::Long;
open STDERR, '>/dev/null';
# Set some default
my $host = '127.0.0.1';
my $port = '5038';
my $user = 'zabbixagent';
my $secret = 'zabbixsecret';
my $what = 'sip_peers';
GetOptions(
"host=s" => \$host,
"port=s" => \$port,
"user=s" => \$user,
"secret=s" => \$secret,
"what=s" => \$what
);
our $ast = Asterisk::AMI::Common->new(
PeerAddr => $host,
PeerPort => $port,
Username => $user,
Secret => $secret
);
die "Unable to connect to asterisk manager" unless ($ast);
sub help{
print<<"EOF";
usage: $0 --host=asterisk.domain.tld --port=5038 --user=manager --secret=azerty --what=sip_peers
--what can take the following argument:
* sip_peers: number of connected sip peers
* max_latency: highest latency of connected sip_peers
* channels: total number of active channels
* internal_calls: number of active internal calls
* outgoing_calls: number of active outgoing calls (external)
* incoming_calls: number of active incoming calls (external)
* external_calls: number of external calls (in + out)
* duration_internal: actual highest duration of internal calls
* duration_external: actual highest duration of external calls
EOF
if ($what eq 'sip_peers'){
print get_connected_peers_num('sip');
}
elsif ($what eq 'max_latency'){
print get_max_peer_latency();
}
elsif($what eq 'channels'){
print get_active_channels_num();
}
elsif ($what eq 'internal_calls'){
print get_internal_call_num();
}
elsif ($what eq 'outgoing_calls'){
print get_outgoing_call_num();
}
elsif ($what eq 'incoming_calls'){
print get_incoming_call_num();
}
elsif ($what eq 'external_calls'){
print get_outgoing_call_num() + get_incoming_call_num();
}
elsif ($what eq 'duration_internal'){
print get_max_duration_internal();
}
elsif ($what eq 'duration_external'){
print get_max_duration_external();
}
else{
help();
$ast->disconnect();
exit (1);
}
$ast->disconnect();
exit(0);
# Return the number of connected peers for
# the specified protocol (only SIP supporteed for now)
sub get_connected_peers_num{
my $proto = shift;
my $peers;
if ($proto eq 'sip'){
$peers = get_sip_peers();
}
else{
return 'unsupported protocol';
}
my $num = 0;
foreach my $peer (keys %{$peers}){
my $status = $peers->{$peer}->{'Status'};
$num++ if ($status =~ m/^OK/);
}
return $num;
}
# Return the list of SIP peers (as a hashref)
sub get_sip_peers{
return $ast->sip_peers();
}
# Return the highest latency of all the peers
sub get_max_peer_latency{
my $peers = get_sip_peers();
my $latency = 0;
foreach my $peer (keys %{$peers}){
my $status = $peers->{$peer}->{'Status'};
$status =~ /\((\d+)\sms\)/;
$latency = $1 if ($1 > $latency);
}
return $latency;
}
# Return channels list as a hashref
sub get_channels(){
return $ast->channels();
}
# Return the number of channels
sub get_active_channels_num{
my $channels = get_channels();
my $num = 0;
foreach my $chan (keys %{$channels}){
$num++;
}
return $num;
}
# Return the number of active channels
sub get_up_channels_num{
my $channels = get_channels();
my $num = 0;
foreach my $chan (keys %{$channels}){
my $status = $channels->{$chan}->{'State'};
$num++ if ($status eq 'Up');
}
return $num;
}
# Return the number of outgoing calls
sub get_outgoing_call_num{
my $channels = get_channels();
my $num = 0;
foreach my $chan (keys %{$channels}){
my $context = $channels->{$chan}->{'Context'};
my $status = $channels->{$chan}->{'State'};
$num++ if ($context eq 'macro-dialout-trunk' and $status eq 'Up');
}
return $num;
}
# Return the number of incoming calls
sub get_incoming_call_num{
my $channels = get_channels();
my $num = 0;
foreach my $chan (keys %{$channels}){
my $context = $channels->{$chan}->{'Context'};
my $status = $channels->{$chan}->{'State'};
$num++ if ($context =~ /^from\-(trunk|pstn|zaptel|dahdi)/ and $status eq 'Up');
}
return $num;
}
# Return the number of internal calls
sub get_internal_call_num{
my $channels = get_channels();
my $num = 0;
foreach my $chan (keys %{$channels}){
my $context = $channels->{$chan}->{'Context'};
my $status = $channels->{$chan}->{'State'};
$num++ if (($context eq 'macro-dial' or $context eq 'from-internal') and $status eq 'Up');
}
return $num
}
# Return the max duration of current internal calls
sub get_max_duration_internal{
my $channels = get_channels();
my $max = 0;
foreach my $chan (keys %{$channels}){
my $dur = $channels->{$chan}->{'Seconds'};
my $context = $channels->{$chan}->{'Context'};
$max = $dur if (($context eq 'macro-dial' or $context eq 'from-internal') and $dur > $max);
}
return $max
}
# Return the max duration of current external calls (in or out)
sub get_max_duration_external{
my $channels = get_channels();
my $max = 0;
foreach my $chan (keys %{$channels}){
my $dur = $channels->{$chan}->{'Seconds'};
my $context = $channels->{$chan}->{'Context'};
$max = $dur if (($context eq 'macro-dialout-trunk' or $context =~ /^from\-(trunk|pstn|zaptel|dahdi)/) and $dur > $max);
}
return $max
}

@ -0,0 +1,36 @@
#!/bin/bash
PATH=$PATH:/usr/sbin:/usr/local/sbin
snapshot_max_alloc(){
MAX_PERCENT=0
for PERCENT in $(lvdisplay | grep % | sed -e 's/ Allocated to snapshot //g' -e 's/%//g'); do
if [[ "$PERCENT" > "$MAX_PERCENT" ]]; then
MAX_PERCENT=$PERCENT
fi
done
echo "$MAX_PERCENT"
}
snapshots(){
echo $(lvdisplay | grep % | wc -l)
}
lv(){
echo $(lvdisplay | grep 'LV Name' | wc -l)
}
vg(){
echo $(vgdisplay | grep 'VG Name' | wc -l)
}
case $1 in
snapshot_max_alloc|snapshots|lv|vg)
$1
;;
*)
echo 'ZBX_NOTSUPPORTED'
esac

@ -0,0 +1,95 @@
#!/usr/bin/perl
# Copyright (C) 2009 Daniel Berteaud <daniel@firewall-services.com>
# Copyright (C) 2003 Jonathan Middleton <jjm@ixtab.org.uk
# Copyright (C) 2001 Paul Slootman <paul@debian.org>
# This file is part of Logcheck.
# Modifications for integration with smeserver-zabbix-agent
# Logcheck is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# Logcheck is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Foobar; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
my ($logfile, $offsetfile) = @ARGV;
if (! -f $logfile) {
print "File $logfile cannot be read.\n";
exit 66;
}
unless ($offsetfile) {
# offsetfile not given, use .offset/$logfile in the same directory
$offsetfile = $logfile . '.offset';
}
unless (open(LOGFILE, $logfile)) {
print "File $logfile cannot be read.\n";
exit 66;
}
my ($inode, $offset) = (0, 0);
if (open(OFFSET, $offsetfile)) {
$_ = <OFFSET>;
unless (! defined $_) {
chomp $_;
$inode = $_;
$_ = <OFFSET>;
unless (! defined $_) {
chomp $_;
$offset = $_;
}
}
}
my ($ino, $size);
unless ((undef,$ino,undef,undef,undef,undef,undef,$size) = stat $logfile) {
print "Cannot get $logfile file size.\n", $logfile;
exit 65;
}
if ($inode == $ino) {
exit 0 if $offset == $size; # short cut
if ($offset > $size) {
$offset = 0;
#print "***************\n";
#print "*** WARNING ***: Log file $logfile is smaller than last time checked!\n";
#print "*************** This could indicate tampering.\n";
}
}
if ($inode != $ino || $offset > $size) {
$offset = 0;
}
seek(LOGFILE, $offset, 0);
while (<LOGFILE>) {
print $_;
}
$size = tell LOGFILE;
close LOGFILE;
unless (open(OFFSET, ">$offsetfile")) {
print "File $offsetfile cannot be created. Check your permissions.\n";
exit 73;
}
unless (chmod 0600, $offsetfile) {
print "Cannot set permissions on file $offsetfile\n";
exit 65;
}
print OFFSET "$ino\n$size\n";
close OFFSET;
exit 0;

@ -0,0 +1,15 @@
#!/bin/bash
BINDIR='/var/lib/zabbix/bin'
LOGTAIL=$BINDIR'/logtail.pl'
PARSER=$BINDIR'/parse_mail_in.pl'
LOGFILE='/var/log/qpsmtpd/current'
TMPDIR='/var/lib/zabbix/tmp/'
for WHAT in dnsbl rhsbl clamav check_earlytalker check_basicheaders \
check_goodrcptto check_spamhelo total_denied spam_denied \
other_denied spam_queued queued total; do
$LOGTAIL $LOGFILE $TMPDIR/mail.in.$WHAT.offset | $PARSER $WHAT > $TMPDIR/mail.in.$WHAT
done

@ -0,0 +1,11 @@
#!/bin/bash
BINDIR='/var/lib/zabbix/bin'
LOGTAIL=$BINDIR'/logtail.pl'
PARSER=$BINDIR'/parse_mail_out.pl'
LOGFILE='/var/log/qmail/current'
TMPDIR='/var/lib/zabbix/tmp/'
for WHAT in failure deferral success total; do
$LOGTAIL $LOGFILE $TMPDIR/mail.out.$WHAT.offset | $PARSER $WHAT > $TMPDIR/mail.out.$WHAT
done

@ -0,0 +1,23 @@
#!/usr/bin/perl -w
use Mail::Send;
use esmith::ConfigDB;
my $c = esmith::ConfigDB->open_ro();
my $domain = $c->get('DomainName')->value();
my $host = $c->get('SystemName')->value();
my $z = $c->get('zabbix-agent');
my $dest = $z->prop('StatusRecipient') || 'admin@' . $domain;
my $mail = new Mail::Send;
$mail->to("$dest");
$mail->set("From","zabbix-agent");
$mail->subject("[STATUS] $host.$domain");
my $body = $mail->open;
print $body localtime(time)."\n",
"\n#>tail /var/log/messages :\n",
`/usr/bin/tail /var/log/messages`,
"\n#>netstat --numeric-hosts -tpu :\n",
`/bin/netstat --numeric-hosts -tpu`;
$body->close;

@ -0,0 +1,137 @@
#!/usr/bin/env perl
# Get status of Linux software RAID for SNMP / Nagios
# Author: Michal Ludvig <michal@logix.cz>
# http://www.logix.cz/michal/devel/nagios
# Slightly modified by Daniel B. for integration on SME Server / Zabbix
# 24 Apr 2009
#
# Simple parser for /proc/mdstat that outputs status of all
# or some RAID devices. Possible results are OK and CRITICAL.
# It could eventually be extended to output WARNING result in
# case the array is being rebuilt or if there are still some
# spares remaining, but for now leave it as it is.
#
# To run the script remotely via SNMP daemon (net-snmp) add the
# following line to /etc/snmpd.conf:
#
# extend raid-md0 /root/parse-mdstat.pl --device=md0
#
# The script result will be available e.g. with command:
#
# snmpwalk -v2c -c public localhost .1.3.6.1.4.1.8072.1.3.2
use strict;
use Getopt::Long;
# Sample /proc/mdstat output:
#
# Personalities : [raid1] [raid5]
# md0 : active (read-only) raid1 sdc1[1]
# 2096384 blocks [2/1] [_U]
#
# md1 : active raid5 sdb3[2] sdb4[3] sdb2[4](F) sdb1[0] sdb5[5](S)
# 995712 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]
# [=================>...] recovery = 86.0% (429796/497856) finish=0.0min speed=23877K/sec
#
# unused devices: <none>
my $file = "/proc/mdstat";
my $device = "all";
# Get command line options.
GetOptions ('file=s' => \$file,
'device=s' => \$device,
'help' => sub { &usage() } );
## Strip leading "/dev/" from --device in case it has been given
$device =~ s/^\/dev\///;
## Return codes for Nagios
my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
## This is a global return value - set to the worst result we get overall
my $retval = 0;
my (%active_devs, %failed_devs, %spare_devs, %devs_total, %level, %size, %status);
my @raids;
my $result = 'OK';
open FILE, "< $file" or die "Can't open $file : $!";
while (<FILE>) {
next if ! /^(md\d+)+\s*:/;
next if $device ne "all" and $device ne $1;
my $dev = $1;
push @raids, $dev;
my @array = split(/ /);
for $_ (@array) {
$level{$dev} = $1 if /^(raid\d+)$/;
next if ! /(\w+)\[\d+\](\(.\))*/;
if ($2 eq "(F)") {
$failed_devs{$dev} .= "$1,";
}
elsif ($2 eq "(S)") {
$spare_devs{$dev} .= "$1,";
}
else {
$active_devs{$dev} .= "$1,";
}
}
if (! defined($active_devs{$dev})) { $active_devs{$dev} = "none"; }
else { $active_devs{$dev} =~ s/,$//; }
if (! defined($spare_devs{$dev})) { $spare_devs{$dev} = "none"; }
else { $spare_devs{$dev} =~ s/,$//; }
if (! defined($failed_devs{$dev})) { $failed_devs{$dev} = "none"; }
else { $failed_devs{$dev} =~ s/,$//; }
$_ = <FILE>;
/(\d+)\ blocks\ \[(\d+)\/(\d+)\]\s+\[(.*)\]$/;
$size{$dev} = int($1/1024);
if ($size{$dev} > 1024){
$size{$dev} = int($size{$dev}/1024)."GB";
}
else{
$size{$dev} .= "MB";
}
$devs_total{$dev} = $2;
my $devs_up = $3;
my $stat = $4;
if ($devs_total{$dev} > $devs_up or $failed_devs{$dev} ne "none") {
$status{$dev} = "Degraded";
$result = "CRITICAL";
$retval = $ERRORS{"CRITICAL"};
}
else{
$status{$dev} = "Optimal";
}
}
print "$result: ";
foreach my $raid (@raids){
print "$raid:$level{$raid}:$devs_total{$raid} drives:$size{$raid}:$status{$raid} ";
}
print "\n";
close FILE;
exit $retval;
# =====
sub usage()
{
printf("
Check status of Linux SW RAID
Author: Michal Ludvig <michal\@logix.cz> (c) 2006
http://www.logix.cz/michal/devel/nagios
Usage: mdstat-parser.pl [options]
--file=<filename> Name of file to parse. Default is /proc/mdstat
--device=<device> Name of MD device, e.g. md0. Default is \"all\"
");
exit(1);
}

@ -0,0 +1,226 @@
#!/usr/bin/perl -w
# check_megaraid_sas Nagios plugin
# Copyright (C) 2007 Jonathan Delgado, delgado@molbio.mgh.harvard.edu
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
#
# Nagios plugin to monitor the status of volumes attached to a LSI Megaraid SAS
# controller, such as the Dell PERC5/i and PERC5/e. If you have any hotspares
# attached to the controller, you can specify the number you should expect to
# find with the '-s' flag.
#
# The paths for the Nagios plugins lib and MegaCli may need to me changed.
#
# $Author: delgado $
# $Revision: #3 $ $Date: 2007/06/07 $
# Slightly modified by Daniel B. for SME Server integration with zabbix
# 23 Apr 2009
use strict;
use Getopt::Std;
our($opt_h, $opt_s, $opt_o, $opt_m, $opt_p);
getopts('hs:o:p:m:');
if ( $opt_h ) {
print "Usage: $0 [-s number] [-m number] [-o number]\n";
print " -s is how many hotspares are attached to the controller\n";
print " -m is the number of media errors to ignore\n";
print " -p is the predictive error count to ignore\n";
print " -o is the number of other disk errors to ignore\n";
exit;
}
my $megacli = '/opt/MegaRAID/MegaCli/MegaCli';
## Return codes for Nagios
my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
my ($adapters);
my $hotspares = 0;
my $hotsparecount = 0;
my $pdbad = 0;
my $pdcount = 0;
my $mediaerrors = 0;
my $mediaallow = 0;
my $prederrors = 0;
my $predallow = 0;
my $othererrors = 0;
my $otherallow = 0;
my $result = '';
my $status = 'OK';
sub max_state ($$) {
my ($current, $compare) = @_;
if (($compare eq 'CRITICAL') || ($current eq 'CRITICAL')) {
return 'CRITICAL';
} elsif ($compare eq 'OK') {
return $current;
} elsif ($compare eq 'WARNING') {
return 'WARNING';
} elsif (($compare eq 'UNKNOWN') && ($current eq 'OK')) {
return 'UNKNOWN';
} else {
return $current;
}
}
if ( $opt_s ) {
$hotspares = $opt_s;
}
if ( $opt_m ) {
$mediaallow = $opt_m;
}
if ( $opt_p ) {
$predallow = $opt_p;
}
if ( $opt_o ) {
$otherallow = $opt_o;
}
# Get the number of RAID controllers we have
open (ADPCOUNT, "$megacli -adpCount -NoLog |")
|| die "error: Could not execute MegaCli -adpCount";
while (<ADPCOUNT>) {
if ( m/Controller Count:\s*(\d+)/ ) {
$adapters = $1;
last;
}
}
close ADPCOUNT;
ADAPTER: for ( my $adp = 0; $adp < $adapters; $adp++ ) {
# Get the number of logical drives on this adapter
open (LDGETNUM, "$megacli -LdGetNum -a$adp -NoLog |")
|| die "error: Could not execute $megacli -LdGetNum -a$adp";
my ($ldnum);
while (<LDGETNUM>) {
if ( m/Number of Virtual drives configured on adapter \d:\s*(\d+)/i ) {
$ldnum = $1;
last;
}
}
close LDGETNUM;
LDISK: for ( my $ld = 0; $ld < $ldnum; $ld++ ) {
# Get info on this particular logical drive
open (LDINFO, "$megacli -LdInfo -L$ld -a$adp -NoLog |")
|| die "error: Could not execute $megacli -LdInfo -L$ld -a$adp -NoLog";
my ($size, $unit, $raidlevel, $ldpdcount, $spandepth, $state);
while (<LDINFO>) {
if ( m/Size:\s*((\d+)(MB|GB|TB))/ ) {
$size = $2;
$unit = $3;
# Adjust MB to GB if that's what we got
if ( $unit eq 'MB' ) {
$size = sprintf( "%.0f", ($size / 1024) );
$unit= 'GB';
}
} elsif ( m/State:\s*(\w+)/ ) {
$state = $1;
if ( $state ne 'Optimal' ) {
$status = 'CRITICAL';
}
} elsif ( m/Number Of Drives( per span)?:\s*(\d+)/ ) {
$ldpdcount = $2;
} elsif ( m/Span Depth:\s*(\d+)/ ) {
$spandepth = $1;
$ldpdcount = $ldpdcount * $spandepth;
} elsif ( m/RAID Level: Primary-(\d)/ ) {
$raidlevel = $1;
}
}
close LDINFO;
$result .= "$adp:$ld:RAID-$raidlevel:$ldpdcount drives:$size$unit:$state ";
} #LDISK
close LDINFO;
# Get info on physical disks for this adapter
open (PDLIST, "$megacli -PdList -a$adp -NoLog |")
|| die "error: Could not execute $megacli -PdList -a$adp -NoLog";
my ($slotnumber,$fwstate);
PDISKS: while (<PDLIST>) {
if ( m/Slot Number:\s*(\d+)/ ) {
$slotnumber = $1;
# Don't care about backplane error counts
next if ( $slotnumber == 255 );
$pdcount++;
} elsif ( m/(\w+) Error Count:\s*(\d+)/ ) {
if ( $1 eq 'Media') {
$mediaerrors += $2;
} else {
$othererrors += $2;
}
} elsif ( m/Predictive Failure Count:\s*(\d+)/ ) {
$prederrors += $1;
} elsif ( m/Firmware state:\s*(\w+)/ ) {
$fwstate = $1;
if ( $fwstate eq 'Hotspare' ) {
$hotsparecount++;
} elsif ( $fwstate eq 'Online' ) {
# Do nothing
} elsif ( $slotnumber != 255 ) {
$pdbad++;
$status = 'CRITICAL';
}
}
} #PDISKS
close PDLIST;
}
$result .= "Drives:$pdcount ";
# Any bad disks?
if ( $pdbad ) {
$result .= "$pdbad Bad Drives ";
}
my $errorcount = $mediaerrors + $prederrors + $othererrors;
# Were there any errors?
if ( $errorcount ) {
$result .= "($errorcount Errors) ";
if ( ( $mediaerrors > $mediaallow ) ||
( $prederrors > $predallow ) ||
( $othererrors > $otherallow ) ) {
$status = max_state($status, 'WARNING');
}
}
# Do we have as many hotspares as expected (if any)
if ( $hotspares ) {
if ( $hotsparecount < $hotspares ) {
$status = max_state($status, 'WARNING');
$result .= "Hotspare(s):$hotsparecount (of $hotspares)";
} else {
$result .= "Hotspare(s):$hotsparecount";
}
}
print STDOUT "$status: $result\n";
exit $ERRORS{$status};

@ -0,0 +1,5 @@
#!/bin/sh
HOME=/root
exec /usr/bin/sudo /usr/bin/mysqladmin status

@ -0,0 +1,103 @@
#!/usr/bin/perl -w
# Copyright (C) 2009 Daniel Berteaud <daniel@firewall-services.com>
# This file is part of smeserver-zabbix-agent package.
# This script is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This script is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Foobar; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
my $what = $ARGV[0] || '';
# On initialise nos compteurs a 0
my @denied = qw(dnsbl rhsbl clamav check_earlytalker check_basicheaders check_goodrcptto check_spamhelo);
my @others = qw(total_denied spam_denied other_denied spam_queued queued total);
my %cnt;
foreach (@denied,@others){
$cnt{$_} = 0;
}
while (<STDIN>) {
my $line = $_;
# on limites aux lignes concernant logterse
# @400000004994ad092afa867c 18386 logging::logterse plugin: etc...
next unless $line =~ m/^\@[0-9a-f]{24} \d+ logging::logterse plugin/;
# D'abord on traite tout ceux qui contiennent 'msg denied before queued'
if ($line =~ m/msg denied before queued/){
$cnt{total_denied}++;
foreach (@denied){
if ($line =~ m/$_/){
$cnt{$_}++;
}
}
next;
}
# Les messages refuses par spamassassin
elsif ($line =~ m/spam score exceeded threshold/){
$cnt{spam_denied}++;
next;
}
# Spam mis en queue
elsif ($line =~ m/queued.*Yes/){
$cnt{spam_queued}++;
next;
}
# Enfin, les bon mails
elsif ($line =~ m/queued.*No/){
$cnt{queued}++;
next;
}
}
# Caclul des totaux:
$cnt{other_denied} = $cnt{total_denied};
foreach (@denied){
$cnt{total} = $cnt{total} + $cnt{$_};
$cnt{other_denied} = $cnt{other_denied} - $cnt{$_};
}
foreach (@others){
$cnt{total} = $cnt{total} + $cnt{$_} if ($_ !~ /total/);
}
# Si l'argument est "print" on affiche toutes les stats
if ($what eq "print"){
foreach (@denied,@others){
print "$_: $cnt{$_}\n";
}
}
# Si l'argument correspond a un compteur definit
# On affiche uniquemment cette valeur
elsif (defined $cnt{$what}){
print "$cnt{$what}\n";
}
# Sinon, on quitte avec une erreur
else{
print "supported items are: ";
foreach (@denied, @others){
print "$_ ";
}
print "\n";
exit 1;
}
exit 0;

@ -0,0 +1,70 @@
#!/usr/bin/perl -w
# Copyright (C) 2009 Daniel Berteaud <daniel@firewall-services.com>
# This file is part of smeserver-zabbix-agent package.
# This script is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This script is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Foobar; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
my $what = $ARGV[0] || '';
# On initialise nos compteurs a 0
my @results = qw(failure deferral success total);
my %cnt;
foreach (@results){
$cnt{$_} = 0;
}
while (<STDIN>) {
my $line = $_;
# on limites aux lignes concernant l'envoie
# @400000004994ad092afa867c delivery 96906: success etc...
next unless $line =~ m/^\@[0-9a-f]{24} delivery \d+: (success|failure|deferral).*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|CNAME_lookup_failed_temporarily)/;
my $result = $1;
$cnt{$result}++;
}
# Caclul des totaux:
foreach (@results){
$cnt{total} = $cnt{total} + $cnt{$_} if $_ !~ /total/;
}
# Si l'argument est "print" on affiche toutes les stats
if ($what eq "print"){
foreach (@results){
print "$_: $cnt{$_}\n";
}
}
# Si l'argument correspond a un compteur definit
# On affiche uniquemment cette valeur
elsif (defined $cnt{$what}){
print "$cnt{$what}\n";
}
# Sinon, on quitte avec une erreur
else{
print "supported items are: ";
foreach (@results){
print "$_ ";
}
print "\n";
exit 1;
}
exit 0;

@ -0,0 +1,57 @@
#!/bin/bash
KEY=$1
case $KEY in
cpu0)
# Here are some examples on how to retrieve temperatures
# of your system:
#
# If your motherboard support IPMI and you have the ipmitool package
# You can use this:
# Of course, you'll have to adapt command as each controler may report different sensors name
# /usr/bin/ipmitool sdr | grep 'P1 Therm Margin' | cut -d'|' -f 2 | awk '{print $1'}
# Else, if your motherboard support lm_sensor, you can use something
# like this:
# /usr/bin/sensors | grep temp1 | cut -d':' -f 2 | awk '{print $1'} | sed -e "s/+//g" -e "s/.C//g"
# You can also try to get your CPU temperature with acpi:
# cat /proc/acpi/thermal_zone/THRM/temperature | awk '{print $2}'
# It's important that your commands return only numerical values
# The default for now is to use IPMI
/usr/bin/ipmitool sdr type Temperature | grep 'P1 Therm Margin' | cut -d'|' -f 2 | awk '{print $1'}
;;
cpu1)
# This will be the same as the above, but for the second CPU
/usr/bin/ipmitool sdr type Temperature | grep 'P2 Therm Margin' | cut -d'|' -f 2 | awk '{print $1'}
;;
mb)
# AFAIK, motherboard temperature can be retrieved only with lm_sensor or IPMI
/usr/bin/ipmitool sdr type Temperature | grep 'Baseboard' | cut -d'|' -f 2 | awk '{print $1'}
;;
ambiant)
# Some IPMI controler also report the ambiant temperature
/usr/bin/ipmitool sdr type Temperature | grep Ambient | cut -d'|' -f 2 | awk '{print $1'}
;;
hd*|sd*)
# Here, we want a harddrive temperature, so we'll use smartctl
# We could also use hddtemp but it doesn't seems to work for a lot of drive, where smartctl do
/usr/sbin/smartctl -a /dev/$KEY | grep Temperature_Celsius | awk '{print $10}'
;;
*)
# Else, we tell the server the item is not supported
echo 'ZBX_NOTSUPPORTED'
;;
esac

@ -0,0 +1,403 @@
# $Id: smeserver-zabbix-agent.spec,v 1.34 2012/06/07 16:26:43 vip-ire Exp $
# Authority: vip-ire
# Name: Daniel Berteaud
%define name smeserver-zabbix-agent
%define version 0.1
%define release 52
Summary: sme server integration of zabbix agent
Name: %{name}
Version: %{version}
Release: %{release}%{?dist}
License: GNU GPL version 2
URL: http://www.zabbix.com/
Group: SMEserver/addon
Source: %{name}-%{version}.tar.gz
Patch0: smeserver-zabbix-agent-0.1-hostname.patch
Patch1: smeserver-zabbix-agent-0.1-template_rename.patch
Patch2: smeserver-zabbix-agent-0.1-userparam_ext_ip.patch
Patch3: smeserver-zabbix-agent-0.1-userparam_ups.patch
Patch4: smeserver-zabbix-agent-0.1-userparam_mysql.patch
Patch5: smeserver-zabbix-agent-0.1-userparam_usedMem.patch
Patch6: smeserver-zabbix-agent-0.1-userparam_usedMem_brackets.patch
Patch7: smeserver-zabbix-agent-0.1-userparam_usedMem_key.patch
Patch8: smeserver-zabbix-agent-0.1-userparam_usedMem_Used.patch
Patch9: smeserver-zabbix-agent-0.1-userparam_usedMem_Used2.patch
Patch10: smeserver-zabbix-agent-0.1-userparam_MemStats.patch
Patch11: smeserver-zabbix-agent-0.1-userparam_MemStatsTypo.patch
Patch12: smeserver-zabbix-agent-0.1-userparam_Swap.patch
Patch13: smeserver-zabbix-agent-0.1-userparam_Swap_key.patch
Patch14: smeserver-zabbix-agent-0.1-userparam_removeUselessMemStats.patch
Patch15: smeserver-zabbix-agent-0.1-userparam_pusedMem.patch
Patch16: smeserver-zabbix-agent-0.1-userparam_upsCharge.patch
Patch17: smeserver-zabbix-agent-0.1-disable_passive_mode.patch
Patch18: smeserver-zabbix-agent-0.1-mail_in_stats.patch
Patch19: smeserver-zabbix-agent-0.1-event_zabbix_agent_update.patch
Patch20: smeserver-zabbix-agent-0.1-mail_in_stats_other_denied.patch
Patch21: smeserver-zabbix-agent-0.1-fix_expand_sudoers.patch
Patch22: smeserver-zabbix-agent-0.1-mail_out_stats.patch
Patch23: smeserver-zabbix-agent-0.1-mail_out_stats_typo.patch
Patch24: smeserver-zabbix-agent-0.1-mail_out_stats_ignore_local.patch
Patch25: smeserver-zabbix-agent-0.1-net_stats.patch
Patch26: smeserver-zabbix-agent-0.1-userparam_mysql_size.patch
Patch27: smeserver-zabbix-agent-0.1-adjust_masq.patch
Patch28: smeserver-zabbix-agent-0.1-timeout_comment.patch
Patch29: smeserver-zabbix-agent-0.1-buffers.patch
Patch30: smeserver-zabbix-agent-0.1-sudoers_mysql.patch
Patch31: smeserver-zabbix-agent-0.1-mysql_size_fixe.patch
Patch32: smeserver-zabbix-agent-0.1-userparam_swRaid_status.patch
Patch33: smeserver-zabbix-agent-0.1-userparam_comment.patch
Patch34: smeserver-zabbix-agent-0.1-userparam_megaraid.patch
Patch35: smeserver-zabbix-agent-0.1-userparam_yum_updates.patch
Patch36: smeserver-zabbix-agent-0.1-userparam_sensors.patch
Patch37: smeserver-zabbix-agent-0.1-sensors_fixes.patch
Patch38: smeserver-zabbix-agent-0.1-megaraid_parser.patch
Patch39: smeserver-zabbix-agent-0.1-mail_stats_via_cron.patch
Patch40: smeserver-zabbix-agent-0.1-mdstat_one_line.patch
Patch41: smeserver-zabbix-agent-0.1-megaraid_parser_fix.patch
Patch42: smeserver-zabbix-agent-0.1-cpu_num.patch
Patch43: smeserver-zabbix-agent-0.1-megaraid_fix_raid10.patch
Patch44: smeserver-zabbix-agent-0.1-userparam_smart.patch
Patch45: smeserver-zabbix-agent-0.1-smart_missing_return.patch
Patch46: smeserver-zabbix-agent-0.1-report_0_for_non_existing_drives.patch
Patch47: smeserver-zabbix-agent-0.1-run_megaraid_parser_as_root.patch
Patch48: smeserver-zabbix-agent-0.1-run_megaraid_parser_as_root2.patch
Patch49: smeserver-zabbix-agent-0.1-several_ups.patch
Patch50: smeserver-zabbix-agent-0.1-megaraid_options.patch
Patch51: smeserver-zabbix-agent-0.1-new_qpsmtpd.patch
Patch52: smeserver-zabbix-agent-0.1-megaraid_options_from_db.patch
Patch53: smeserver-zabbix-agent-0.1-disable_megaraid_log.patch
Patch54: smeserver-zabbix-agent-0.1-critical_vs_warning.patch
Patch55: smeserver-zabbix-agent-0.1-userparam_squid.patch
Patch56: smeserver-zabbix-agent-0.1-hostname_from_db.patch
Patch57: smeserver-zabbix-agent-0.1-userparam_diskio.patch
Patch58: smeserver-zabbix-agent-0.1-userparam_asterisk.patch
Patch59: smeserver-zabbix-agent-0.1-userparam_lvm.patch
Patch60: smeserver-zabbix-agent-0.1-add_usr_sbin_in_path.patch
Patch61: smeserver-zabbix-agent-0.1-statusmail.patch
Patch62: smeserver-zabbix-agent-0.1-configure_timeout.patch
Patch63: smeserver-zabbix-agent-0.1-better_asterisk_monitoring.patch
Patch64: smeserver-zabbix-agent-0.1-fix_closing_bracket.patch
Patch65: smeserver-zabbix-agent-0.1-check_crt_expiration.patch
BuildArchitectures: noarch
BuildRequires: e-smith-devtools
BuildRoot: /var/tmp/%{name}-%{version}
Requires: e-smith-release >= 7.0
Requires: zabbix-agent
Requires: smeserver-remoteuseraccess
Requires: perl(IO::Socket)
Requires: perl(Net::SSLeay)
Requires: perl(Date::Parse)
AutoReqProv: no
%description
smserver integration of zabbix agent.
Zabbix is an entreprise-class open source distributed monitoring
solution
%changelog
* Thu Jun 7 2012 Daniel B. <daniel@firewall-services.com> - 0.1-52.sme
- Add missing perl module in dependency
* Thu Jun 7 2012 Daniel B. <daniel@firewall-services.com> - 0.1-51.sme
- Add certificate expiration script
* Fri Oct 28 2011 Daniel B. <daniel@firewall-services.com> - 0.1-50.sme
- Fix a closing bracket in templates
* Wed Oct 26 2011 Daniel B. <daniel@firewall-services.com> - 0.1-49.sme
- Add better asterisk monitoring capabilities
* Fri Jul 08 2011 Daniel B. <daniel@firewall-services.com> - 0.1-48.sme
- Configure timeout from the DB (prop TimeOut)
* Wed May 04 2011 Daniel B. <daniel@firewall-services.com> 0.1-47
- Send status mail with some logs and active connexions (StatusMail prop)
* Thu Sep 02 2010 Daniel B. <daniel@firewall-services.com> 0.1-46
- Add /usr/sbin in path for check_lvm and check_asterisk
* Thu Sep 02 2010 Daniel B. <daniel@firewall-services.com> 0.1-45
- Add basic asterisk monitoring support
- Add basic LVM monitoring support
* Wed Aug 04 2010 Daniel B. <daniel@firewall-services.com> 0.1-44
- Support up to 8 disks for I/O monitoring. Report valid 0 value
for non existing ones to prevent errors in server's log
* Wed Jun 23 2010 Daniel B. <daniel@firewall-services.com> 0.1-43
- Possibility to set Hostname from the DB [SME: 6083]
* Mon May 03 2010 Daniel B. <daniel@firewall-services.com> 0.1-42
- disable MegaCli log (which can break monitoring if log file reaches 2GB)
- report CRITICAL if both CRITICAL and WARNING are found
- add Squid UserParameters (hit ratio, cache size, req per minute)
* Wed Mar 17 2010 Daniel B. <daniel@firewall-services.com> 0.1-41
- read megaraid options from the DB (number of spares, number of
error to ignore)
* Fri Mar 12 2010 Daniel B. <daniel@firewall-services.com> 0.1-40
- update regex for incomming mail stats for newer qpsmtpd
* Wed Feb 17 2010 Daniel B. <daniel@firewall-services.com> 0.1-39
- update megaraid-parser.pl script with options to ignore some errors
* Mon Jan 4 2010 Daniel B. <daniel@firewall-services.com> 0.1-38
- Change UPS UserParameters to use wildcard, so you can monitor several UPS
easily (require changes in the templates on the server side)
* Sun Dec 6 2009 Daniel B. <daniel@firewall-services.com> 0.1-37
- Call megaraid-parser.pl scripts with sudo in zabbix_agentd.conf
* Wed Dec 2 2009 Daniel B. <daniel@firewall-services.com> 0.1-36
- Run megaraid-parser.pl as root (with sudo) instead of granting
zabbix user unrestricted access to MegaCli
* Fri Sep 25 2009 Daniel B. <daniel@firewall-services.com> 0.1-35
- Support up to 8 disks for smart monitoring. Report valid 0 value
for non existing ones to prevent errors in server's log
* Tue Sep 01 2009 Daniel B. <daniel@firewall-services.com> 0.1-34
- Add missing return after smart parameters (if several disks are monitored)
* Mon Aug 31 2009 Daniel B. <daniel@firewall-services.com> 0.1-33
- Add system.smart UserParameter (monitor smart values for configured hard drives)
* Wed Jul 08 2009 Daniel B. <daniel@firewall-services.com> 0.1-32
- Fix megaraid-parser script to support RAID-10 arrays
* Mon Jun 08 2009 Daniel B. <daniel@firewall-services.com> 0.1-31
- Add cpu.number UserParameter (return the number of CPU on the host)
* Wed May 06 2009 Daniel B. <daniel@firewall-services.com> 0.1-30
- Create missing tmp directory
* Mon Apr 26 2009 Daniel B. <daniel@firewall-services.com> 0.1-29
- megaraid-parser.pl is now compatible with newer versions
of MegaCli
- Fix permission on megaraid-parser.pl script
* Thu Apr 23 2009 Daniel B. <daniel@firewall-services.com> 0.1-28
- improvements in sensors script
- Add megaraid-parser.pl script to get more accurate MegaRaid
conrolers informations
- use a cronjob to parse mail logs so multiple zabbix server
can be used. Also, it won't repport false value if your host
has been unreachable for some time
- change output of mdstat-parser.pl to report everything in one
line (looks like megaraid-parser)
* Mon Apr 20 2009 Daniel B. <daniel@firewall-services.com> 0.1-27
- Add updates.available to retrieve the number of updates available
with yum
- Added sensors[*] key to retrieve sensors informations. The value are retrieved
with the script /var/lib/zabbix/bin/sensors which can be customized.
* Fri Mar 27 2009 Daniel B. <daniel@firewall-services.com> 0.1-26
- Add raid.mega.status UserParameters to monitor status of MegaRaid based
raid array
* Tue Mar 24 2009 Daniel B. <daniel@firewall-services.com> 0.1-25
- Add comments for each UserParameter for configuration on the server side
(Type of information, unit, etc...)
* Tue Mar 24 2009 Daniel B. <daniel@firewall-services.com> 0.1-24
- Add raid.sw.status userparameter to report software raid array status
- Remove tabs from spec
- Permission cleanup on scripts
* Wed Mar 18 2009 Daniel B. <daniel@firewall-services.com> 0.1-23
- Correct mysql.size parameter (sudo -u mysql)
* Mon Mar 09 2009 Daniel B. <daniel@firewall-services.com> 0.1-22
- Fix typo in sudoers template (ZABBIX_AGENT_MYSQL)
* Mon Mar 02 2009 Daniel B. <daniel@firewall-services.com> 0.1-21
- Add smeserver-remoteuseraccess as a dependencie (sudoer templates issue)
* Mon Mar 02 2009 Daniel B. <daniel@firewall-services.com> 0.1-20
- Adjust masq service on zabbix-agent-update event
- Add description of Timout directive
- Add BufferSend and BufferSize directive to optimize
agent <-> server communication
* Sun Mar 01 2009 Daniel B. <daniel@firewall-services.com> 0.1-19
- Add size of mysql data (mysql.size)
* Fri Feb 20 2009 Daniel B. <daniel@firewall-services.com> 0.1-18
- Add stats for InternalInterface and ExternalInterface
* Tue Feb 17 2009 Daniel B. <daniel@firewall-services.com> 0.1-17
- Ignore local delivery from outgoing mail stats
* Tue Feb 17 2009 Daniel B. <daniel@firewall-services.com> 0.1-16
- Fix a typo in mail.out.failure UserParameters
* Tue Feb 17 2009 Daniel B. <daniel@firewall-services.com> 0.1-15
- Add UserParameters for outhoing mails statistics
* Tue Feb 17 2009 Daniel B. <daniel@firewall-services.com> 0.1-14
- add missing other_denied UserParameters for mailStats
- Fix expand-template for /etc/sudoers during zabbix-agent-update event
* Tue Feb 17 2009 Daniel B. <daniel@firewall-services.com> 0.1-13
- Add incoming mails statistics
- Rename signal-event to zabbix-agent-update (to prevent a conflict on
sudoers files which needs to be expanded for server and agent)
* Wed Feb 11 2009 Daniel B. <daniel@firewall-services.com> 0.1-12
- Remove Useless buffers and cache mem
- Add vm.memory.size.pused (used memory in %)
- Add ups.battery.charge for ups
- Added "passive" db parameter
- default access is private
* Tue Feb 10 2009 Daniel B. <daniel@firewall-services.com> 0.1-11
- Fix permissions on mysqladmin_status script
* Tue Feb 10 2009 Daniel B. <daniel@firewall-services.com> 0.1-10
- Change used swap key
* Tue Feb 10 2009 Daniel B. <daniel@firewall-services.com> 0.1-9
- Added userparameters for used swap space used in bytes
* Tue Feb 10 2009 Daniel B. <daniel@firewall-services.com> 0.1-8
- Correct a type in memory statistics (for cached memory)
* Tue Feb 10 2009 Daniel B. <daniel@firewall-services.com> 0.1-7
- Report also free, buffers and cached mem so stats are more accurate
* Tue Feb 10 2009 Daniel B. <daniel@firewall-services.com> 0.1-6
- substract cache/buffer from used mem
* Tue Feb 10 2009 Daniel B. <daniel@firewall-services.com> 0.1-5
- Change key name for used memory
- Report Used mem instead of total
* Tue Feb 10 2009 Daniel B. <daniel@firewall-services.com> 0.1-4
- Escape brackets in template
* Tue Feb 10 2009 Daniel B. <daniel@firewall-services.com> 0.1-3
- Add UserParameters to repport amount of used memory
* Mon Feb 9 2009 Daniel B. <daniel@firewall-services.com> 0.1-2
- Add UserParameters to monitor real external IP, UPS status,
mysql stats
* Fri Feb 6 2009 Daniel B. <daniel@firewall-services.com> 0.1-1
- add Hostname directive in zabbix_agentd.conf
* Mon Feb 04 2009 Daniel B. <daniel@firewall-services.com> 0.1-0
- initial release
%prep
%setup
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
%patch27 -p1
%patch28 -p1
%patch29 -p1
%patch30 -p1
%patch31 -p1
%patch32 -p1
%patch33 -p1
%patch34 -p1
%patch35 -p1
%patch36 -p1
%patch37 -p1
%patch38 -p1
%patch39 -p1
%patch40 -p1
%patch41 -p1
%patch42 -p1
%patch43 -p1
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
%patch48 -p1
%patch49 -p1
%patch50 -p1
%patch51 -p1
%patch52 -p1
%patch53 -p1
%patch54 -p1
%patch55 -p1
%patch56 -p1
%patch57 -p1
%patch58 -p1
%patch59 -p1
%patch60 -p1
%patch61 -p1
%patch62 -p1
%patch63 -p1
%patch64 -p1
%patch65 -p1
%build
%{__mkdir_p} root/var/lib/zabbix/tmp
perl ./createlinks
%install
rm -rf $RPM_BUILD_ROOT
(cd root ; find . -depth -print | cpio -dump $RPM_BUILD_ROOT)
rm -f %{name}-%{version}-filelist
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT \
--file /var/lib/zabbix/bin/mysqladmin_status 'attr(0750,root,zabbix)' \
--file /var/lib/zabbix/bin/logtail.pl 'attr(0755,root,root)' \
--file /var/lib/zabbix/bin/mail_in.sh 'attr(0755,root,root)' \
--file /var/lib/zabbix/bin/mail_out.sh 'attr(0755,root,root)' \
--file /var/lib/zabbix/bin/mdstat-parser.pl 'attr(0755,root,root)' \
--file /var/lib/zabbix/bin/megaraid-parser.pl 'attr(0755,root,root)' \
--file /var/lib/zabbix/bin/parse_mail_in.pl 'attr(0755,root,root)' \
--file /var/lib/zabbix/bin/parse_mail_out.pl 'attr(0755,root,root)' \
--file /var/lib/zabbix/bin/sensors 'attr(0750,root,zabbix) %config(noreplace)' \
--file /var/lib/zabbix/bin/check_asterisk 'attr(0750,root,zabbix)' \
--file /var/lib/zabbix/bin/check_lvm 'attr(0755,root,root)' \
--file /var/lib/zabbix/bin/mailstatus.pl 'attr(0755,root,root)' \
--file /var/lib/zabbix/bin/cert_expire.pl 'attr(0755,root,root)' \
--dir /var/lib/zabbix/tmp 'attr(0750,zabbix,zabbix)' \
> %{name}-%{version}-filelist
%files -f %{name}-%{version}-filelist
%defattr(-,root,root)
%clean
rm -rf $RPM_BUILD_ROOT
%postun
#uninstall
if [ $1 = 0 ] ; then
/sbin/e-smith/db configuration setprop zabbix-agent status disabled
/etc/init.d/zabbix-agent stop
fi
true
Loading…
Cancel
Save