自動化利器-Zabbix


1.1 為何需要監控系統

在一個IT環境中會存在各種各樣的設備,例如:硬件設備、軟件設備、其系統的構成也是非常復雜的。

多種應用構成負載的IT業務系統,保證這些資源的正常運轉,是一個公司IT部門的職責。而要讓這些應用能夠穩定地運行,則需要專業IT人員進行設計、架構、維護和調優。在這個過程中,為了及時掌握基礎環境和業務應用系統的可用性,需要獲取各個組件的運行狀態,如CPU的利用率、系統的復制、服務的運行、端口的連通、帶寬流量、網站訪問狀態碼等信息。而這一切都離不開監控系統。

1.2監控系統的實現

一個監控系統的組成大體可以分為兩部分:數據采集部分(客戶端)和數據存儲分析告警展示部分(服務器端),這兩部分構成了監控系統的基本模型。

數據采集的工作模式可以分為被動模式(服務端到客戶端采集數據)和主動模式(客戶端主動上報數據到服務器端)。通常,大多數監控系統應該能同時支持這兩種模式。被動模式對服務器的開銷較大,適合小規模的監控環境:主動模式對服務器的開銷較小,適合大規模的監控環境。

采集數據的協議方式可以分為兩種:專用客戶端采集和共用協議采集(SNMPSSHTelnet等)

對於采集到的監控數據,可以將其存儲到數據庫或者文本或者其他方式,具體采用哪一種,應根據實際需求來決定。

1.3     監控系統開源軟件

q  MRTG

MRTGMulti Route Trffic Grapher)是一套可用來繪制網絡流量圖的軟件,由瑞士奧爾滕的Tobias  OetikerDave Rand所開發,以GPL授權。

MRTG最好的版本是1995年推出的,用perl語言攜程,可跨平台使用,數據采集用SNMP協議,MRTG將手機到的數據通過Web頁面以GIF或者PNG格式繪制出圖像。

q  Cacti

Cacti(英文含義為仙人掌)是一套基於PHPMySQLSNMPRRDtool開發的網絡流量監測圖形分析工具,它通過snmpget來獲取數據使用RRDtool繪圖,但使用者無須了解RRDtool復雜的參數。2提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結構、主機設備以及任何一張圖,還可以與LDAP結合進行用戶認證,同時也能自定義模板。在歷史數據展示監控方面,其功能相當不錯。

Cacti通過添加模板,使不同設備的監控添加具有可復用性,並且具備可自定義繪圖的功能,具有強大的運算能力(數據的疊加功能)

q  SmokePing

Smokeping主要用於監視網絡性能,包括常規的pingwww服務器性能、DNS查詢性能、SSH性能等。底層也是用RRDtool做支持,特點是繪制圖非常漂亮,玩過丟包和延遲用顏色和陰影來標示,支持將多張圖疊放在一起,其做着還開發了MRTGRRDtll等工具。

Smokeping的站點為:http://tobi.oetiker.cn/hp

q  Graphite

Craphite是一個用於采集網站實時信息並進行統計的開源項目。Graphite服務支持平均每分鍾4800次更新操作,采用簡單文本協議,具有繪圖功能,其即插即用的功能可方便地用於任何需要監控的系統上。

和其他監控工具不同額是,Graphite本身並部手機具體的數據,這些數據收集的工作通常由第三方工具或插件完成,可以說,Graphite是一個繪圖工具。

q  Nagios

Nagios是一個企業級的個系統,可監控服務的運行狀態和網絡信息等,並能監視所指定的本地或遠程主機參數以及服務,同時提供異常告警通知功能等。

Nagios可運行在LinuxUNIX平台上。同時提供一個可選的基於劉安琪的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

開源監控系統OpenTSDBHbase存儲所有時序(無須采樣)的數據,來構建一個分布式、可伸縮的時間序列數據庫。它支持秒級數據采集,支持永久存儲,可以做容量規划,並很容易地接入到現有的告警系統里。

OpenTSDB可以從大規模的集群(包括集群中的網絡設備、操作系統、應用程序)中獲取相應的采集指標,並進行存儲、索引和服務,從而使這些數據更容易讓人理解,如Web化、圖形化等。

q  Zabbix

Zabbix是一個分布式監控系統,支持多種采集方式和采集客戶端,有專用的Agent代理,也支持SNMPIPMIJMXTelnetSSH等多種協議,它將采集到的數據存放到數據庫,然后對其進行分析整理,達到條件觸發告警。其靈活的擴展性和豐富的功能是其他監控系統所不能比的。相對來說,它的總體功能做的非常優秀。

從以上各種監控系統的對比來看,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.搭建環境簡單,基於開源軟件構建平台,僅需要LinuxApache/NginxMySQL/PostgreSQL/OraclePHP即可,無須專用操作系統支持,也無須專用硬件

4.Zabbix-Agent完全支持LinuxUNIXWindowsAIXBSDSolaris的監控,ServerAgent都采用C語言編碼,對系統的資源占用非常小,數據采集的性能和速度非常快。

5.將數據采集持久存儲到數據庫,便於對監控數據的二次分析。

6.非常豐富的擴展能力,很輕松地自定義監控項和實現數據采集,幾乎能監控所有的數據。例如:可以監控網站的訪問次數,監控UPS和天氣溫度等。毫不誇張地說,在Zabbix的世界里,往往有想不到的事情,沒有辦不到的事情。

7.開源社區的運作模式,有各種論壇、郵件列表、IM及時溝通等。

注意:如果是運維人員,想構建一套自己的監控系統環境,Zabbix將會是最佳的選擇。如果你是開發,想基於開源軟件開發一套屬於自己的監控系統,Zabbix也是比較好的選擇。

2.3 Zabbix的功能特性

Zabbix有常見的商業監控軟件所具備的功能,如主機的性能監控、網絡設備性能監控、數據庫性能監控、FTP等通用協議監控、多種告警方式、詳細的報表圖表繪制、分布式、可擴展能力、API等。

1)數據收集

q  可用、性能檢測。

q  支持AgentSNMP(包括TrappingPolling)、IPMIJMXSSHTelnet等。

q  自定義的檢測。

q  自定義收集數據的頻率。

q  服務器端/代理段和客戶端模式。

2)靈活的觸發器

q  可以定義非常靈活的 閥值和多種相關聯的條件。

3)高度可定制的告警

q  發送通知,可定制包括告警級別、動作升級、收件人和媒體類型。

q  通知可以使用全局宏變量和自定義的變量。

q  自動處理功能包括遠程命令的自動調用和執行。

4)實時的繪圖功能

監控項將數據實施繪制在圖形上。

5)Web監控能力

q  Zabbix可以模擬瀏覽器請求一個網站,並檢查返回值和響應時間。

6)多種可視化的展示

q  可以自定義監控的展示圖,將多種監控數據集中展示到一張圖中。

q  網絡拓撲圖。

q  自定義ScreensSlide 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中的各項配置文件、SelinuxIptables等。配置文件請檢查以下文件的正確配置參數。

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-ServerIP(域名)地址

$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的架構,客戶端的采集方式分為AgentSNMP等,這里先學習用Agent方式對服務器進行監控,后續再學習使用其他監控方式(SNMPJMXIPMI

這里的客戶端依然采用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-serverIP地址

[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-serverIP(一個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-GetZabbix中的一個程序,用於Zabbix-ServerZabbix-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-AgentIP地址或者是主機名。

-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_serverZabbix服務端的核心程序。

q  zabbix_proxy

zabbix_proxyZabbix代理服務的程序,用於分布式監控proxy模式中。

q  zabbix_agent

zabbix_agent是用超級服務(xinetd)的方式來啟動的,對應的配置文件為zabbix_agent.conf

zabbix_agentd是以獨立進程的方式來啟動的,對應的配置文件為zabbix_agentd.conf

zabbix_agentZabbix專用客戶端的程序。

q  zabbix_java_gateway

ZabbixJava采集服務端,用於JMX的監控方式。

q  zabbix_sender

ZabbixTrapping模式,將采集到的數據通過定時任務等主動發送給zabbix_server

q  zabbix_get

zabbix_get是一個數據獲取測試命令,相當於snmp中的snmpwalk

3.5     Zabbix對數據的存儲

3.6Zabbix數據庫的備份

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM