Jednoduchý performance monitor II.

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

Leave a Reply

Your email address will not be published. Required fields are marked *