这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,25 @@ usage in Linux.

# USAGE

To execute the script please read its content, using in preference nano editor, and then
Script execution without parameter prints system health infomration.

```
$ bash tecmin_monitor.sh
```
or you can install it, by downloading the script to the computer you want to monitor. Then give the appropiate permissions to the script using ```chmod``` command and execute it like this :

![Shell Script to Monitor Linux System Health](http://www.tecmint.com/wp-content/uploads/2015/05/Linux-Health-Monitoring.png "Shell Script to Monitor Linux System Health")

For JSON uptput use `-j` parameter.

```
$./tecmint_monitor.sh -i
$ bash tecmin_monitor.sh -j
```

![Shell Script to Monitor Linux System Health](http://www.tecmint.com/wp-content/uploads/2015/05/Linux-Health-Monitoring.png "Shell Script to Monitor Linux System Health")
For installation as admin user use `-i` parameter.

```
# bash tecmin_monitor.sh -i
```

You can check some basics informations about the script by executing :
```
Expand Down
126 changes: 82 additions & 44 deletions tecmint_monitor.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@

unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage

while getopts iv name
while getopts ijv name
do
case $name in
i)iopt=1;;
v)vopt=1;;
j)jopt=1;;
*)echo "Invalid arg";;
esac
done
Expand All @@ -27,42 +28,48 @@ wd=$(pwd)
basename "$(test -L "$0" && readlink "$0" || echo "$0")" > /tmp/scriptname
scriptname=$(echo -e -n $wd/ && cat /tmp/scriptname)
su -c "cp $scriptname /usr/bin/monitor" root && echo "Congratulations! Script Installed, now run monitor Command" || echo "Installation failed"
exit
}
fi

if [[ ! -z $vopt ]]
then
{
echo -e "tecmint_monitor version 0.1\nDesigned by Tecmint.com\nReleased Under Apache 2.0 License"
echo -e "tecmint_monitor version 0.3\nDesigned by Tecmint.com\nReleased Under Apache 2.0 License"
exit
}
fi

if [[ $# -eq 0 ]]
then
{


# Define Variable tecreset
tecreset=$(tput sgr0)

# Check if connected to Internet or not
ping -c 1 google.com &> /dev/null && echo -e '\E[32m'"Internet: $tecreset Connected" || echo -e '\E[32m'"Internet: $tecreset Disconnected"

# Check OS Type
os=$(uname -o)
echo -e '\E[32m'"Operating System Type :" $tecreset $os

# Check OS Release Version and Name
###################################
OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`

#functions
GetVersionFromFile()
{
VERSION=`cat $1 | tr "\n" ' ' | sed s/.*VERSION.*=\ // `
}
remove_files()
{
# Remove Temporary Files
rm /tmp/who /tmp/ramcache /tmp/diskusage
}

#define output constants and tmp files
internet=$(ping -c 1 google.com &> /dev/null && echo "Connected" || echo "Disconnected")
os=$(uname -o 2>/dev/null || uname -s)
architecture=$(uname -m)
kernelrelease=$(uname -r)
hostname=$HOSTNAME
internalip=$(hostname -I 2>/dev/null || (echo $(ip a| grep inet| grep -v "host lo" | tr / " " | awk '{print $2}')))
dig >/dev/null 2>&1 || USEDIG=0
if [[ $USEDIG == "1" ]]; then
externalip=$(dig +short myip.opendns.com @resolver1.opendns.com)
else
externalip=$(curl -s ipecho.net/plain;echo)
fi
nameservers=$(cat /etc/resolv.conf | grep -v ^\# | awk '{print $2}')
loadaverage=$((top -n 1 -b 2>/dev/null || (echo q | top)) | grep -i "load average:" | awk -F'average:' '{print $2}'| awk '{print $1" "$2" "$3}')
tecuptime=$(uptime | awk '{print $3,$4}' | cut -f1 -d,)
OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`
if [ "${OS}" = "SunOS" ] ; then
OS=Solaris
ARCH=`uname -p`
Expand All @@ -83,77 +90,108 @@ elif [ "${OS}" = "Linux" ] ; then
PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/os-release ]; then
DIST=`awk -F "PRETTY_NAME=" '{print $2}' /etc/os-release | tr -d '\n"'`
DIST=`awk -F "PRETTY_NAME=" '{print $2}' /etc/os-release | tr -d '\n"'`
elif [ -f /etc/debian_version ] ; then
DIST="Debian `cat /etc/debian_version`"
REV=""

fi
if ${OSSTR} [ -f /etc/UnitedLinux-release ] ; then
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
fi

OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"
fi
who 2>/dev/null > /tmp/who || SKIPWHO=1
(free -h 2>/dev/null || free )| grep -v + | grep -v Total: > /tmp/ramcache
df -h| grep '^Filesystem\|^/dev/sd\|^/dev/mapper/\|^/dev/root\|^/dev/mm\|^overlay' > /tmp/diskusage

if [[ ! -z $jopt ]]
then
{
echo -n "{"
echo -n "\"internet\":$(echo $internet | jq -R '.'),"
echo -n "\"os_type\":$(echo $os | jq -R '.'),"
echo -n "\"os_version\":$(echo $OSSTR | jq -R '.'),"
echo -n "\"architecture\":$(echo $architecture | jq -R '.'),"
echo -n "\"kernel_release\":$(echo $kernelrelease | jq -R '.'),"
echo -n "\"hostname\":$(echo $hostname | jq -R '.'),"
echo -n "\"ip_internal\":$(echo $internalip | jq -R -c 'split(" ")'),"
echo -n "\"ip_external\":$(echo $externalip | jq -R -c 'split(" ")'),"
echo -n "\"name_servers\":$(echo $nameservers | jq -R -c 'split(" ")'),"
if [[ $SKIPWHO != "1" ]];then
echo -n "\"logged_in_users\":$(cat /tmp/who | tr "()" " " | sed 's/ \+/ /g' | sed 's/ $//g' | jq -R -c 'split(" ")' | jq -s -c '.'),"
fi
echo -n "\"memory\":$(cat /tmp/ramcache | grep "Mem" | awk '{$1="";print $0}' | xargs | jq -R -c 'split(" ")'),"
echo -n "\"swap\":$(cat /tmp/ramcache | grep "Swap" | awk '{$1="";print $0}' | xargs | jq -R -c 'split(" ")'),"
echo -n "\"disk\":$(tail -n +2 /tmp/diskusage | sed 's/ \+/ /g' | jq -R -c 'split(" ")' | jq -s -c '.'),"
echo -n "\"load\":$(echo $loadaverage | jq -R -c 'split(", ")'),"
echo -n "\"uptime\":$(echo $tecuptime | jq -R '.')"
echo -n "}"
echo
remove_files
exit
}
fi

##################################
if [[ $# -eq 0 ]]
then
{


# Define Variable tecreset
tecreset=$(tput sgr0 2>/dev/null || echo -e '\E[0m')

# Check if connected to Internet or not
echo -e '\E[32m'"Internet :" $tecreset $internet

# Check OS Type
echo -e '\E[32m'"Operating System Type :" $tecreset $os

#cat /etc/os-release | grep 'NAME\|VERSION' | grep -v 'VERSION_ID' | grep -v 'PRETTY_NAME' > /tmp/osrelease
#echo -n -e '\E[32m'"OS Name :" $tecreset && cat /tmp/osrelease | grep -v "VERSION" | grep -v CPE_NAME | cut -f2 -d\"
#echo -n -e '\E[32m'"OS Version :" $tecreset && cat /tmp/osrelease | grep -v "NAME" | grep -v CT_VERSION | cut -f2 -d\"
echo -e '\E[32m'"OS Version :" $tecreset $OSSTR
# Check Architecture
architecture=$(uname -m)
echo -e '\E[32m'"Architecture :" $tecreset $architecture

# Check Kernel Release
kernelrelease=$(uname -r)
echo -e '\E[32m'"Kernel Release :" $tecreset $kernelrelease

# Check hostname
echo -e '\E[32m'"Hostname :" $tecreset $HOSTNAME
echo -e '\E[32m'"Hostname :" $tecreset $hostname

# Check Internal IP
internalip=$(hostname -I)
echo -e '\E[32m'"Internal IP :" $tecreset $internalip

# Check External IP
externalip=$(dig +short myip.opendns.com @resolver1.opendns.com)
echo -e '\E[32m'"External IP : $tecreset "$externalip

# Check DNS
nameservers=$(cat /etc/resolv.conf | sed '1 d' | awk '{print $2}')
echo -e '\E[32m'"Name Servers :" $tecreset $nameservers

# Check Logged In Users
who>/tmp/who
echo -e '\E[32m'"Logged In users :" $tecreset && cat /tmp/who
if [[ $SKIPWHO != "1" ]];then
# Check Logged In Users
echo -e '\E[32m'"Logged In users :" $tecreset && cat /tmp/who
fi

# Check RAM and SWAP Usages
free -h | grep -v + > /tmp/ramcache
echo -e '\E[32m'"Ram Usages :" $tecreset
cat /tmp/ramcache | grep -v "Swap"
echo -e '\E[32m'"Swap Usages :" $tecreset
cat /tmp/ramcache | grep -v "Mem"
cat /tmp/ramcache | grep -v "Mem" | awk -F'shared' '{print $1}'

# Check Disk Usages
df -h| grep 'Filesystem\|/dev/sda*' > /tmp/diskusage
echo -e '\E[32m'"Disk Usages :" $tecreset
cat /tmp/diskusage

# Check Load Average
loadaverage=$(top -n 1 -b | grep "load average:" | awk '{print $10 $11 $12}')
echo -e '\E[32m'"Load Average :" $tecreset $loadaverage

# Check System Uptime
tecuptime=$(uptime | awk '{print $3,$4}' | cut -f1 -d,)
echo -e '\E[32m'"System Uptime Days/(HH:MM) :" $tecreset $tecuptime

# Unset Variables
unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage

# Remove Temporary Files
rm /tmp/who /tmp/ramcache /tmp/diskusage
remove_files
}
fi
shift $(($OPTIND -1))