在一個IT環境中會存在各種各樣的設備,例如:硬件設備、軟件設備、其系統的構成也是非常復雜的。
多種應用構成負載的IT業務系統,保證這些資源的正常運轉,是一個公司IT部門的職責。而要讓這些應用能夠穩定地運行,則需要專業IT人員進行設計、架構、維護和調優。在這個過程中,為了及時掌握基礎環境和業務應用系統的可用性,需要獲取各個組件的運行狀態,如CPU的利用率、系統的復制、服務的運行、端口的連通、帶寬流量、網站訪問狀態碼等信息。而這一切都離不開監控系統。
1.2監控系統的實現
一個監控系統的組成大體可以分為兩部分:數據采集部分(客戶端)和數據存儲分析告警展示部分(服務器端),這兩部分構成了監控系統的基本模型。
數據采集的工作模式可以分為被動模式(服務端到客戶端采集數據)和主動模式(客戶端主動上報數據到服務器端)。通常,大多數監控系統應該能同時支持這兩種模式。被動模式對服務器的開銷較大,適合小規模的監控環境:主動模式對服務器的開銷較小,適合大規模的監控環境。
采集數據的協議方式可以分為兩種:專用客戶端采集和共用協議采集(SNMP、SSH、Telnet等)
對於采集到的監控數據,可以將其存儲到數據庫或者文本或者其他方式,具體采用哪一種,應根據實際需求來決定。
1.3 監控系統開源軟件
q MRTG
MRTG(Multi Route Trffic Grapher)是一套可用來繪制網絡流量圖的軟件,由瑞士奧爾滕的Tobias Oetiker與Dave Rand所開發,以GPL授權。
MRTG最好的版本是1995年推出的,用perl語言攜程,可跨平台使用,數據采集用SNMP協議,MRTG將手機到的數據通過Web頁面以GIF或者PNG格式繪制出圖像。
q Cacti
Cacti(英文含義為仙人掌)是一套基於PHP、MySQL、SNMP和RRDtool開發的網絡流量監測圖形分析工具,它通過snmpget來獲取數據使用RRDtool繪圖,但使用者無須了解RRDtool復雜的參數。2提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結構、主機設備以及任何一張圖,還可以與LDAP結合進行用戶認證,同時也能自定義模板。在歷史數據展示監控方面,其功能相當不錯。
Cacti通過添加模板,使不同設備的監控添加具有可復用性,並且具備可自定義繪圖的功能,具有強大的運算能力(數據的疊加功能)
q SmokePing
Smokeping主要用於監視網絡性能,包括常規的ping、www服務器性能、DNS查詢性能、SSH性能等。底層也是用RRDtool做支持,特點是繪制圖非常漂亮,玩過丟包和延遲用顏色和陰影來標示,支持將多張圖疊放在一起,其做着還開發了MRTG和RRDtll等工具。
Smokeping的站點為:http://tobi.oetiker.cn/hp
q Graphite
Craphite是一個用於采集網站實時信息並進行統計的開源項目。Graphite服務支持平均每分鍾4800次更新操作,采用簡單文本協議,具有繪圖功能,其即插即用的功能可方便地用於任何需要監控的系統上。
和其他監控工具不同額是,Graphite本身並部手機具體的數據,這些數據收集的工作通常由第三方工具或插件完成,可以說,Graphite是一個繪圖工具。
q Nagios
Nagios是一個企業級的個系統,可監控服務的運行狀態和網絡信息等,並能監視所指定的本地或遠程主機參數以及服務,同時提供異常告警通知功能等。
Nagios可運行在Linux和UNIX平台上。同時提供一個可選的基於劉安琪的Web界面,以方便系統管理人員查看網絡狀態、各種系統問題、以及日志等
Nagios的功能側重於監控服務的可用性,能急事根據觸發條件告警。
目前Nagios也占領了一定的市場份額,不過Nagios並沒有與時俱進,已經不能滿足於多變的監控需求,架構的擴展性和使用的便捷性有待增強,其高級功能集成在上夜班Nagios XI中。
q Zenoss Core
Zenoss Core(簡稱Zenoss)是開源企業級IT管理軟件,它允許IT管理員依靠歹意的WEB控制台來監控網絡架構的狀態和健康度。
Zenoss Core的強大功能來自深入的列表與配置管理數據庫,用於發現和管理公司IT環境的各類資產(包括服務器、網絡和其他結構設備)。Zenoss可以創建關鍵資產清單和對應的組件級別(接口、服務、進程、已安裝的軟件等)建立好模型后,Zenoss就可以監控和報告IT架構中各種資源的狀態和性能狀況了。同時還提供與CMDB關聯的事件和錯誤管理系統,以協助提高各類事件和提醒的管理效率,以此提高IT管理人員的效率。
q Ganglia
Grnglia是一個跨平台的、可擴展的、高性能的分布式監控系統,如集群和網格。它基於分層設計,使用廣泛的技術,用RRDtool存儲數據。具有可視化界面,適合對集群系統的自動化監控。其精心設計的數據結構和算法使得監控端到被監控端的連接開銷非常低。目前已經有成千上萬的集群正在使用這個監控系統,可以輕松的處理2000個節點的集群環境。
q OpenTSDB
開源監控系統OpenTSDB用Hbase存儲所有時序(無須采樣)的數據,來構建一個分布式、可伸縮的時間序列數據庫。它支持秒級數據采集,支持永久存儲,可以做容量規划,並很容易地接入到現有的告警系統里。
OpenTSDB可以從大規模的集群(包括集群中的網絡設備、操作系統、應用程序)中獲取相應的采集指標,並進行存儲、索引和服務,從而使這些數據更容易讓人理解,如Web化、圖形化等。
q Zabbix
Zabbix是一個分布式監控系統,支持多種采集方式和采集客戶端,有專用的Agent代理,也支持SNMP、IPMI、JMX、Telnet、SSH等多種協議,它將采集到的數據存放到數據庫,然后對其進行分析整理,達到條件觸發告警。其靈活的擴展性和豐富的功能是其他監控系統所不能比的。相對來說,它的總體功能做的非常優秀。
從以上各種監控系統的對比來看,Zabbix都是具有優勢的,其豐富的功能、可擴展的能力、二次開發的能力和簡單易用的特點,讀者只要稍加學習,即可構建自己的監控系統。
2. Zabbix簡介
隨着雲計算、虛擬化的大規模應用,以及未來移動互聯網、物聯網等的興起,Zabbix的使用將越來越廣泛,應用場合也越來越多。目前,不少互聯網公司、雲計算公司、系統集成軟件公司、外包服務公司等,都有對Zabbix進行二次開發和大規模使用。所以,可以斷言,Zabbix在未來將會引領監控軟件的潮流。
Zabbix適合中小型企業、大中型企業的用戶使用。單個Server節點可以支持上萬台設備,每秒可以處理1.5萬次請求,理論上可以支持5萬台設備。
Zabbix自身的定位是中型企業和大型企業,如果在特大型環境中使用,需要解決大並發、大壓力的問題,這對使用者提出了更高的要求。
2.1 Zabbix為何物
Zabbix是一個企業級的高度集成開源監控軟件,提供分布式監控解決方案,可以用來監控設備、服務等的可用性和性能,其產品不分企業版和社區版,是一個真正的源代碼開放產品,用戶可以自由下載並使用該軟件。
Zabbix SIA公司是Zabbix的官方技術團隊成立的公司。其運作模式是商業軟件的開源—軟件的使用免費,服務收費。其為用戶提供咨詢、技術支持服務、定制開發、解決方案、人員培訓等。
2.2 選擇Zabbix七大理由
對於同類監控產品,有以下理由選擇使用Zabbix。
1.Zabbix是一個自由開發源代碼的產品,用戶可以對源代碼進行任意修改和二次開發。Zabbix采用GNU General Public License (GPL) Version2開源協議。
2.安裝和配置簡單,用戶僅僅需要一些簡單的學習,即可完成監控的搭建工作。
3.搭建環境簡單,基於開源軟件構建平台,僅需要Linux、Apache/Nginx、MySQL/PostgreSQL/Oracle、PHP即可,無須專用操作系統支持,也無須專用硬件
4.Zabbix-Agent完全支持Linux、UNIX、Windows、AIX、BSD和Solaris的監控,Server和Agent都采用C語言編碼,對系統的資源占用非常小,數據采集的性能和速度非常快。
5.將數據采集持久存儲到數據庫,便於對監控數據的二次分析。
6.非常豐富的擴展能力,很輕松地自定義監控項和實現數據采集,幾乎能監控所有的數據。例如:可以監控網站的訪問次數,監控UPS和天氣溫度等。毫不誇張地說,在Zabbix的世界里,往往有想不到的事情,沒有辦不到的事情。
7.開源社區的運作模式,有各種論壇、郵件列表、IM及時溝通等。
注意:如果是運維人員,想構建一套自己的監控系統環境,Zabbix將會是最佳的選擇。如果你是開發,想基於開源軟件開發一套屬於自己的監控系統,Zabbix也是比較好的選擇。
2.3 Zabbix的功能特性
Zabbix有常見的商業監控軟件所具備的功能,如主機的性能監控、網絡設備性能監控、數據庫性能監控、FTP等通用協議監控、多種告警方式、詳細的報表圖表繪制、分布式、可擴展能力、API等。
1)數據收集
q 可用、性能檢測。
q 支持Agent、SNMP(包括Trapping和Polling)、IPMI、JMX、SSH、Telnet等。
q 自定義的檢測。
q 自定義收集數據的頻率。
q 服務器端/代理段和客戶端模式。
2)靈活的觸發器
q 可以定義非常靈活的 閥值和多種相關聯的條件。
3)高度可定制的告警
q 發送通知,可定制包括告警級別、動作升級、收件人和媒體類型。
q 通知可以使用全局宏變量和自定義的變量。
q 自動處理功能包括遠程命令的自動調用和執行。
4)實時的繪圖功能
監控項將數據實施繪制在圖形上。
5)Web監控能力
q Zabbix可以模擬瀏覽器請求一個網站,並檢查返回值和響應時間。
6)多種可視化的展示
q 可以自定義監控的展示圖,將多種監控數據集中展示到一張圖中。
q 網絡拓撲圖。
q 自定義Screens和Slide shows可以將多種圖形集中展示。
q 報表功能。
q 資源使用情況的監控展示。
7)歷史數據的存儲
q 數據存儲在數據庫中。
q 歷史數據的存放周期可配置。
q 定期刪除過期的歷史數據。
8)配置非常容易
q 配置比較簡單,只需要以下兩步即可。
q 第一步:添加設備。
q 第二步:應用模板即可完成監控。
9)使用模板
q 模板可以分組
q 模板具有可繼承性。
10) 網絡發現
q 支持自動發現網絡設備和服務器(可以通過配置自動發現服務規則實現。)
q Agent自動發現
q 支持自動發現實現動態監控的批量監控(支持自定義)內置的自動發現包括文件系統、網絡接口、SNMP OLD,可定制自動發現。
11) 快速的訪問接口
q Web頁面基於PHP
q 遠程訪問。
q 日志審計。
12) API功能
q 應用API功能可以方便地和其他系統結合,包括手機客戶端的使用。
13) 系統權限
q 不同的用戶展示監控的資源不同。
q 對用戶的身份認證
14) 程序特性
q 用C語言編寫,其性能和內存開銷非常小。
15) 大型環境的支持
q 利用Zabbix-Proxy方式即可輕松構建遠程監控。
3. Zabbix安裝與部署
3.1 Zabbix-Server服務器端的安裝
下面以CentOS6.7_X64為例介紹如何安裝Zabbix-Server服務器端。學習采用RPM包安裝方式,該方式較簡介。生產建議使用源碼安裝。
3.1.1安裝Zabbix-Server
[root@linux-node1 ~]#rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm ß安裝Zabbix官方源碼
[root@linux-node1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo ß安裝epel源
[root@linux-node1 ~]# yum -y install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-get mysql-server ß安裝服務端,由於服務端也是需要監控的,故而一並安裝Zabbix-agent。
[root@linux-node1 ~]# \cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
[root@linux-node1 ~]# sed -i "38a collation-server = utf8_general_ci\ninit_connect = \'SET NAMES utf8\'\ncharacter-set-server = utf8" /etc/my.cnf ß修改字符集為utf-8,否則web頁面設置中文會出現亂碼
[root@linux-node1 ~]# chkconfig mysqld on ß加入開機啟動
[root@linux-node1 ~]# /etc/init.d/mysqld start ß啟動mysql數據庫
1. 創建zabbix的數據庫
[root@linux-node1 ~]# mysqladmin -uroot password darker; ß建立新密碼
[root@linux-node1 ~]# mysql -uroot –pdarker ß登錄數據庫
mysql> create database zabbix character set utf8; ß創建zabbix命名的數據庫為utf-8
mysql> grant all on zabbix.* to zabbix@localhost identified by 'zabbix'; ß給zabbix賬戶賦予zabbix庫的所有權限
mysql> flush privileges; ß刷新操作
2. 導入Zabbix-Server數據庫 注意:如果安裝Zabbix-Porxy 之導入schema.sql即可,否則Zabbix-Proxy無法正常工作
[root@linux-node1 ~]# cd /usr/share/doc/zabbix-server-mysql-2.4.6/create/ ß進入
[root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <schema.sql ß導入數據結構
[root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <images.sql ß導入圖片
[root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <data.sql ß導入數據
3. 配置zabbix_server.conf
[root@linux-node1 ~]# sed -i '107aDBPassword=zabbix' /etc/zabbix/zabbix_server.conf ß增加zabbix使用數據庫的密碼
[root@linux-node1 ~]# egrep -v '^#|^$' /etc/zabbix/zabbix_server.conf ß過濾修改后的結果
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
# DBHost=localhost ß可修改
DBName=zabbix ß默認
DBUser=zabbix ß默認
DBPassword=zabbix ß需修改
DBSocket=/var/lib/mysql/mysql.sock
SNMPTrapperFile=/var/log/snmptt/snmptt.log
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
以上參數值需要關注黑體字部分,需要根據實際情況進行調整。默認只修改DBPassword=zabbix即可。
4. 啟動Zabbix-Server服務
[root@linux-node1 ~]# /etc/init.d/zabbix-server start ß啟動
Starting Zabbix server: [ OK ]
[root@linux-node1 ~]# /etc/init.d/httpd start ß啟動httpd服務
Starting httpd: [ OK ]
[root@linux-node1 ~]# chkconfig zabbix-server on ß添加開機啟動
[root@linux-node1 ~]# chkconfig httpd on ß添加開機啟動
5.Php.ini配置文件的設置(如果不配置是無法安裝)
vim /etc/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
在LAMP環境中,也可以按上述方式配置PHP的參數,比修改php.ini更方便。而在Zabbix的官方RPM中,這一步已經配置過了。所以無需修改。
[root@linux-node1 ~]# cat /etc/httpd/conf.d/zabbix.conf
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value date.timezone Asia/Shanghai
</Directory>
如果在后面配置Web時提示任何參數不滿足安裝配置要求(如圖3-1所示),修改對應的參數后重啟Httpd即可。
圖3-1
3.1.2配置Web界面
打開瀏覽器,輸入http://IP地址/zabbix,會出現如圖3-2所示的界面
圖3-2
PHP提示的各項參數都滿足后,可以繼續往下進行,單機Next按鈕。如果提示參數不通過,修改php.ini配置文件,並重啟Web(httpd)服務。
配置數據庫連接的各項參數如圖3-3所示。測試結果為OK后,單機Next按鈕。
圖3-3
Zabbix-Server的鏈接地址、端口、名稱設置(見圖3-4)將會顯示在Zabbix的前端頁面。
注意:如果Zabbix-Server在其他機器中,這里的Host填寫Zabbix-Server所在的機器IP (如果是本機,可以直接默認)
圖3-4
圖3-5中的這些配置信息將會寫入到圖3-6的配置文件中。
圖3-5
圖3-6
如圖3-7所示的登錄界面,默認賬戶是Admin,密碼是zabbix
圖3-7
如圖3-8登錄成功頁面。
圖3-8
如果提示不能正常運行,分別檢查zabbix_server.conf中的各項配置文件、Selinux、Iptables等。配置文件請檢查以下文件的正確配置參數。
1./etc/zabbix/zabbix_server.conf中的參數。
# DBHost=localhost ß數據庫的IP(域名)地址
DBName=zabbix ß數據庫的名稱
DBUser=zabbix ß數據庫的用戶
DBPassword=zabbix ß數據庫的密碼
2./etc/zabbix/web/zabbix.conf.php中的配置。
[root@linux-node1 ~]# cat /etc/zabbix/web/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] = 'MYSQL'; ß數據庫類型
$DB['SERVER'] = 'localhost'; ß數據庫的IP(域名)地址
$DB['PORT'] = '0'; ß數據庫的端口
$DB['DATABASE'] = 'zabbix'; ß數據庫的名稱
$DB['USER'] = 'zabbix'; ß數據庫的用戶
$DB['PASSWORD'] = 'zabbix'; ß數據庫的密碼
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER = 'localhost'; ßZabbix-Server的IP(域名)地址
$ZBX_SERVER_PORT = '10051'; ßZabbix-Server的端口
$ZBX_SERVER_NAME = 'Zabbix-Xuliangwei'; ßZabbix-Server web界面的標識
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
?>
Zabbix是支持多語言的,可以為每個用戶配置不同的語言環境。單擊菜單欄profile-->User-->Language修改用戶的語言,(雖然zabbix支持中文,但並不是很推薦使用。只要是中文界面的翻譯不准確。所以后續全都使用英文操作)如圖3-9所示。
圖3-9
3.1.3故障處理
1.數據庫文件找不到的問題。
修改/etc/zabbix/zabbix_server.conf中的Dbsocket配置。
DBSocket=/tmp/mysql.sock
注意:修改為mysql.sock實際存在的路徑后,重啟服務。
2.數據庫無法連接
解決辦法有三種:檢查數據庫服務是否正常;防火牆是否允許;權限能否訪問。
3.2 Zabbix-Agent客戶端的安裝
3.2.1安裝Zabbix-Agent
前面我們已經知道了Zabbix可以再用Agent/Server的架構,客戶端的采集方式分為Agent、SNMP等,這里先學習用Agent方式對服務器進行監控,后續再學習使用其他監控方式(SNMP、JMX、IPMI)
這里的客戶端依然采用RPM方式安裝(安裝Zabbix官方的yum源)
[root@linux-node2 ~]# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm ß使用zabbix官方yum源
[root@linux-node2 ~]# yum -y install zabbix zabbix-agent ß安裝zabbix以及agent
3.2.2配置zabbix_agentd.conf
主動和被動模式
Server:被動模式,允許哪台服務器連接Agent。
ServerActive:主動模式,向哪台服務器傳送數據。
修改配置文件的被動模式Ip
[root@linux-node2 ~]# sed -i 's#Server=127.0.0.1#Server=10.0.0.3#g' /etc/zabbix/zabbix_agentd.conf ß修改被動模式監聽地址為zabbix-server的IP地址
[root@linux-node2 ~]# egrep -v '^#|^$' /etc/zabbix/zabbix_agentd.conf ß查看修改后信息
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.3 ß被動模式,zabbix-server的IP(一個Agent是可以同時向多個服務器端發送數據,多個Ip用逗號隔開)
ServerActive=127.0.0.1 ß主動模式
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/
[root@linux-node2 ~]# chkconfig zabbix-agent on ß加入開機自啟動
[root@linux-node2 ~]# /etc/init.d/zabbix-agent start ß啟動agent
Starting Zabbix agent: [ OK ]
3.3 Zabbix-Get的使用
Zabbix-Get是Zabbix中的一個程序,用於Zabbix-Server到Zabbix-Agent的數據獲取,通常可以用來檢測驗證Agent的配置是否正確。用法如下:
[root@linux-node1 ~]# zabbix_get
usage: zabbix_get [-hV] -s <host name or IP> [-p <port>] [-I <IP address>] -k <key>
-s:遠程Zabbix-Agent的IP地址或者是主機名。
-p:遠程Zabbix-Agent的端口。
-l:本機出去的IP地址,用於一台機器中又多個網卡的情況。
-k:獲取遠程Zabbix-Agent數據所使用的Key。
示例如下:
[root@linux-node1 ~]# zabbix_get -s 10.0.0.4 -k system.uname
Linux linux-node2.example.com 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64
用zabbix_get命令可以很方便地知道key是否能正常獲取到數據,這在測試自定義監控的時候特別有用。
3.4 Zabbix相關術語(命令)
q zabbix_server
zabbix_server是Zabbix服務端的核心程序。
q zabbix_proxy
zabbix_proxy是Zabbix代理服務的程序,用於分布式監控proxy模式中。
q zabbix_agent
zabbix_agent是用超級服務(xinetd)的方式來啟動的,對應的配置文件為zabbix_agent.conf
zabbix_agentd是以獨立進程的方式來啟動的,對應的配置文件為zabbix_agentd.conf
zabbix_agent是Zabbix專用客戶端的程序。
q zabbix_java_gateway
Zabbix的Java采集服務端,用於JMX的監控方式。
q zabbix_sender
Zabbix的Trapping模式,將采集到的數據通過定時任務等主動發送給zabbix_server。
q zabbix_get
zabbix_get是一個數據獲取測試命令,相當於snmp中的snmpwalk。
3.5 Zabbix對數據的存儲
3.6Zabbix數據庫的備份