您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
闲话Linux下的系统监控
 
作者:skykiker 来源:Chinaunix 发布于 2014-12-23
  2664  次浏览      14
 

1. 引言

我们的系统一旦上线跑起来我们自然希望它一直相安无事,不要宕机,不要无响应,不要慢腾腾的。但是这不是打开机器电源然后放任不管就可以得到的(如果你就是这种情景,说明你人品太好了)。所以我们要监视系统的运行状况,发现问题及时处理。

要做到系统的监控,大的方向有几种方法:

1)派人盯着

2)自己写个脚本进行监视

3)使用已有的监控软件

关于第1种方法请不要笑话。在业务的关键时点可能需要安排人员守在旁边,万一发生问题可以及时处理,数据库服务公司还为此开展一项专门的业务,叫"DBA值守"。不过DBA一般也不会蛮干,也会使用第2种和第3种方法。

第2种方法适用面较窄,且有重复发明轮子的嫌疑。

所以下面我们来讨论第3种方法(相信有人已经烦了要扔鸡蛋了。好吧,我承认写下前两种方法纯粹为了娱乐)。

2. 概述

先概括一下需求吧。系统的监控,无非是下面几个任务。

1)监视服务的中断

监视服务的中断或者提前发现异常(如磁盘空闲容量过低)

2)报警

发现问题后,通过邮件等形式通知相关人员及时处理。

3)记录性能数据

记录CPU,MEM,IO,Network以及数据库相关的统计信息,便于发现和调查性能问题。

4)趋势分析

图形化显示现在的和历史的性能数据

目前能用于系统监控的开源软件很多,并且它们的侧重点往往不同,需要根据需求做选择。下面介绍几个常用的,并且以个人视角做个简单评价。

3. 性能数据的存储

性能数据有些明显的特征

1)时间相关

2)只有插入和查询操作

3) 旧的历史数据可以被废弃

针对这些特征,很多监控软件使用专门时系数据工具RRDTool存储数据,比如Cacti,Ganglia,SmokePing。另一些这使用通用的关系数据库,比如nagios,zabbix。更有使用Hbase的OpenTSDB。为了更好的理解现有的很多监控软件,有必要先介绍一下RRDTool。

3.1 RRDTool

RRDtool不是一个监控软件,而是一个能对时系数据进行高性能记录检索和图形展现的开源库。不少监控软件都使用了RRDtool,所以有必要了解一下RRDtool。

RRDtool之所以叫RRD(Round Robin Database) Tool,是因其存储数据的方式而得名。可以讲其想象成一个固定大小的环形存储空间,每插入一条记录,当前位置指针向前移动一下,指针移动一圈后覆盖之前的数据。这种结构使得RRD的大小不会扩张,因此也就不需要维护,特别适合性能数据采集的场景。

RRDtool的功能有两个,一是作为时系数据的存储引擎,二是将存储的时系数据按不同要求绘制成png图片。看看下面的例子。

0)安装RRDtool

# yum install rrdtool

1)创建一个RRD

rrdtool create test.rrd             \
--start 920804400 \
DS:speed:COUNTER:600:U:U \
RRA:AVERAGE:0.5:1:24 \
RRA:AVERAGE:0.5:6:10

2)插入数据

rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
rrdtool update test.rrd 920805600:12363 920805900:12363 920806200:12373
rrdtool update test.rrd 920806500:12383 920806800:12393 920807100:12399
rrdtool update test.rrd 920807400:12405 920807700:12411 920808000:12415
rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423

3)查询数据

[root@zabbix ~]# rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200 speed
920804700: -nan
920805000: 4.0000000000e-02
920805300: 2.0000000000e-02
920805600: 0.0000000000e+00
920805900: 0.0000000000e+00
920806200: 3.3333333333e-02
920806500: 3.3333333333e-02
920806800: 3.3333333333e-02
920807100: 2.0000000000e-02
920807400: 2.0000000000e-02
920807700: 2.0000000000e-02
920808000: 1.3333333333e-02
920808300: 1.6666666667e-02
920808600: 6.6666666667e-03
920808900: 3.3333333333e-03
920809200: -nan
920809500: -nan

4)绘图

rrdtool graph speed.png                                 \
--start 920804400 --end 920808000 \
DEF:myspeed=test.rrd:speed:AVERAGE \
LINE2:myspeed#FF0000

speed.png:

4. 性能数据的采集

RRDtool或RDB可以解决性能数据的存储问题,但这些性能数据从哪收集呢?数据采集的方法很自由,常用的方法大概可以归纳为以下几种:

1)代理(agent)

一个专门收集性能数据的东西,一般是运行于被监控机器上的某个Deamon。代理采集数据然后传给监控服务器,那么代理又是如何得到数据的呢?无非是调用OS API,执行某个命令或者脚本。因为一般可以定制代理调用的脚本,所以代理采集数据的能力也是可以自由定制的。

2)远程协议

用于管理的共通协议SNMP,IMPI。或者常用的服务协议,http,ftp,ftp等。或是可以远程执行命令的协议telnet和ssh。只要设置好相应的参数就可以透过网络实施远程监视了。

3)定制脚本

有些管理系统上可以配置用于监控的定制脚本。有了定制脚本就可以自由扩展监控对象了。

下面介绍监控相关的共通协议SNMP和IMPI。

4.1 SNMP

SNMP全称是Simple Network Management Protocol,SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台。被管理的系统上运行一个叫做代理者(agent)的软件元件,通过SNMP向管理系统报告。代理者和管理系统之间通信的方式有两种,一种是管理系统向代理者询问一个具体的参数值(比如:你产生了多少ICMP不可达差错),另一种是代理者向管理系统主动报告有某些重要事情发生(比如:一个网口掉线了)。

关于代理者和管理系统之间的交互,SNMP定义了5种报文

1)get-request:从代理处提取一个或多个参数值

2)get-next-request:从代理处提取一个或多个参数的下一个参数值

3)set-request:设置代理的一个或多个参数值

4)get-response:返回的一个或多个参数值。它是1)~3)的响应。

5)trap:代理主动发出报文,通知管理系统某些事情发生。

在SNMP体系中由代理提供,由管理系统查询和设置的信息集合称之为MIB(管理信息库)。MIB中的信息通过OID(对象标示符识别),比如:1.3.6.1.2.1.1.1.0。关于OID的定义可参照相关RFC。比如:
http://www.ietf.org/rfc/rfc1907.txt

标准中也有给厂商预留的OID(1.3.6.1.4.1),这样厂商可以在此OID下面进行扩展。

很多网络设备都内置SNMP代理,这样外面的监控服务器可以通过SNMP协议获取信息。对于普通的服务器,可以通过安装一个snmp代理软件提供snmp信息。比如:

安装和运行snmp代理

[root@zabbix ~]# yum install net-snmp
[root@zabbix ~]# /etc/init.d/snmpd start

通过SNMP查看系统描述

[root@zabbix ~]# snmpget -v2c -c public localhost 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux zabbix 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64

或者

root@zabbix ~]# snmpget -v2c -c public localhost iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux zabbix 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64

或者

[root@zabbix ~]# snmpget -v2c -c public localhost sysDescr.0 
SNMPv2-MIB::sysDescr.0 = STRING: Linux zabbix 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64

4.2 IPMI

IPMI(Intelligent Platform Management Interface)即智能平台管理接口是使硬件管理具备“智能化”的新一代通用接口标准。用户可以利用 IPMI 监视服务器的物理特征,如温度、电压、电扇工作状态、电源供应以及机箱入侵等。Ipmi 最大的优势在于它是独立于 CPU BIOS 和 OS 的,所以用户无论在开机还是关机的状态下,只要接通电源就可以实现对服务器的监控。

要使用IPMI,服务器硬件本身必须提供对ipmi的支持。大多数厂商的服务器都支持IPMI,但并不是所有服务器都支持,所以应该先通过产品手册或在BIOS中确定服务器是否支持ipmi。如果你用的PC机或者虚拟机那肯定没戏了。

通过ipmitool,可以本地或远程经由impi获取机器信息或控制机器。比如:

# ipmitool -I lan -H 服务器地址 -U root -P 密码 power status
# ipmitool -I lan -H 服务器地址 -U root -P 密码 power reset (硬重启)

5 几款通用的监控软件

有了前面的介绍,就很容把一些常用开源监控软件规个类了。

1)MRTG

SNMP数据采集+包含PNG图片的html输出工具。数据存储使用自己的log格式,也可以采用rrdtool。MRTG不是完整的监控系统,当成工具让perl或其他脚本来调用还可以。

2)Cacti

rrdtool的Web前端,通过SNMP数据采集,也可以定制采集数据的脚本。支持模板定义,图形功能很强,但不能报警,常被拿来和nagios配合使用。

3)nagios

数据采集支持主动代理,被动代理,各种网络协议(snmp,HTTP、FTP、SSH等),支持分布式部署,告警功能强大,特色功能是支持对主机的冗余监控,是功能很全面的一款监控软件,但nagios易用性比较差,图形展示能力很弱。

4)zabbix

zabbix和nagios一样是功能全面的监控软件。但是比nagios更加好用,图形能力更强,所以面临nagios和zabbix二选一的时候建议zabbix。

zabbix的数据采集支持Zabbix agent,ICMP,SNMP,IPMI,http,ssh,定制脚本等

发现问题自动告警

数据展示盒配置设置全部统一的WEB GUI管理

支持分布式部署

支持模板和自动发现功能可以轻松的在大规模环境下部署

5)其他

其他也有几款,比如以性能和大规模监控为卖点的Ganglia和OpenTSDB,但是个人认为通常大多数的场景,zabbix完全够用了。

   
2664 次浏览       14
相关文章 相关文档 相关课程



深度解析:清理烂代码
如何编写出拥抱变化的代码
重构-使代码更简洁优美
团队项目开发"编码规范"系列文章
重构-改善既有代码的设计
软件重构v2
代码整洁之道
高质量编程规范
基于HTML5客户端、Web端的应用开发
HTML 5+CSS 开发
嵌入式C高质量编程
C++高级编程
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]

基于模型的整车电子电气架构设计
嵌入式设备上的 Linux 系统开发
Linux 的并发可管理工作队列
ARM嵌入式系统的问题总结分析
嵌入式系统设计与实例开发
WinCE6.0的EBOOT概要
更多...   


UML +RoseRealtime+嵌入式
C++嵌入式系统开发
嵌入式白盒测试
手机软件测试
嵌入式软件测试
嵌入式操作系统VxWorks


中国航空 嵌入式C高质量编程
使用EA和UML进行嵌入式系统分析设计
基于SysML和EA的嵌入式系统建模
上海汽车 嵌入式软件架构设计
北京 嵌入式C高质量编程
北京 高质高效嵌入式开发
Nagra linux内核与设备驱动原理
更多...