Linux制作之利用Shell剧本对Linux体系和历程资本举行监控仓酷云
但不会命令而成为高手也是不可能的.这就好比学英语,什么语法都不懂,只捧着单词手册背单词是学不会英语的,但是没有单词词汇量英语水平也提不高的。反省历程是不是存在
在对历程举行监控时,我们一样平常必要失掉该历程的ID,历程ID是历程的独一标识,可是偶然大概在服务器上分歧用户下运转着多个不异历程名的历程,上面的函数GetPID给出了猎取指定用户下指定历程名的历程ID功效(今朝只思索这个用户下启动一个此历程名的历程),它有两个参数为用户名和历程名,它起首利用ps查找历程信息,同时经由过程grep过滤出必要的历程,最初经由过程sed和awk查找必要历程的ID值(此函数可依据实践情形修正,好比必要过滤别的信息等)。
清单1.对历程举行监控
1
2
3
4
5
6
7
8
functionGetPID#User#Name
{
PsUser=$1
PsName=$2
pid=`ps-u$PsUser|grep$PsName|grep-vgrep|grep-vvi|grep-vdbxn
|grep-vtail|grep-vstart|grep-vstop|sed-n1p|awk{print$1}`
echo$pid
}
示例演示:
1)源程序(比方查找用户为root,历程名为CFTestApp的历程ID)
1
2
PID=`GetPIDrootCFTestApp`
echo$PID
2)了局输入
1
2
11426
$
3)了局剖析
从下面的输入可见:11426为root用户下的CFTestApp程序的历程ID。
4)命令先容
1.ps:检察体系中刹时历程信息。
参数:-u<用户辨认码>列出属于该用户的程序的情况,也可以使用用户称号来指定。
-p<历程辨认码>指定历程辨认码,并列出该历程的情况。
-o指定输入格局
2.grep:用于查找文件中切合字符串确当前行。
参数:-v反向选择,亦即显现出没有‘征采字符串’内容的那一行。
3.sed:一个非交互性文本编纂器,它编纂文件或尺度输出导出的文件,一次只能处置一行内容。
参数:-n读取下一个输出行,用下一个命令处置新的行而不是用第一个命令。
p标记打印婚配行
4.awk:一种编程言语,用于在linux/unix下对文本和数据举行处置。数据能够来自尺度输出、一个或多个文件,或别的命令的输入。它撑持用户自
界说函数和静态正则表达式等先辈功效,是linux/unix下的一个壮大编程工具。它在命令行中利用,但更多是作为剧本来利用。awk的处置文本和数据的体例:它逐行扫描文件,从第一行到最初一行,寻觅婚配的特定形式的行,并在这些行长进行你想要的操纵。假如没有指定处置举措,则把婚配的行显现到尺度输入(屏幕),假如没有指定形式,则一切被操纵所指定的行都被处置。
参数:-Ffsor–field-separatorfs:指定输出文件折分开符,fs是一个字符串大概是一个正则表达式,如-F:。
偶然有大概历程没有启动,上面的功效是反省历程ID是不是存在,假如此历程没有运转输入:
1
2
3
4
5
6
7
8
Theprocessdoesnotexist.
#反省历程是不是存在
if["-$PID"=="-"]
then
{
echo"Theprocessdoesnotexist."
}
fi
检测历程CPU使用率
在对使用服务举行保护时,我们常常碰到因为CPU太高招致营业堵塞,形成营业中止的情形。CPU太高大概因为营业量过负荷大概呈现逝世轮回等非常情形,经由过程剧本对营业历程CPU举行不时监控,能够在CPU使用率非常时实时关照保护职员,便于保护职员实时剖析,定位,和制止营业中止等。上面的函数可取得指定历程ID的历程CPU使用率。它有一个参数为历程ID,它起首利用ps查找历程信息,同时经由过程grep-v过滤失落%CPU行,最初经由过程awk查找CPU使用百分比的整数部分(假如体系中有多个CPU,CPU使用率能够凌驾100%)。
清单2.对营业历程CPU举行及时监控
1
2
3
4
5
functionGetCpu
{
CpuValue=`ps-p$1-opcpu|grep-vCPU|awk{print$1}|awk-F.{print$1}`
echo$CpuValue
}
上面的功效是经由过程下面的函数GetCpu取得此历程的CPU使用率,然后经由过程前提语句判别CPU使用率是不是凌驾限定,假如凌驾80%(能够依据实践情形举行调剂),则输入告警,不然输入一般信息。
清单3.判别CPU使用率是不是凌驾限定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
functionCheckCpu
{
PID=$1
cpu=`GetCpu$PID`
if[$cpu-gt80]
then
{
echo“Theusageofcpuislargerthan80%”
}
else
{
echo“Theusageofcpuisnormal”
}
fi
}
示例演示:
1)源程序(假定下面已查询出CFTestApp的历程ID为11426)
1
CheckCpu11426
2)了局输入
1
2
3
Theusageofcpuis75
Theusageofcpuisnormal
$
3)了局剖析
从下面的输入可见:CFTestApp程序以后的CPU利用为75%,是一般的,没有凌驾80%的告警限定。
<br>
检测历程内存利用量
在对使用服务举行保护时,也常常碰到因为内存利用过年夜招致历程溃散,形成营业中止的情形(比方32位程序可寻址的最年夜内存空间为4G,假如超越将请求内存失利,同时物理内存也是无限的)。内存利用太高大概因为内存保守,动静聚积等情形,经由过程剧本对营业历程内存利用量举行不时监控,能够在内存利用量非常时实时发送告警(比方经由过程短信),便于保护职员实时处置。上面的函数可取得指定历程ID的历程内存利用情形。它有一个参数为历程ID,它起首利用ps查找历程信息,同时经由过程grep-v过滤失落VSZ行,然后经由过程除1000取以兆为单元的内存利用量。
清单4.对营业历程内存利用量举行监控
1
2
3
4
5
6
functionGetMem
{
MEMUsage=`ps-ovsz-p$1|grep-vVSZ`
((MEMUsage/=1000))
echo$MEMUsage
}
上面的功效是经由过程下面的函数GetMem取得此历程的内存利用,然后经由过程前提语句判别内存利用是不是凌驾限定,假如凌驾1.6G(能够依据实践情形举行调剂),则输入告警,不然输入一般信息。
清单5.判别内存利用是不是凌驾限定
1
2
3
4
5
6
7
8
9
10
11
mem=`GetMem$PID`
if[$mem-gt1600]
then
{
echo“Theusageofmemoryislargerthan1.6G”
}
else
{
echo“Theusageofmemoryisnormal”
}
fi
示例演示:
1)源程序(假定下面已查询出CFTestApp的历程ID为11426)
1
2
3
4
5
6
7
8
9
10
11
12
mem=`GetMem11426`
echo"Theusageofmemoryis$memM"
if[$mem-gt1600]
then
{
echo"Theusageofmemoryislargerthan1.6G"
}
else
{
echo"Theusageofmemoryisnormal"
}
fi
2)了局输入
1
2
3
Theusageofmemoryis248M
Theusageofmemoryisnormal
$
3)了局剖析
从下面的输入可见:CFTestApp程序以后的内存利用为248M,是一般的,没有凌驾1.6G的告警限定。
检测历程句柄利用量
在对使用服务举行保护时,也常常碰到因为句柄利用过量招致营业中止的情形。每一个平台对历程的句柄利用都是无限的,比方在Linux平台,我们可使用ulimit–n命令(openfiles(-n)1024)大概对/etc/security/limits.conf的内容举行检察,失掉历程句柄限定。句柄利用太高大概因为负载太高,句柄保守等情形,经由过程剧本对营业历程句柄利用量举行不时监控,能够在非常时实时发送告警(比方经由过程短信),便于保护职员实时处置。上面的函数可取得指定历程ID的历程句柄利用情形。它有一个参数为历程ID,它起首利用ls输入历程句柄信息,然后经由过程wc-l统计输入句柄个数。
1
2
3
4
5
functionGetDes
{
DES=`ls/proc/$1/fd|wc-l`
echo$DES
}
上面功效是经由过程下面的函数GetDes取得此历程的句柄利用量,然后经由过程前提语句判别句柄利用是不是凌驾限定,假如凌驾900(能够依据实践情形举行调剂)个,则输入告警,不然输入一般信息。
1
2
3
4
5
6
7
8
9
10
11
des=`GetDes$PID`
if[$des-gt900]
then
{
echo“Thenumberofdesislargerthan900”
}
else
{
echo“Thenumberofdesisnormal”
}
fi
示例演示:
1)源程序(假定下面查询出CFTestApp的历程ID为11426)
1
2
3
4
5
6
7
8
9
10
11
12
des=`GetDes11426`
echo"Thenumberofdesis$des"
if[$des-gt900]
then
{
echo"Thenumberofdesislargerthan900"
}
else
{
echo"Thenumberofdesisnormal"
}
fi
2)了局输入
1
2
3
Thenumberofdesis528
Thenumberofdesisnormal
$
3)了局剖析
从下面的输入可见:CFTestApp程序以后的句柄利用为528个,是一般的,没有凌驾900个的告警限定。
4)命令先容
wc:统计指定文件中的字节数、字数、行数,并将统计了局显现输入。
参数:-l统计行数。
-c统计字节数。
-w统计字数。
利用Shell对体系资本举行监控
检察某个TCP或UDP端口是不是在监听
端口检测是体系资本检测常常碰到的,出格是在收集通信情形下,端口形态的检测常常是很主要的。偶然大概历程,CPU,内存等处于一般形态,可是端口处于非常形态,营业也是没有一般运转。上面函数可判别指定端口是不是在监听。它有一个参数为待检测端口,它起首利用netstat输入端口占用信息,然后经由过程grep,awk,wc过滤输入监听TCP端口的个数,第二条语句为输入UDP端口的监听个数,假如TCP与UDP端口监听都为0,前往0,不然前往1.
清单6.端口检测
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
functionListening
{
TCPListeningnum=`netstat-an|grep":$1"|n
awk$1=="tcp"&&$NF=="LISTEN"{print$0}|wc-l`
UDPListeningnum=`netstat-an|grep":$1"n
|awk$1=="udp"&&$NF=="0.0.0.0:*"{print$0}|wc-l`
((Listeningnum=TCPListeningnum+UDPListeningnum))
if[$Listeningnum==0]
then
{
echo"0"
}
else
{
echo"1"
}
fi
}
示例演示:
1)源程序(比方查询8080端口的形态是不是在监听)
1
2
3
4
5
6
7
8
9
10
11
isListen=`Listening8080`
if[$isListen-eq1]
then
{
echo"Theportislistening"
}
else
{
echo"Theportisnotlistening"
}
fi
2)了局输入
1
2
Theportislistening
$
3)了局剖析
从下面的输入可见:这个Linux服务器的8080端口处在监听形态。
4)命令先容
netstat:用于显现与IP、TCP、UDP和ICMP协定相干的统计数据,一样平常用于查验本机各端口的收集毗连情形。
参数:-a显现一切连线中的Socket。
-n间接利用IP地点,而欠亨过域名服务器。
上面的功效也是检测某个TCP大概UDP端口是不是处在一般形态。
1
2
tcp:netstat-an|egrep$1|awk$6=="LISTEN"&&$1=="tcp"{print$0}
udp:netstat-an|egrep$1|awk$1=="udp"&&$5=="0.0.0.0:*"{print$0}
命令先容
egrep:在文件外调找指定的字符串。egrep实行效果如grep-E,利用的语法及参数可参照grep指令,与grep分歧点在于解读字符串的办法,egrep是用扩大的正则表达式语法来解读,而grep则用基础的正则表达式语法,扩大的正则表达式比基础的正则表达式有更完全的表达标准。
检察某个历程名正在运转的个数
偶然我们大概必要失掉服务器上某个历程的启动个数,上面的功效是检测某个历程正在运转的个数,比方历程名为CFTestApp。
1
Runnum=`ps-ef|grep-vvi|grep-vtail|grep"[/]CFTestApp"|grep-vgrep|wc-l
检测体系CPU负载
在对服务器举行保护时,偶然也碰到因为体系CPU(使用率)负载过量招致营业中止的情形。服务器上大概运转多个历程,检察单个历程的CPU都是一般的,可是全部体系的CPU负载多是非常的。经由过程剧本对体系CPU负载举行不时监控,能够在非常时实时发送告警,便于保护职员实时处置,防备变乱产生。上面的函数能够检测体系CPU利用情形.利用vmstat取5次体系CPU的idle值,取均匀值,然后经由过程与100取差失掉以后CPU的实践占用值。
1
2
3
4
5
6
7
functionGetSysCPU
{
CpuIdle=`vmstat15|sed-n3,$pn
|awk{x=x+$15}END{printx/5}|awk-F.{print$1}
CpuNum=`echo"100-$CpuIdle"|bc`
echo$CpuNum
}
示例演示:
1)源程序
1
2
3
4
5
6
7
8
9
10
11
12
cpu=`GetSysCPU`
echo"ThesystemCPUis$cpu"
if[$cpu-gt90]
then
{
echo"Theusageofsystemcpuislargerthan90%"
}
else
{
echo"Theusageofsystemcpuisnormal"
}
fi
2)了局输入
1
2
3
ThesystemCPUis87
Theusageofsystemcpuisnormal
$
3)了局剖析
从下面的输入可见:以后Linux服务器体系CPU使用率为87%,是一般的,没有凌驾90%的告警限定。
4)命令先容
vmstat:VirtualMeomoryStatistics(假造内存统计)的缩写,可对操纵体系的假造内存、历程、CPU举动举行监督。
参数:-n暗示在周期性轮回输入时,输入的头部信息仅显现一次。
检测体系磁盘空间
体系磁盘空间检测是体系资本检测的主要部分,在体系保护保护中,我们常常必要检察服务器磁盘空间利用情形。由于有些营业要不时写话单,日记,大概一时文件等,假如磁盘空间用尽,也大概会招致营业中止,上面的函数能够检测以后体系磁盘空间中某个目次的磁盘空间利用情形.输出参数为必要检测的目次名,利用df输入体系磁盘空间利用信息,然后经由过程grep和awk过滤失掉某个目次的磁盘空间利用百分比。
1
2
3
4
5
6
7
8
9
10
functionGetDiskSpc
{
if[$#-ne1]
then
return1
fi
Folder="$1$"
DiskSpace=`df-k|grep$Folder|awk{print$5}|awk-F%{print$1}
echo$DiskSpace
}
示例演示:
1)源程序(检测目次为/boot)
1
2
3
4
5
6
7
8
9
10
11
12
13
Folder="/boot"
DiskSpace=`GetDiskSpc$Folder`
echo"Thesystem$Folderdiskspaceis$DiskSpace%"
if[$DiskSpace-gt90]
then
{
echo"Theusageofsystemdisk($Folder)islargerthan90%"
}
else
{
echo"Theusageofsystemdisk($Folder)isnormal"
}
fi
2)了局输入
1
2
3
Thesystem/bootdiskspaceis14%
Theusageofsystemdisk(/boot)isnormal
$
3)了局剖析
从下面的输入可见:以后此Linux服务器体系上/boot目次的磁盘空间已利用了14%,是一般的,没有凌驾利用90%的告警限定。
4)命令先容
df:反省文件体系的磁盘空间占用情形。能够使用该命令来猎取硬盘被占用了几空间,今朝还剩下几空间等信息。
参数:-k以k字节为单元显现。
总结
在Linux平台下,shell剧本监控是一个十分复杂,便利,无效的对服务器,历程举行监控的办法,对体系开辟和历程保护职员十分有匡助。它不但能够对下面的信息举行监控,发送告警,同时也能够监控历程的日记等等的信息,但愿本文对人人有匡助。
于东海、宋波、池辰
不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的和使用频率最多的命令。 选择一些适于初学者的Linux社区。 在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。 随着实验课程的结束,理论课也该结束了,说实话教OS的这两位老师是我们遇到过的不错的老师(这话放这可能不太恰当). 用户下达的命令解释给系统去执行,并将系统传回的信息再次解释给用户,估shell也称为命令解释器,有关命令的学习可参考论坛相关文章,精通英文也是学习Linux的关键。 可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。? 学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向。 Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。 学习Linux半年了~个人认为不会的多在网上找资料网上有很多资料可以搜索到,LS那位说放手去搞。 通过一条缓慢的调制解调器线路,它也能操纵几千公里以外的远程系统。 掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。
页:
[1]