Od prvního dílu uběhla sice trochu delší doba, než jsem předpokládal, ale o to více času bylo na praktické cvičení ;-)) Už víme, jak zprávy zachytávat na “centrálním serveru” do požadovaného souboru, nyní je na řadě postup, jak zprávy odesílat z jednotlivých stanic.
Před tím ale musíme opět říct syslogům (tentokrát těm na monitorovaných stanicích), že zprávy local3 má směrovat na náš centrální server. Proto upravíme /etc/syslog.conf
na všech stanicích, odkud chceme zasílat zprávy, přidáním následujícího řádku:
local3.debug @centralniserver
Opět připomínám, že mezi local3.debug a @centralniserver musí být použity tabelátory a nikoliv mezery!!! Pak už jen restartujeme syslogd: killall -HUP syslogd
Vlastní generování zprávy je jednoduché – použijeme standardní unixový příkaz logger
.
Abychom zprávy dokázali zachytit na centrálním serveru, použijeme syntaxi:
/usr/bin/logger -p local3.info -t informace `uname -s`"|"`uname -r`
Pokud jste syslogy na centrálním serveru “centralniserver” i na stanici nastavili a zrestartovali správně, ve /var/log/perf.log
se na centralnim serveru objeví následující řádek:
Aug 9 13:41:31 2004 slackware informace: Linux|2.4.24
Z řádku vidíme, že syslog za nás doplnil časovou známku zprávy, název stanice (slackware) a informace z příkazů uname -s
a uname -r
.
Teď už umíme odesílat a přijímat zprávy, nyní do oněch zpráv připojíme nějakou užitečnou informaci. Fantazii se meze nekladou, pro inspiraci připojím pár nápadů:
df -k |egrep -e "^/dev" |sed -e "s/^/dev///"|sed -re "s/[ t]+/|/g" | /usr/bin/logger -p local3.info -t disk
Nám zapíše do logu následující zprávu:
Aug 9 13:48:29 2004 slackware disk: sda1|3850292|3306336|348368|91%|/ Aug 9 13:48:29 2004 slackware disk: sda3|12673660|4585088|7444768|39%|/opt Aug 9 13:48:29 2004 slackware disk: sdc1|17496684|8726428|7881464|53%|/data Aug 9 13:48:29 2004 slackware disk: sdd1|35001508|32804748|418768|99%|/mnt/cd1 Aug 9 13:48:29 2004 slackware disk: sdb1|35001508|24422676|8800840|74%|/mnt/share
A víme, jaké disky jsou připojeny, jakou mají celkovou, obsazenou a volnou kapacitu (v bajtech), jaké místo v % nám ještě zbývá a aktuální mount point.
Obdobně z příkazu
uptime|sed -e "s/^.*average://"|awk -F, '{print "load|"$1"|" $2 "|"$3}' | /usr/bin/logger -p local3.info -t load
dostaneme:
Aug 9 13:51:34 2004 slackware load: load| 0.29| 0.72| 0.62
Dále už jen v rychlosti:
vmstat 5 2|tail -1|awk '{print "cpu|"$13"|"$14"|"$15"|"$16}' | /usr/bin/logger -p local3.info -t cpu
free -k|egrep "Swap:|Mem:"|sed -e "s/Mem:/memory/"|sed -e "s/Swap:/swap/"|awk '{print $1"|"$2"|"$3"|"$4}' | /usr/bin/logger -p local3.info -t mem
Výsledný zápis:
Aug 9 13:55:05 2004 slackware cpu: cpu|77|6|0|17 Aug 9 13:55:07 2004 slackware mem: memory|385404|376876|8528 Aug 9 13:55:07 2004 slackware mem: swap|987988|51304|936684
Vzhledem k tomu, že příkaz logger
najdeme na všech mně známých unix like systémech (Linux, FreeBSD, Solaris, HP-UX), nic nám nebrání nasadit obdobné příkazy na všechny stanice v síti a pravidelně je v CRONu (třeba každých 10 minut) spouštět.
Jako přídavek za velký časový odstup od prvního dílu uvádím monitorovací script pro Solaris:
#!/bin/sh
#monitor SunOS
# (c) 2004 Sniff - http://syslog.blogator.com
VER=0.85
LOGGER=/usr/bin/logger
SWAP=/usr/sbin/swap
PRTCONF=/etc/prtconf
#################
# zahlasit verzi scriptu – kvuli prehledu
$LOGGER -p local3.info -t info $VER”|”`uname -s`”|”`uname -r`
##################
# load
uptime|sed -e “s/^.*average://”|awk -F, ‘{print “load|”$1″|” $2″|”$3}’ |
$LOGGER -p local3.info -t load
#################
# cpu – nejdrive kumulativne, pak jednotlive CPU
iostat -c 5 2|tail -1|awk ‘{print “cpu|”$1″|”$2″|”$3″|”$4}’ |
$LOGGER -p local3.info -t cpu
PROCS=`mpstat|wc -l|awk ‘{print $1-1}’`
mpstat 5 2|tail -$PROCS|awk ‘{print “cpu”$1″|”$13″|”$14″|”$15″|”$16}’ |
$LOGGER -p local3.info -t cpu
#################
# bezici procesy
echo procs”|”`ps -el|egrep -c “[ 0-9] O”`”|”`ps -el|egrep -c “[ 0-9] R”`”|”`ps -el|egrep -c “[ 0-9] S”`”|”`ps -el|egrep -c “[ 0-9] T”`”|”`ps -el|egrep -c “[ 0-9] Z”` |
$LOGGER -p local3.info -t procs
#################
# pripojene disky
df -k |egrep -e “^/dev” |sed -e “s/^/dev///”|awk ‘{print $1″|”$2″|”$3″|”$4″|”$5″|”$6}’|
$LOGGER -p local3.info -t disk
#################
# memory
$SWAP -s|sed -e “s/k//g”|awk ‘{print “swap|” $9 + $11 “|” $9″|” $11}’ |
$LOGGER -p local3.info -t mem
PAGESIZE=`pagesize`
if [ -x /usr/sbin/sar ]; then
FREEMEM=`/usr/sbin/sar -r 1|tail -1|awk ‘{print $2}’`
fi
MEM=`$PRTCONF | awk ‘/^Memory size:/ { print $3*1024 }’`
echo “$PAGESIZE $FREEMEM $MEM”|awk ‘{print “memory|”$3″|”$3-$2*$1/1024″|”$2*$1/1024}’ |
$LOGGER -p local3.info -t mem
#################
# iface
#netstat -in |egrep -v “^Name”|grep “^.”|awk ‘{print $1″|”$4″|”$5″|”$6″|”$7″|”$8″|”$9}’ |
#$LOGGER -p local3.info -t iface
#projdeme vsechny interfaces a pokud u nich najdeme hodnoty v netstat -k, zamenime je
netstat -in |egrep -v “^Name”|grep “^.”|awk ‘{print $1” “$4” “$5” “$6” “$7” “$8” “$9}’ |
while read nt; do
if=`echo $nt|awk ‘{print $1}’ `
NO=`netstat -k $if|grep “obytes “|sed -e “s/.*obytes //”|awk ‘{print $1}’ `
NI=`netstat -k $if|grep “rbytes “|sed -e “s/.*rbytes //”|awk ‘{print $1}’ `
if [ “$NO:” != “:” -a “$NI:” != “:” ];then
echo $nt $NI $NO|awk ‘{print $1″|”$2″|”$8″|”$4″|”$9″|”$6″|”$7}’| $LOGGER -p local3.info -t iface
else
echo $nt|awk ‘{print $1″|”$2″|”$3″|”$4″|”$5″|”$6″|”$7}’ | $LOGGER -p local3.info -t iface
fi
done
#############
# connections
CONNS=`/usr/bin/netstat -n|grep ESTABLISHED|awk ‘{print $1}’| awk -F. ‘{print $5}’`
ALL=`echo “$CONNS”|wc -l`
SMTP=`echo “$CONNS”|egrep -c “^25$”`
SMB=`echo “$CONNS”|egrep -c “^139$|^445$”`
HTTP=`echo “$CONNS”|egrep -c “^80$|^443$”`
MAIL=`echo “$CONNS”|egrep -c “^110$|^143$”`
$LOGGER -p local3.info -t conns conns”|”$ALL”|”$SMTP”|”$SMB”|”$HTTP”|”$MAIL
#############
# Teplota
if [ -x /usr/platform/`uname -i`/sbin/prtdiag ]; then
/usr/platform/`uname -i`/sbin/prtdiag -v|
egrep -e “^[A-Z0-9]+[^A-Z0-9]+[0-9]+[^A-Z0-9]+OK”|
awk ‘{print $1″|”$2″|”$3}’|
$LOGGER -p local3.info -t temper
fi
if [ -x /usr/sbin/lom ]; then
/usr/sbin/lom -t|grep degC|
awk ‘{print $2″|”$3″|OK”}’|
$LOGGER -p local3.info -t temper
fi
Příště (až zas bude trochu času) si ukážeme, jak data zpracovat na centralnim serveru.
Reklama:
Monitorování internetových serverů a síťové nástroje – Network Server Monitor