天天看點

閑話Linux下的系統監控

我們的系統一旦上線跑起來我們自然希望它一直相安無事,不要當機,不要無響應,不要慢騰騰的。但是這不是打開機器電源然後放任不管就可以得到的(如果你就是這種情景,說明你人品太好了)。是以我們要監視系統的運作狀況,發現問題及時處理。

要做到系統的監控,大的方向有幾種方法:

1)派人盯着

2)自己寫個腳本進行監視

3)使用已有的監控軟體

關于第1種方法請不要笑話。在業務的關鍵時點可能需要安排人員守在旁邊,萬一發生問題可以及時處理,資料庫服務公司還為此開展一項專門的業務,叫"DBA值守"。不過DBA一般也不會蠻幹,也會使用第2種和第3種方法。

第2種方法适用面較窄,且有重複發明輪子的嫌疑。

是以下面我們來讨論第3種方法(相信有人已經煩了要扔雞蛋了。好吧,我承認寫下前兩種方法純粹為了娛樂)。

先概括一下需求吧。系統的監控,無非是下面幾個任務。

1)監視服務的中斷

   監視服務的中斷或者提前發現異常(如磁盤空閑容量過低)

2)報警

   發現問題後,通過郵件等形式通知相關人員及時處理。

3)記錄性能資料

   記錄CPU,MEM,IO,Network以及資料庫相關的統計資訊,便于發現和調查性能問題。

4)趨勢分析

   圖形化顯示現在的和曆史的性能資料

目前能用于系統監控的開源軟體很多,并且它們的側重點往往不同,需要根據需求做選擇。下面介紹幾個常用的,并且以個人視角做個簡單評價。

性能資料有些明顯的特征

1)時間相關

2)隻有插入和查詢操作

3) 舊的曆史資料可以被廢棄

針對這些特征,很多監控軟體使用專門時系資料工具RRDTool存儲資料,比如Cacti,Ganglia,SmokePing。另一些這使用通用的關系資料庫,比如nagios,zabbix。更有使用Hbase的OpenTSDB。為了更好的了解現有的很多監控軟體,有必要先介紹一下RRDTool。

RRDtool不是一個監控軟體,而是一個能對時系資料進行高性能記錄檢索和圖形展現的開源庫。不少監控軟體都使用了RRDtool,是以有必要了解一下RRDtool。

RRDtool之是以叫RRD(Round Robin Database) Tool,是因其存儲資料的方式而得名。可以講其想象成一個固定大小的環形存儲空間,每插入一條記錄,目前位置指針向前移動一下,指針移動一圈後覆寫之前的資料。這種結構使得RRD的大小不會擴張,是以也就不需要維護,特别适合性能資料采集的場景。

RRDtool的功能有兩個,一是作為時系資料的存儲引擎,二是将存儲的時系資料按不同要求繪制成png圖檔。看看下面的例子。

0)安裝RRDtool

# yum install rrdtool

1)建立一個RRD

2)插入資料

3)查詢資料

4)繪圖

speed.png:

閑話Linux下的系統監控

上面隻是示範RRDtool有什麼樣的功能,所有用到的各種參數不解釋,有興趣的話可以參考:

http://oss.oetiker.ch/rrdtool/tut/rrdtutorial.en.html

RRDtool或RDB可以解決性能資料的存儲問題,但這些性能資料從哪收集呢?資料采集的方法很自由,常用的方法大概可以歸納為以下幾種:

1)代理(agent)

  一個專門收集性能資料的東西,一般是運作于被監控機器上的某個Deamon。代理采集資料然後傳給監控伺服器,那麼代理又是如何得到資料的呢?無非是調用OS API,執行某個指令或者腳本。因為一般可以定制代理調用的腳本,是以代理采集資料的能力也是可以自由定制的。

2)遠端協定

用于管理的共通協定SNMP,IMPI。或者常用的服務協定,http,ftp,ftp等。或是可以遠端執行指令的協定telnet和ssh。隻要設定好相應的參數就可以透過網絡實施遠端監視了。

3)定制腳本

有些管理系統上可以配置用于監控的定制腳本。有了定制腳本就可以自由擴充監控對象了。

下面介紹監控相關的共通協定SNMP和IMPI。

  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

[root@zabbix ~]# snmpget -v2c -c public localhost sysDescr.0 

參考:

http://avery-leo.iteye.com/blog/379076

http://www.cnblogs.com/aspx-net/p/3554044.html

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  (硬重新開機) 

http://qa.blog.163.com/blog/static/1901470022013690328217/

有了前面的介紹,就很容把一些常用開源監控軟體規個類了。

1)MRTG

SNMP資料采集+包含PNG圖檔的html輸出工具。資料存儲使用自己的log格式,也可以采用rrdtool。MRTG不是完整的監控系統,當成工具讓perl或其他腳本來調用還可以。

http://oss.oetiker.ch/mrtg/

2)Cacti

rrdtool的Web前端,通過SNMP資料采集,也可以定制采集資料的腳本。支援模闆定義,圖形功能很強,但不能報警,常被拿來和nagios配合使用。

閑話Linux下的系統監控

http://www.cacti.net/

3)nagios

資料采集支援主動代理,被動代理,各種網絡協定(snmp,HTTP、FTP、SSH等),支援分布式部署,告警功能強大,特色功能是支援對主機的備援監控,是功能很全面的一款監控軟體,但nagios易用性比較差,圖形展示能力很弱。

閑話Linux下的系統監控

http://nagios.sourceforge.net/docs/nagioscore/4/en/about.html#whatis 

Monitoring of network services (SMTP, POP3, HTTP, NNTP, PING, etc.)

Monitoring of host resources (processor load, disk usage, etc.)

Simple plugin design that allows users to easily develop their own service checks

Parallelized service checks

Ability to define network host hierarchy using "parent" hosts, allowing detection of and distinction between hosts that are down and those that are unreachable

Contact notifications when service or host problems occur and get resolved (via email, pager, or user-defined method)

Ability to define event handlers to be run during service or host events for proactive problem resolution

Automatic log file rotation

Support for implementing redundant monitoring hosts

Optional web interface for viewing current network status, notification and problem history, log file, etc.

4)zabbix

zabbix和nagios一樣是功能全面的監控軟體。但是比nagios更加好用,圖形能力更強,是以面臨nagios和zabbix二選一的時候建議zabbix。

zabbix的資料采集支援Zabbix agent,ICMP,SNMP,IPMI,http,ssh,定制腳本等

發現問題自動告警

資料展示盒配置設定全部統一的WEB GUI管理

支援分布式部署

支援模闆和自動發現功能可以輕松的在大規模環境下部署

http://www.zabbix.com/

5)其他

其他也有幾款,比如以性能和大規模監控為賣點的Ganglia和OpenTSDB,但是個人認為通常大多數的場景,zabbix完全夠用了。

(除此以外還有專門做網絡嗅探的ntop,可以采集Netflow或sFlow等網絡流量資訊并繪圖,不能監視應用服務和告警,需要的話也可以搭個試試。)

繼續閱讀