首先了解一点关于密码的设置。
有的服务器在运行某些服务的时候可能会出现一些问题,可能会引起很严重的后果,比如用户数据丢失,所以监测服务是很有必要的,但是我们总不能一直人为地去检查那么多台服务器吧。我们有一些软件比如zabbix可以实现监控,不过我们现在学的是脚本,那么下面我们就来看一看如何用脚本自动监测服务并且发邮件报警。下面我们就以监测firewalld和iptables为例。首先如何查看服务的运行状态呢?
为什么iptables没有呢?因为我们少装了一个iptables-services,上一讲用的是192.168.214.129,这个主机装过了,这一讲用的是192.168.214.128。装完了以后就可以看了。
那么我们如何把状态提取出来呢?
然后的问题就是如何发邮件报警,发邮件用mail就可以了,如果mail说是not found,那么清先安装mailx(yum -y install mailx)。我们试着给我的qq邮箱发一封邮件。
好像没有收到啊???
这是因为由于我们没有修改主机名称我们的主机名是默认的localhost.localdomian。
这样的邮件被认为是垃圾邮件,在垃圾箱里面。
你可以点击移回收件箱,不过下一封还是会在垃圾箱里面,也可以选择修改一下主机名。
然后就不会被识别为垃圾邮件。
那么下面就可以来写这个脚本了。
然后运行一下,右下角就收到了一封邮件。
确实是收到了。
然后我们停用掉firewalld,再运行一次脚本来做测试。又收到了。
因为这两个都没有启用,所以是两封。
这是收到邮件后我们人为去查看这台服务器的毛病。当然这里还没有结束,还要和crontab结合起来,如果服务没有那么重要,我们可以每小时执行一次,如果这项服务很重要,我们就每分钟执行一次,因为每分钟crond才去检查一次有没有任务需要执行,并且格式* * * * *,最小的时间间隔也就是一分钟了。
因为是自动化批量部署,我们不希望有交互,因为有交互的话就得有人在服务器那里看着,那么远程ssh就有一个问题,那就是输入密码是一个交互的行为,我们如何才能避免这种交互呢?输入重定向?
很遗憾是不行的。那么就需要用到下面的免密登陆。参考了https://jingyan.baidu.com/album/c275f6ba08267ae33c756758.html?picindex=4
步骤如下:
我们来实际演练一下。
看到确实是不需要输密码了。
有的时候我们需要看到这样的信息,一般需要的系统信息有ip,主机名,cpu,内存,磁盘等信息。那么我们就先来看如何获取这些信息。
ip就不说了,主机名其实很简单,cpu可以查看/proc/cpuinfo,内存可以用free -m,磁盘可以用fdisk -l。
这里面我们要提取cpu的model name,处理器的核心数和主频。首先我们的处理器是4个但是其实我们设置的时候是两个处理器,每个处理器内核有2个,所以其实算的还是内核的数量是4,不过我们似乎习惯了直接称为处理器数是4。应该是每一个内核同时可以运行一个进程。怎么看出来是两个处理器呢?上面有一个physical id,只有0和1,那么就是两个处理器,每一个处理器都是两核,所以processor有0,1,2,3,每一个physical id有两个processor,这两个processor的core id不一样,分别是0和1,cpu cores是每一个cpu的核心数,看到都是2,cpu的主频在cpu MHz。
提取这些信息没有什么难的。load的三个数值以前也说过,好像是最近5分钟,10分钟,15分钟的cpu占用率。
对于内存,我们先不考虑交换分区,就先统计总共的内存,也就是Mem:total。至于磁盘我们用fdisk -l来看。我们只取这个/dev/sda:21.5GB这个信息。
那么其实提取信息这个还是比较好搞定的,如何批量提取也简单,我们搞一台服务器作为控制机,在这台控制机上在脚本里用ssh挨个把服务器列表里面的信息统计即可。这些其实都不是问题,问题是现在我想把数据导入excel里面,怎么做呢?我们可以先把数据写成csv的格式。
csv是以逗号分隔列的,写成csv格式以后我们用excel打开就会转成excel格式,就会得到我们想要的结果了。我下面就演示一下。
然后运行一下这个脚本,看一看1.csv文件。
有几个点提示一下。
这里还要纠正sed s///后面加g的作用,这个g不是从保持空间的内容复制到模式空间的意思,而是全局的意思,看下图即可,如果不加最后的g,只替换了一次。
那么现在1.csv有了,我们怎么看excel能不能看呢?有一种方法是把1.csv作为邮件附件发送。
-a选项后面就是附件。
不过不知道为什么,这封邮件又被放在垃圾箱里面了。
我们看一看这个1.csv。下载完了用excel打开的效果:
如果用记事本打开,就是这种效果:
为什么负载的数据跳了一列?这是因为24.5GB后面多了一个,我们去修改一下info.sh。最简单的办法是去掉一个逗号。
运行一次info.sh,然后再发一次邮件。
看到就对上了。这里说一下小细节,逗号一定要用英文的逗号。
还有一种方法是用sz,参考了https://blog.csdn.net/u014242496/article/details/52540637
SecureCRT也是一种和Xshell,putty类似的软件。
可以设置默认路径。
再传一次试试。
就没有选择文件夹的那一步了。那么我们再来看一下rz。
这个功能还是有软件可以实现。
不过我们还是练习写脚本试一试。我们下面来用脚本实现磁盘占用(其实准确地说应该是文件分区占用)达到一定百分比的时候报发邮件报警的这么一个脚本。首先如何查看分区占用呢?用df -h。
然后我们就可以写脚本了。我们在脚本中要设置一个cv,也就是critical value(临界值),当分区利用率超过cv时,就发邮件报警,一般是85%左右,不过这里为了能够报警,我设置了一个10%。
运行一下脚本。就收到邮件了。
邮件内容也都是没问题的。那么我先来说一下这个脚本需要注意的几个点,第一个是我们这里逐行读取文件是用了while,以前用的是for,这里算是一个复习,第二个是我们这个脚本还是复习了cat <<-EOF这种输入的方式,-在这里是不可少的,当然如果你把EOF顶头了,那么可以不要-。这个脚本也不是多难,看着df -h分析一下就可以了。最后再结合crontab。