linux系统基础监控脚本

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
#! /bin/bash

while getopts ivh name
do
case $name in
i)iopt=1;;
v)vopt=1;;
h)hopt=1;;
*)echo "Invalid arg";;
esac
done

if [[ ! -z $iopt ]]
then
{
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"
}
fi

if [[ ! -z $vopt ]]
then
{
echo -e "tecmint_monitor version 0.1\nDesigned by Tecmint.com\nReleased Under Apache 2.0 License"
}
fi
if [[ ! -z $hopt ]]
then
{
echo -e " -i Install script"
echo -e " -v Print version information and exit"
echo -e " -h Print help (this information) and exit"
}
fi

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

unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage

tecreset=$(tput sgr0)

ping -c 1 www.baidu.com &> /dev/null && echo -e '\E[32m'"Internet: $tecreset Connected" || echo -e '\E[32m'"Internet: $tecreset Disconnected"

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

###################################
OS=uname -s
REV=uname -r
MACH=uname -m

GetVersionFromFile()
{
VERSION=cat $1 | tr "\n" ' ' | sed s/.*VERSION.*=\ //
}

if [ "${OS}" = "SunOS" ] ; then
OS=Solaris
ARCH=uname -p
OSSTR="${OS} ${REV}(${ARCH} uname -v)"
elif [ "${OS}" = "AIX" ] ; then
OSSTR="${OS} oslevel (oslevel -r)"
elif [ "${OS}" = "Linux" ] ; then
KERNEL=uname -r
if [ -f /etc/redhat-release ] ; then
DIST='RedHat'
PSUEDONAME=cat /etc/redhat-release | sed s/.*\(// | sed s/\)//
REV=cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//
elif [ -f /etc/SuSE-release ] ; then
DIST=cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//
REV=cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //
elif [ -f /etc/mandrake-release ] ; then
DIST='Mandrake'
PSUEDONAME=cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//
REV=cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//
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

##################################
#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

architecture=$(uname -m)
echo -e '\E[32m'"Architecture :" $tecreset $architecture


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


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


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


externalip=$(curl -s ipecho.net/plain;echo)
echo -e '\E[32m'"External IP : $tecreset "$externalip


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


who>/tmp/who
echo -e '\E[32m'"Logged In users :" $tecreset && cat /tmp/who

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"


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


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


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


unset tecreset os architecture kernelrelease internalip externalip nameserver loadaverage

rm /tmp/who /tmp/ramcache /tmp/diskusage
}
fi
shift $(($OPTIND -1))

将次脚本命名为monitor,放到服务器的/usr/bin/下,授予执行+x权限

chmod o+x /usr/bin/monitor

然后直接执行monitor命令即可查看系统相关信息

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
[root@localhost ~]# monitor 
Operating System Type : GNU/Linux
OS Version : Linux RedHat 7.2(Maipo 3.10.0-327.el7.x86_64 x86_64)
Architecture : x86_64
Kernel Release : 3.10.0-327.el7.x86_64
Hostname : localhost
Internal IP : 1.1.1.1
Name Servers : *.*.com. 1.1.1.1 1.1.1.1
Logged In users :
aq pts/0 2020-09-24 15:31 (172.30.1.199)
Ram Usages :
total used free shared buff/cache available
Mem: 7.6G 638M 161M 397M 6.9G 6.4G
Swap Usages :
total used free shared buff/cache available
Swap: 8.0G 3.4M 8.0G
Disk Usages :
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 99G 63G 31G 67% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 52K 3.9G 1% /dev/shm
/dev/mapper/vg_data-lv_data 197G 3.2G 184G 2% /opt
Port Usages :
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6509/haproxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 933/sshd: /usr/sbin
tcp6 0 0 :::22 :::* LISTEN 933/sshd: /usr/sbin
Load Average : loadaverage:0.12,
System Uptime Days/(HH:MM) : 71 days