/usr/lib/xymon/client/bin/xymonclient-sunos.sh is in xymon-client 4.3.28-3build1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | #!/bin/sh
#----------------------------------------------------------------------------#
# Solaris client for Xymon #
# #
# Copyright (C) 2005-2011 Henrik Storner <henrik@hswn.dk> #
# #
# This program is released under the GNU General Public License (GPL), #
# version 2. See the file "COPYING" for details. #
# #
#----------------------------------------------------------------------------#
#
# $Id: xymonclient-sunos.sh 7999 2017-01-06 02:00:06Z jccleaver $
# Work out what type of environment we are on
#
# this will return the zone name on any non-global solaris zone
# or the word "Global" on any global solaris zone
# or the word "global" on any standalone solaris platform, including LDOMS
(/usr/sbin/zoneadm list 2>/dev/null || echo 1) | wc -l | grep '\<1\>' > /dev/null 2>&1 && ZTYPE=`/bin/zonename 2>/dev/null || echo global` || ZTYPE='Global'
echo "[date]"
date
echo "[uname]"
uname -a
echo "[uptime]"
uptime
echo "[who]"
who
echo "[df]"
# Bothersome, because Solaris df cannot show multiple fs-types, or exclude certain fs types.
# Print the root filesystem first, with the header, and those fs's that have the same type.
ROOTFSTYPE=`/bin/df -n / | awk '{print $3}'`
/bin/df -F $ROOTFSTYPE -k
# Then see what fs types are in use, and weed out those we don't want.
case $ZTYPE in
global|Global)
FSTYPES=`/bin/df -n -l|cut -d: -f2 | awk '{print $1}'|egrep -v "^${ROOTFSTYPE}|^proc|^fd|^mntfs|^ctfs|^devfs|^objfs|^nfs|^lofs|^tmpfs|^sharefs"|sort|uniq`
;;
*)
# zones are frequently type lofs so deal with them specially
FSTYPES=`/bin/df -n -l|cut -d: -f2 | awk '{print $1}'|egrep -v "^${ROOTFSTYPE}|^proc|^fd|^mntfs|^ctfs|^devfs|^objfs|^nfs|^tmpfs|^sharefs"|sort|uniq`
;;
esac
# $FSTYPES may be empty
for fst in $FSTYPES; do
case $ZTYPE in
global|Global)
/bin/df -F $fst -k | grep -v " /var/run" | tail +2
;;
*)
/bin/df -F $fst -k | egrep -v "( /var/run|^(/dev|/platform/))" | tail +2
;;
esac
done
# This only works for ufs filesystems
echo "[inode]"
(if test -x /usr/ucb/df
then
/usr/ucb/df -i
else
df -o i 2>/dev/null
fi) | awk '
NR<2{printf "%-20s %10s %10s %10s %10s %s\n", $1, "itotal", $2, $3, $4, $5}
NR>=2{printf "%-20s %10d %10d %10d %10s %s\n", $1, $2+$3, $2, $3, $4, $5}'
echo "[mount]"
mount
echo "[prtconf]"
case $ZTYPE in
global|Global)
/usr/sbin/prtconf 2>&1
;;
*)
# provided by the firmware (PROM) since devinfo facility not available
# in a zone
/usr/sbin/prtconf -p 2>&1
;;
esac
echo "[memory]"
case $ZTYPE in
global|Global)
vmstat 1 2 | tail -1
;;
*)
# need to modify vmstat output in a non-global zone
VMSTAT=`vmstat 1 2 | tail -1`
# cut out the useable parts
VMFR=`echo $VMSTAT | cut -d " " -f1,2,3`
VMBK=`echo $VMSTAT | cut -d " " -f6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22`
# get the total memory for the platform
TMEM=`/usr/sbin/prtconf 2>&1 | grep Memory | cut -d" " -f3`
TMEM=`expr $TMEM "*" 1024`
# get the total allocated and reserved swap
SUSED=`swap -s | cut -d "=" -f2 | cut -d "," -f1 | cut -d " " -f2 | cut -d "k" -f1`
# work out the RSS for this zone
TUSED=`prstat -Z -n 1,1 1 1 | \
nawk ' NR == 4 {
do {
if ($4 ~ /G$/) { sub(/G$/,"",$4); print $4*1024*1024; break; }
if ($4 ~ /M$/) { sub(/M$/,"",$4); print $4*1024; break; }
if ($4 ~ /K$/) { sub(/K$/,"",$4); print $4; break; }
print "unknown"
} while (0)}'`
TUSED=`expr $TMEM "-" $TUSED`
echo "$VMFR $SUSED $TUSED $VMBK"
;;
esac
echo "[swap]"
/usr/sbin/swap -s
# don't report the swaplist in a non-global zone because it will cause the
# server client module to miscalculate memory
case $ZTYPE in
global|Global)
echo "[swaplist]"
/usr/sbin/swap -l 2>/dev/null
;;
esac
echo "[ifconfig]"
ifconfig -a
echo "[route]"
netstat -rn
echo "[netstat]"
netstat -s
echo "[ports]"
netstat -na -f inet -P tcp | tail +3
netstat -na -f inet6 -P tcp | tail +5
echo "[ifstat]"
# Leave out the wrmsd and mac interfaces. See http://www.xymon.com/archive/2009/06/msg00204.html
case $ZTYPE in
global|Global)
/usr/bin/kstat -p -s '[or]bytes64' | egrep -v 'wrsmd|mac' | sort
;;
*)
# find out which nics are configured into this zone
MYNICS=`netstat -i |cut -f1 -d" " | egrep -i -v "Name|lo|^$" |paste -s -d"|" - `
/usr/bin/kstat -p -s '[or]bytes64' | egrep "$MYNICS"| sort
;;
esac
echo "[ps]"
case $ZTYPE in
global)
/bin/ps -A -o pid,ppid,user,stime,s,pri,pcpu,time,pmem,rss,vsz,args
;;
Global)
/bin/ps -A -o zone,pid,ppid,user,stime,class,s,pri,pcpu,time,pmem,rss,vsz,args | sort
;;
*)
/bin/ps -A -o pid,ppid,user,stime,class,s,pri,pcpu,time,pmem,rss,vsz,args
;;
esac
# If TOP is defined, then use it. If not, fall back to the Solaris prstat command.
echo "[top]"
if test "$TOP" != "" -a -x "$TOP"
then
"$TOP" -b 20
else
prstat -can 20 1 1
fi
# vmstat and iostat (iostat -d provides a cpu utilisation with I/O wait number)
nohup sh -c "vmstat 300 2 1>$XYMONTMP/xymon_vmstat.$MACHINEDOTS.$$ 2>&1; mv $XYMONTMP/xymon_vmstat.$MACHINEDOTS.$$ $XYMONTMP/xymon_vmstat.$MACHINEDOTS" </dev/null >/dev/null 2>&1 &
nohup sh -c "iostat -c 300 2 1>$XYMONTMP/xymon_iostatcpu.$MACHINEDOTS.$$ 2>&1; mv $XYMONTMP/xymon_iostatcpu.$MACHINEDOTS.$$ $XYMONTMP/xymon_iostatcpu.$MACHINEDOTS" </dev/null >/dev/null 2>&1 &
nohup sh -c "iostat -dxsrP 300 2 1>$XYMONTMP/xymon_iostatdisk.$MACHINEDOTS.$$ 2>&1; mv $XYMONTMP/xymon_iostatdisk.$MACHINEDOTS.$$ $XYMONTMP/xymon_iostatdisk.$MACHINEDOTS" </dev/null >/dev/null 2>&1 &
sleep 5
if test -f $XYMONTMP/xymon_vmstat.$MACHINEDOTS; then echo "[vmstat]"; cat $XYMONTMP/xymon_vmstat.$MACHINEDOTS; rm -f $XYMONTMP/xymon_vmstat.$MACHINEDOTS; fi
if test -f $XYMONTMP/xymon_iostatcpu.$MACHINEDOTS; then echo "[iostatcpu]"; cat $XYMONTMP/xymon_iostatcpu.$MACHINEDOTS; rm -f $XYMONTMP/xymon_iostatcpu.$MACHINEDOTS; fi
if test -f $XYMONTMP/xymon_iostatdisk.$MACHINEDOTS; then echo "[iostatdisk]"; cat $XYMONTMP/xymon_iostatdisk.$MACHINEDOTS; rm -f $XYMONTMP/xymon_iostatdisk.$MACHINEDOTS; fi
exit
|