Liunx运维监控_shark巨菜_基础篇

 

一、监控重要性

单单从“监控”两个字来谈,范围之广可以涵盖我们生活的方方面面,我们生活和工作中处处可见视频监控的摄像机;机房中的电压电流监控、干湿计、温度计;值班室的网络监控,网站流量监控等等都是监控的范畴。

一个完备的监控系统能够提供7x24小时的监控与报警功能。它能够检测网络、网络设备、服务器、数据库、和各种应用系统的运行状况;可以及时发现将要出现的问题,并通过短信、Email等方式通知、警告运维管理人员,以便运维管理人员能够实时了解系统的运行情况,对故障进行及时的处理,从而避免造成重大损失。

二、监控的对象与分类

监控的对象就是想知道的状态的一个集合,也可以说监控的对象就是那些能够影响系统运行的稳定性、高效性的相关项目。

通常情况下,我们可以将监控对象这么来分类:

1.   服务器监控。主要监控服务器如:CPU负载、内存使用率、磁盘使用率、登录用户数、进程状态、网卡状态等。

2.   应用程序监控。主要监控该应用程序的服务状态、吞吐量、响应时间等。不同的应用程序需要监控的项目也不尽相同,这里无法一一列举。

3.   数据库监控。之所以把数据库监控单独列出来,是因为他的重要性。一般监控数据库状态,数据库表或者表空间的使用情况,是否有死锁,错误日志,性能信息等等。

4.   网络监控。主要监控当前的网络状况,网络流量和链接状态等。

三、监控的阶段

我们根据系统监控的工作过程把监控分为:数据收集、数据处理、数据呈现三个阶段(监控系统本身并没有严格的分类标准)。

1.   数据收集。收集阶段负责从操作系统装载数据、获得数据值,传输或存储数据。

l  使用系统工具

系统中的监控工具没有标准,输出的数据格式各不相同。有的具备传输功能、有的能监控多个对象、有的功能单一、有的相对完善。

l  通过内核工具

通过内核模块来获取系统、内核工作状况的数据,例如oprofilesystemtap。这个方法很有效,但是一般需要单独安装软件包(例如kernel-debuginfo),而且每当内核升级的时候相关程序的升级和代码一致性问题也需要考虑。

l  /proc虚拟文件系统

通过/proc虚拟文件系统是一个比较快速、高效的进行系统监控的方法。使用/proc的主要缺点是必须频繁的进行访问、/proc里面的信息需要经过解释才能被用户读懂,但是相对的比使用内核工具更方便

2.   数据处理

处理阶段负责将来自多个数据源的数据结合在一起,这种方法减少了监控对操作系统的负担提高了效率;决定数据值是否改变并过滤它们;还对数据进行必要的转换和计算。这个阶段概况的说就是对数据进行处理、计算,准备好需要呈现的数值、图片,或者需要发送的通知的内容。

3.   数据呈现

数据呈现就是把处理过后的数据通过系统的标准输出(屏幕、远程界面)、绘图工具(如rrdtool)生成的图片、电子邮件、短信等方式,提供给系统管理人员,以便根据这些信息及时的掌握系统的运行情况,发现潜在问题。

四、监控的分类

按照规模把监控系统分为:工具监控、监控系统(平台)监控。例如:freetopsysstatdstat等。

1.   工具监控

工具监控一般包括:操作系统自带工具,其他组织提供的工具,根据自己的独特需要自行编写的监控脚本几种。系统自带工具一般只能提供系统某一个方面的情况,通常输出信息不能做到通俗易懂。例如:uptime free iostat。第三方工具一般相对系统自带工具在可读性上有一定的提高,有的还能同时监控系统多方面的信息。例如:htop dstat sysstat

2.   监控系统(平台)监控

之所以叫系统(平台)是因为起功能相对强大,一套系统加上一些扩展工具就可以满足我们所有的监控需求。这种系统一般都和SNMP协议,RRDtool工具结合,进行信息采集和图像绘制工作。常用的监控系统有:mrtggangliazabbixcactinagios等。

按照监控方式,可以把监控系统分为:内部监控、外部监控。例如:系统命令和Nagios系统。

1.   内部监控

内部监控一般是通过监控工具、监控代理软件或自制脚本对服务器自身的运行状态进行监控和报告,报告信息可以直接显示在终端屏幕上、记录到日志中或者传输给监控系统集中处理。

2.   外部监控

外部监控一般常用来对服务器的连通性、服务状态、指定页面等项目进行监控,因为这些项目都不需要受控服务器安装监控工具,都可以在监控系统上直接进行。

五、系统自带工具

首先要介绍的是常用来查看系统里面内存使用率的工具freefree命令和-m参数一起使用,可以把输出的信息转换成MB格式。如果想看到更多的信息可以使用图片中的选项。

Liunx运维监控_shark巨菜_基础篇_top


free命令只需要注意空闲内存不包括buffers+cached就可以了。其他诸如uptimetop等命令就不介绍了,太基础了。看几个不太常用但是也比较给力的吧。

dstat命令可以提供可读性稍高的,多方面的系统资源信息。命令附带参数较多,在下面的例子里面使用了“-tlcpmsn  5 5”这样的参数,用来显示系统的时间、系统负载、cpu使用率、进程、内存使用率、交互分区使用率、网络传输数据库的信息,并且每5秒汇总一次,记录5次之后停止。


Liunx运维监控_shark巨菜_基础篇_系统_02

系统里面的另一个自带但是不会默认安装的工具是iptrafiptraf可以启动一个类似#system-config-network-tuiTUI界面(Text User Interface 文本用户界面),通过iptraf提供的这样的界面可以简化监控工具的使用难度。


Liunx运维监控_shark巨菜_基础篇_监控_03

六、第三方工具

第三方的监控工具一般在界面友好度和使用简易度上会比系统自带的工具有一定的提高。下面我们看几个第三方的工具。其中比较常用的一个是htop,可以用它来替换系统默认的top工具了,主要是因为htop工具在界面友好度和操纵简便性上都较原始的top工具有了比较大的提高。


Liunx运维监控_shark巨菜_基础篇_运维_04


Liunx运维监控_shark巨菜_基础篇_运维_05

另一个比较常用的第三方工具是nloadnload工具可以把网络流量转换成比较已读的柱状图的形式,并不需要启动图形界面,只是使用各种特殊符号来绘制。这种方式可以让我们直观的了解到现在系统的网络带宽使用情况;在操纵简便性上也比较好,可以使用键盘上的←→按键在不同的网络接口中切换;也可以牺牲柱状图的功能把所有接口显示在一个屏幕上。


Liunx运维监控_shark巨菜_基础篇_系统_06


Liunx运维监控_shark巨菜_基础篇_top_07

第三方工具中最后介绍的也是功能最强大的nmonnmon工具是IBM公司为AIX系统开发的性能监控工具,在2009727日开源。从下面的截图中我们不难看出nmon可以涵盖需要监控的各个方面,从CPU资源到网络,从磁盘IO到文件系统使用。而且可读性和易用性也很好。


Liunx运维监控_shark巨菜_基础篇_系统_08


Liunx运维监控_shark巨菜_基础篇_运维_09

七、自制脚本监控

除了系统自带的和第三方提供的监控工具之外,我们还可以根据自己的需求,对这些工具提供的信息进行筛选、过滤或者进一步的处理,从中得到我们需要的信息。例如,我们只需要知道磁盘的空间是否不足,但是我们并不需要经常的查看磁盘的用量。又如,我们只需要再某个进程意外终止的时候进行某种补救操作,而不需要每次都去查看进程是否在运行等。

下面我们来看一个用来监控磁盘空间的脚本“monitor_diskusage.sh”:

#!/bin/bash

DIR="/home/shell"

DISKFUL=`LANG=C df -H $DIR|awk '{print $5}'|grep -v Use|cut -d"%" -f1`

while true;do

  until [ $DISKFUL == 80 ];do

    echo "Disk space normal" | mail -s "Disk space normal" root@localhost

    DISKFUL=`LANG=C df -H $DIR|awk '{print $5}'|grep -v Use|cut -d"%" -f1`

    sleep 86400

  done

  echo echo "Over 80%" | mail -s "Over 80%" root@localhost

  DISKFUL=`LANG=C df -H $DIR|awk '{print $5}'|grep -v Use|cut -d"%" -f1`

  sleep 86400

done

在脚本中使用了whilesleep,通过whiletrue进行脚本无限循环的执行,通过sleep控制执行次数;通过“&”这个方式达到此监控脚本一直在后台执行。再加上whilesleep可以让脚本每天执行一次检查报告的目的。在实际工作中我们可以把监控的目录修改成网站的网页存放目录。


Liunx运维监控_shark巨菜_基础篇_运维_10


Liunx运维监控_shark巨菜_基础篇_系统_11

平时在工作中还有需要对系统的进程是否运行,或者服务是否正常进行监控。我们也可以利用上面这个脚本中使用的while true与“&”来实现一个简单的监控功能。具体脚本如下“check_process.sh”。

#!/bin/bash

process="httpd"

while true; do

  result=`pstree | grep $process`

  if [ $? -eq 1 ]; then

    echo "$process not running." | mail -s "$process check" root@localhost

  else

    echo "$process is running." | mail -s "$process check" root@localhost

  fi

  sleep 600

done


Liunx运维监控_shark巨菜_基础篇_监控_12

八、sysstat

sysstatLinux系统中常用的工具包,它主要的用途是观察服务器负载,比如CPU和内存的占用率、网络使用率和磁盘写入与读取的速度等。sysstat功能上可以做到和其他监控工具一样的即时查看,也可以生成日志文件记录资源使用情况。

sysstat工具包中包括多个可执行程序:iostat(用于统计CPUI/O设备的数据);mpstat(用于统计CPU相关的数据);sadf(用于把数据转换成方便导入数据库的格式);sar(收集报告保存系统活动信息)。


Liunx运维监控_shark巨菜_基础篇_systat_13


Liunx运维监控_shark巨菜_基础篇_系统_14

sysstat工具包中还有三个比较重要的程序,他们的作用就是生成/var/log/sa/sa19这样的日志文件,用来存储信息。三个工具都在/usr/lib/sa/目录中分别是:sa1(收集并存储系统活动信息写入二进制文件);sa2(收集每天的系统活动信息写入日志文件);sadc(信息收集工具)。

其实可以通过以下的简单shell命令,把sysstat的数据转换成csv格式的文件。再到windows系统中经过excel软件的加工就可以形成容易读懂的柱状图了。


Liunx运维监控_shark巨菜_基础篇_监控_15


Liunx运维监控_shark巨菜_基础篇_top_16