在一個IT環境中會存在各類各樣的設備,例如:硬件設備、軟件設備、其系統的構成也是很是複雜的。php
多種應用構成負載的IT業務系統,保證這些資源的正常運轉,是一個公司IT部門的職責。而要讓這些應用可以穩定地運行,則須要專業IT人員進行設計、架構、維護和調優。在這個過程當中,爲了及時掌握基礎環境和業務應用系統的可用性,須要獲取各個組件的運行狀態,如CPU的利用率、系統的複製、服務的運行、端口的連通、帶寬流量、網站訪問狀態碼等信息。而這一切都離不開監控系統。前端
一個監控系統的組成大致能夠分爲兩部分:數據採集部分(客戶端)和數據存儲分析告警展現部分(服務器端),這兩部分構成了監控系統的基本模型。java
數據採集的工做模式能夠分爲被動模式(服務端到客戶端採集數據)和主動模式(客戶端主動上報數據到服務器端)。一般,大多數監控系統應該能同時支持這兩種模式。被動模式對服務器的開銷較大,適合小規模的監控環境:主動模式對服務器的開銷較小,適合大規模的監控環境。node
採集數據的協議方式能夠分爲兩種:專用客戶端採集和共用協議採集(SNMP、SSH、Telnet等)mysql
對於採集到的監控數據,能夠將其存儲到數據庫或者文本或者其餘方式,具體採用哪種,應根據實際需求來決定。linux
q MRTGios
MRTG(Multi Route Trffic Grapher)是一套可用來繪製網絡流量圖的軟件,由瑞士奧爾滕的Tobias Oetiker與Dave Rand所開發,以GPL受權。web
MRTG最好的版本是1995年推出的,用perl語言攜程,可跨平臺使用,數據採集用SNMP協議,MRTG將手機到的數據經過Web頁面以GIF或者PNG格式繪製出圖像。算法
q Cactisql
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都是具備優點的,其豐富的功能、可擴展的能力、二次開發的能力和簡單易用的特色,讀者只要稍加學習,便可構建本身的監控系統。
隨着雲計算、虛擬化的大規模應用,以及將來移動互聯網、物聯網等的興起,Zabbix的使用將愈來愈普遍,應用場合也愈來愈多。目前,很多互聯網公司、雲計算公司、系統集成軟件公司、外包服務公司等,都有對Zabbix進行二次開發和大規模使用。因此,能夠斷言,Zabbix在將來將會引領監控軟件的潮流。
Zabbix適合中小型企業、大中型企業的用戶使用。單個Server節點能夠支持上萬臺設備,每秒能夠處理1.5萬次請求,理論上能夠支持5萬臺設備。
Zabbix自身的定位是中型企業和大型企業,若是在特大型環境中使用,須要解決大併發、大壓力的問題,這對使用者提出了更高的要求。
Zabbix是一個企業級的高度集成開源監控軟件,提供分佈式監控解決方案,能夠用來監控設備、服務等的可用性和性能,其產品不分企業版和社區版,是一個真正的源代碼開放產品,用戶能夠自由下載並使用該軟件。
Zabbix SIA公司是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也是比較好的選擇。
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方式便可輕鬆構建遠程監控。
下面以CentOS6.7_X64爲例介紹如何安裝Zabbix-Server服務器端。學習採用RPM包安裝方式,該方式較簡介。生產建議使用源碼安裝。
[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
打開瀏覽器,輸入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
1.數據庫文件找不到的問題。
修改/etc/zabbix/zabbix_server.conf中的Dbsocket配置。
DBSocket=/tmp/mysql.sock
注意:修改成mysql.sock實際存在的路徑後,重啓服務。
2.數據庫沒法鏈接
解決辦法有三種:檢查數據庫服務是否正常;防火牆是否容許;權限可否訪問。
前面咱們已經知道了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
主動和被動模式
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 ]
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是否能正常獲取到數據,這在測試自定義監控的時候特別有用。
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。