SPOJE.NET

Technická dokumentace

Uživatelské nástroje

Nástroje pro tento web


Postranní lišta


Provozují SPOJE.NET.
Nejlepší internet v Praze.

howto:network:nut

Network UPS Tools (NUT)

Potřebné balíčky

  • nut (debian) nebo nut-server a nut-client (ubuntu)
  • yum install nut nut-client (centos) - nutno zapnout repozitář EPEL

Konfigurace

Základní konfigurace se děje pomocí souboru /etc/nut/ (debian, ubuntu) nebo /etc/ups/ (centos)

/etc/nut/nut.conf
# Network UPS Tools: example nut.conf
#
##############################################################################
# General section
##############################################################################
# The MODE determines which part of the NUT is to be started, and which
# configuration files must be modified.
#
# This file try to standardize the various files being found in the field, like
# /etc/default/nut on Debian based systems, /etc/sysconfig/ups on RedHat based
# systems, ... Distribution's init script should source this file to see which
# component(s) has to be started.
#
# The values of MODE can be:
# - none: NUT is not configured, or use the Integrated Power Management, or use
#   some external system to startup NUT components. So nothing is to be started.
# - standalone: This mode address a local only configuration, with 1 UPS 
#   protecting the local system. This implies to start the 3 NUT layers (driver,
#   upsd and upsmon) and the matching configuration files. This mode can also
#   address UPS redundancy.
# - netserver: same as for the standalone configuration, but also need
#   some more network access controls (firewall, tcp-wrappers) and possibly a
#   specific LISTEN directive in upsd.conf.
#   Since this MODE is opened to the network, a special care should be applied
#   to security concerns.
# - netclient: this mode only requires upsmon.
#
# IMPORTANT NOTE:
#  This file is intended to be sourced by shell scripts.
#  You MUST NOT use spaces around the equal sign!
 
MODE=netserver
/etc/nut/ups.conf
[AEG]
       driver = blazer_ser
       port = /dev/ttyS0
       desc = "LocalUPS"

Pro usb:

/etc/nut/ups.conf
[AEG]
       driver = blazer_usb
       port = /dev/hidraw0
       desc = "LocalUPS"
  • V souboru ups.conf definujeme jednotlivé UPS a jejich ovladače. Jaký ovladač je potřeba použít ke konkretní UPS se dozvíte v seznamu kompatibilního HW - http://www.networkupstools.org/stable-hcl.html
  • Pokud používáme usb driver, je dobré před jakoukoliv další činností přehrát soubor nut-usbups.rules do /etc/udev/rules.d . Tento soubor je vygenerován automaticky při instalaci balíčku a v různých systémech se může jmenovat trošku jinak:

Debian, Ubuntu

ln -s /lib/udev/rules.d/52-nut-usbups.rules /etc/udev/rules.d/

Centos

ln -s /lib/udev/rules.d/62-nut-usbups.rules /etc/udev/rules.d/

Následně znovu načtěte pravidla udevu
udevadm control --reload-rules
udevadm trigger
Pokud to nepomůže, restartujte celý systém

Ještě ověříme práva a existenci slozek

mkdir /var/run/nut
chown root:nut /var/run/nut
chmod 770 /var/run/nut

Po restartu zkusíme, jestli máme nainstalován správný ovladač a jestli probíhá komunikace s UPS korektně

upsdrvctl start

Pokud nám nenahlasí žádnou chybu, můžeme pokračovat dál:

/etc/nut/upsd.conf
# =======================================================================
# LISTEN <address> [<port>]
LISTEN 127.0.0.1 3493
LISTEN 10.11.57.17 3493
# LISTEN ::1 3493

Nastavujeme, na kterých portech demon poslouchá. Pokud chceme monitorovat jen UPS, připojenou ke stejnému systému, tak nam staci nastavit jen localhost

/etc/nut/upsmon.conf
# Network UPS Tools: example upsmon configuration
#
# This file contains passwords, so keep it secure.
 
# --------------------------------------------------------------------------
# RUN_AS_USER <userid>
#
# By default, upsmon splits into two processes.  One stays as root and
# waits to run the SHUTDOWNCMD.  The other one switches to another userid
# and does everything else.
#
# The default nonprivileged user is set at compile-time with
#       'configure --with-user=...'.  
# 
# You can override it with '-u <user>' when starting upsmon, or just
# define it here for convenience.
#
# Note: if you plan to use the reload feature, this file (upsmon.conf)
# must be readable by this user!  Since it contains passwords, DO NOT
# make it world-readable.  Also, do not make it writable by the upsmon
# user, since it creates an opportunity for an attack by changing the
# SHUTDOWNCMD to something malicious.
#
# For best results, you should create a new normal user like "nutmon",
# and make it a member of a "nut" group or similar.  Then specify it
# here and grant read access to the upsmon.conf for that group.
#
# This user should not have write access to upsmon.conf.
#
# RUN_AS_USER nutmon
 
# --------------------------------------------------------------------------
# MONITOR <system> <powervalue> <username> <password> ("master"|"slave")
#
# List systems you want to monitor.  Not all of these may supply power
# to the system running upsmon, but if you want to watch it, it has to
# be in this section.
# 
# You must have at least one of these declared.
#
# <system> is a UPS identifier in the form <upsname>@<hostname>[:<port>]
# like ups@localhost, su700@mybox, etc.
# 
# Examples:
# 
#  - "su700@mybox" means a UPS called "su700" on a system called "mybox"
#
#  - "fenton@bigbox:5678" is a UPS called "fenton" on a system called
#    "bigbox" which runs upsd on port "5678".
#
# The UPS names like "su700" and "fenton" are set in your ups.conf
# in [brackets] which identify a section for a particular driver.
# If the ups.conf on host "doghouse" has a section called "snoopy", the
# identifier for it would be "snoopy@doghouse".
#
# <powervalue> is an integer - the number of power supplies that this UPS 
# feeds on this system.  Most computers only have one power supply, so this 
# is normally set to 1.  You need a pretty big or special box to have any 
# other value here.
#
# You can also set this to 0 for a system that doesn't supply any power,
# but you still want to monitor.  Use this when you want to hear about
# changes for a given UPS without shutting down when it goes critical,
# unless <powervalue> is 0.
#
# <username> and <password> must match an entry in that system's
# upsd.users.  If your username is "monmaster" and your password is 
# "blah", the upsd.users would look like this:
#
#       [monmaster]
#               password  = blah
#               upsmon master   (or slave)
# 
# "master" means this system will shutdown last, allowing the slaves
# time to shutdown first.
#
# "slave" means this system shuts down immediately when power goes critical.
#
# Examples: 
#
# MONITOR myups@bigserver 1 monmaster blah master
# MONITOR su700@server.example.com 1 upsmon secretpass slave
# MONITOR myups@localhost 1 upsmon pass master  (or slave)
MONITOR AEG@localhost 0 master
 
# --------------------------------------------------------------------------
# MINSUPPLIES <num>
#
# Give the number of power supplies that must be receiving power to keep
# this system running.  Most systems have one power supply, so you would
# put "1" in this field.
#
# Large/expensive server type systems usually have more, and can run with
# a few missing.  The HP NetServer LH4 can run with 2 out of 4, for example,
# so you'd set that to 2.  The idea is to keep the box running as long
# as possible, right?
#
# Obviously you have to put the redundant supplies on different UPS circuits
# for this to make sense!  See big-servers.txt in the docs subdirectory
# for more information and ideas on how to use this feature.
 
MINSUPPLIES 0
# --------------------------------------------------------------------------
# SHUTDOWNCMD "<command>"
#
# upsmon runs this command when the system needs to be brought down.
#
# This should work just about everywhere ... if it doesn't, well, change it.
 
SHUTDOWNCMD "/sbin/shutdown -h +0"
 
# --------------------------------------------------------------------------
# NOTIFYCMD <command>
#
# upsmon calls this to send messages when things happen
#
# This command is called with the full text of the message as one argument.
# The environment string NOTIFYTYPE will contain the type string of
# whatever caused this event to happen.
#
# Note that this is only called for NOTIFY events that have EXEC set with
# NOTIFYFLAG.  See NOTIFYFLAG below for more details.
#
# Making this some sort of shell script might not be a bad idea.  For more
# information and ideas, see pager.txt in the docs directory.
#
# Example:
NOTIFYCMD /opt/sendnotify
 
# --------------------------------------------------------------------------
# POLLFREQ <n> 
#
# Polling frequency for normal activities, measured in seconds.
#
# Adjust this to keep upsmon from flooding your network, but don't make 
# it too high or it may miss certain short-lived power events.
 
POLLFREQ 5
 
# --------------------------------------------------------------------------
# POLLFREQALERT <n>
#
# Polling frequency in seconds while UPS on battery.
#
# You can make this number lower than POLLFREQ, which will make updates
# faster when any UPS is running on battery.  This is a good way to tune 
# network load if you have a lot of these things running.  
#
# The default is 5 seconds for both this and POLLFREQ.
 
POLLFREQALERT 5
# --------------------------------------------------------------------------
# HOSTSYNC - How long upsmon will wait before giving up on another upsmon
#
# The master upsmon process uses this number when waiting for slaves to
# disconnect once it has set the forced shutdown (FSD) flag.  If they
# don't disconnect after this many seconds, it goes on without them.
#
# Similarly, upsmon slave processes wait up to this interval for the 
# master upsmon to set FSD when a UPS they are monitoring goes critical -
# that is, on battery and low battery.  If the master doesn't do its job,
# the slaves will shut down anyway to avoid damage to the file systems.
#
# This "wait for FSD" is done to avoid races where the status changes
# to critical and back between polls by the master.
 
HOSTSYNC 15
 
# --------------------------------------------------------------------------
# DEADTIME - Interval to wait before declaring a stale ups "dead"
#
# upsmon requires a UPS to provide status information every few seconds
# (see POLLFREQ and POLLFREQALERT) to keep things updated.  If the status
# fetch fails, the UPS is marked stale.  If it stays stale for more than
# DEADTIME seconds, the UPS is marked dead.
#
# A dead UPS that was last known to be on battery is assumed to have gone
# to a low battery condition.  This may force a shutdown if it is providing
# a critical amount of power to your system.
#
# Note: DEADTIME should be a multiple of POLLFREQ and POLLFREQALERT.
# Otherwise you'll have "dead" UPSes simply because upsmon isn't polling
# them quickly enough.  Rule of thumb: take the larger of the two
# POLLFREQ values, and multiply by 3.
 
DEADTIME 15
 
# --------------------------------------------------------------------------
# POWERDOWNFLAG - Flag file for forcing UPS shutdown on the master system
#
# upsmon will create a file with this name in master mode when it's time
# to shut down the load.  You should check for this file's existence in
# your shutdown scripts and run 'upsdrvctl shutdown' if it exists.
#
# See the shutdown.txt file in the docs subdirectory for more information.
 
POWERDOWNFLAG /etc/killpower
# --------------------------------------------------------------------------
# NOTIFYMSG - change messages sent by upsmon when certain events occur
#
# You can change the default messages to something else if you like.
#
# NOTIFYMSG <notify type> "message"
#
NOTIFYMSG ONLINE        "UPS %s on line power"
NOTIFYMSG ONBATT        "UPS %s on battery"
# NOTIFYMSG LOWBATT     "UPS %s battery is low"
# NOTIFYMSG FSD         "UPS %s: forced shutdown in progress"
# NOTIFYMSG COMMOK      "Communications with UPS %s established"
NOTIFYMSG COMMBAD       "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN      "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT      "UPS %s battery needs to be replaced"
# NOTIFYMSG NOCOMM      "UPS %s is unavailable"
# NOTIFYMSG NOPARENT    "upsmon parent process died - shutdown impossible"
#
# Note that %s is replaced with the identifier of the UPS in question.
#
# Possible values for <notify type>:
#
# ONLINE   : UPS is back online
# ONBATT   : UPS is on battery
# LOWBATT  : UPS has a low battery (if also on battery, it's "critical")
# FSD      : UPS is being shutdown by the master (FSD = "Forced Shutdown")
# COMMOK   : Communications established with the UPS
# COMMBAD  : Communications lost to the UPS
# SHUTDOWN : The system is being shutdown
# REPLBATT : The UPS battery is bad and needs to be replaced
# NOCOMM   : A UPS is unavailable (can't be contacted for monitoring)
# NOPARENT : The process that shuts down the system has died (shutdown impossible)
 
# --------------------------------------------------------------------------
# NOTIFYFLAG - change behavior of upsmon when NOTIFY events occur
#
# By default, upsmon sends walls (global messages to all logged in users)
# and writes to the syslog when things happen.  You can change this.
#
# NOTIFYFLAG <notify type> <flag>[+<flag>][+<flag>] ...
#
NOTIFYFLAG ONLINE       SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT       SYSLOG+WALL+EXEC
# NOTIFYFLAG LOWBATT    SYSLOG+WALL
# NOTIFYFLAG FSD        SYSLOG+WALL
# NOTIFYFLAG COMMOK     SYSLOG+WALL
NOTIFYFLAG COMMBAD      SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN     SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT     SYSLOG+WALL+EXEC
# NOTIFYFLAG NOCOMM     SYSLOG+WALL
# NOTIFYFLAG NOPARENT   SYSLOG+WALL
#
#
# Possible values for the flags:
#
# SYSLOG - Write the message in the syslog 
# WALL   - Write the message to all users on the system
# EXEC   - Execute NOTIFYCMD (see above) with the message
# IGNORE - Don't do anything
#
# If you use IGNORE, don't use any other flags on the same line.
 
# --------------------------------------------------------------------------
# RBWARNTIME - replace battery warning time in seconds
#
# upsmon will normally warn you about a battery that needs to be replaced
# every 43200 seconds, which is 12 hours.  It does this by triggering a
# NOTIFY_REPLBATT which is then handled by the usual notify structure
# you've defined above.
# 
# If this number is not to your liking, override it here.
 
RBWARNTIME 43200
 
# --------------------------------------------------------------------------
# NOCOMMWARNTIME - no communications warning time in seconds
#
# upsmon will let you know through the usual notify system if it can't
# talk to any of the UPS entries that are defined in this file.  It will
# trigger a NOTIFY_NOCOMM by default every 300 seconds unless you 
# change the interval with this directive.
 
NOCOMMWARNTIME 300
 
# --------------------------------------------------------------------------
# FINALDELAY - last sleep interval before shutting down the system
#
# On a master, upsmon will wait this long after sending the NOTIFY_SHUTDOWN
# before executing your SHUTDOWNCMD.  If you need to do something in between
# those events, increase this number.  Remember, at this point your UPS is 
# almost depleted, so don't make this too high.
#
# Alternatively, you can set this very low so you don't wait around when
# it's time to shut down.  Some UPSes don't give much warning for low
# battery and will require a value of 0 here for a safe shutdown.
#
# Note: If FINALDELAY on the slave is greater than HOSTSYNC on the master,
# the master will give up waiting for the slave to disconnect.
 
FINALDELAY 5

Nastavíme ruzné notifikace apod.
FIXME

Nyní nastartujeme démona

  • Debian, Ubuntu - /etc/init.d/nut start nebo service nut start
  • Centos - /etc/init.d/ups start nebo service ups start

Následně vyzkoušíme načíst z UPS nějaká data. Použijeme na to příkaz upsc UPS@server kde UPS je jméno záložního zdroje v hranatých závorkách, uvedený v souboru ups.conf a server je adresa serveru, kde poslouchá démon upsd

root@dionysus:~# upsc AEG@localhost
battery.charge: 100
battery.voltage: 54.70
battery.voltage.high: 52.00
battery.voltage.low: 41.60
battery.voltage.nominal: 48.0
device.mfr: 
device.model: LIHVX1K4
device.type: ups
driver.name: blazer_ser
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttyS0
driver.version: 2.6.5
driver.version.internal: 1.55
input.current.nominal: 6.0
input.frequency: 50.0
input.frequency.nominal: 50
input.voltage: 236.9
input.voltage.fault: 236.8
input.voltage.nominal: 220
output.voltage: 236.8
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.firmware: 00140.01
ups.load: 59
ups.mfr: 
ups.model: LIHVX1K4
ups.status: OL
ups.temperature: 30.0
ups.type: offline / line interactive

Pokud je všechno správně, uvidíme podobný výstup, jako je tady na předchozím výpisu.

Užitečné odkazy

Monitoring

Nagios

Chceme-li UPS dohledovat pomocí nagiosu, použijeme na to tento plugin: check_nut.gz
Do nrpe.conf následně přidáme tento řádek command[check_nut]=/usr/lib/nagios/plugins/check_nut -d AEG -w 99 -c 50 -t 35 -T 40 -l 65 -L 80

gandalf@dionysus:~$ /usr/lib/nagios/plugins/check_nut --help
check_nut v$Revision: 1.0 $ (nagios-plugins 1.4.16)
The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute
copies of the plugins under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Copyright (c) 2007 Luca Bertoncello <lucabert@lucabert.de>
 
This plugin reports the status of the UPS using NUT
 
Usage:
check_nut -d <device> -w <battery charge warning> -c <battery charge critical> -t <temperature warning> -T <temperature critical> -l <ups load warning> -L <ups load critical>
 
Send email to nagios-users@lists.sourceforge.net if you have questions
regarding use of this software. To submit patches or suggest improvements,
send email to nagiosplug-devel@lists.sourceforge.net.
Please include version information with all correspondence (when possible,
use output from the --version option of the plugin itself).
gandalf@dionysus:~$ /usr/lib/nagios/plugins/check_nut -d AEG -w 99 -c 50 -t 35 -T 40 -l 65 -L 80
UPS AEG (LIHVX1K4) OK: battery charge: 100, temperature: 29.6, load: 59

Munin

Debiani balicek munin-plugins-extra

UPS=AEG
ln -s /usr/share/munin/plugins/nut_misc /etc/munin/plugins/
ln -s /usr/share/munin/plugins/nut_volts /etc/munin/plugins/
ln -s /usr/share/munin/plugins/nutups_ /etc/munin/plugins/nutups_"$UPS"_voltages
ln -s /usr/share/munin/plugins/nutups_ /etc/munin/plugins/nutups_"$UPS"_freq
ln -s /usr/share/munin/plugins/nutups_ /etc/munin/plugins/nutups_"$UPS"_charge
ln -s /usr/share/munin/plugins/nutups_ /etc/munin/plugins/nutups_"$UPS"_current
#zatim neni v debianu
#ln -s /usr/share/munin/plugins/nutups2_ /etc/munin/plugins/nutups2_"$UPS"_charge
#ln -s /usr/share/munin/plugins/nutups2_ /etc/munin/plugins/nutups2_"$UPS"_current
#ln -s /usr/share/munin/plugins/nutups2_ /etc/munin/plugins/nutups2_"$UPS"_frequency
#ln -s /usr/share/munin/plugins/nutups2_ /etc/munin/plugins/nutups2_"$UPS"_voltage
/etc/munin/plugin-conf.d/nut
[nut*]
env.upsname AEG@127.0.0.1

Nedistribucni (asi zbytecny)

https://github.com/munin-monitoring/contrib/tree/master/plugins/ups

curl 'https://raw.githubusercontent.com/munin-monitoring/contrib/master/plugins/ups/nut' > /usr/share/munin/plugins/nut_
chmod +x /usr/share/munin/plugins/nut_
ln -s /usr/share/munin/plugins/nut_ nut_AEG_AT_localhost
howto/network/nut.txt · Poslední úprava: 2016/10/29 23:05 (upraveno mimo DokuWiki)