本節我們來認識下一款比較具有代表性的監控工具——zabbix。來看下摘自百度百科的介紹:
zabbix(音同 zbix)是一個基於WEB界面的提供分佈式系統監視以及網絡監視功能的企業級的開源解決方案。
zabbix能監視各種網絡參數,保證服務器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。
zabbix由2部分構成,zabbix server與可選組件zabbix agent。
zabbix server可以通過SNMP,zabbix agent,ping,端口監視等方法提供對遠程服務器/網絡狀態的監視,數據收集等功能,它可以運行在Linux,Solaris,HP-UX,,AIX,Free BSD,Open BSD,OS X等平臺上。
開源的監控工具:
比較著名的幾個
cacti:寫一些腳本到agent端採集一些數據,通過PHP(即時繪製)可以展示直觀的結果
nagios:有強大報警功能,只關心數據是否異常
zabbix:是一個能夠實現各種強大的數據採集功能,並且能夠提供良好的報警功能的工具
zabbix的介紹
zabbix的工作機制:在各被監控的節點上安裝觸發器,當某些數據超出閾值是可以觸發某個事件,可以是執行某個腳本,也可以是執行報警等操作。
注意:server端採集數據有2中方式:主動和被動
主動模式下又分爲
server端 每個一定時間到agent端採集數據
通過get來執行腳本或命令到agent端拉取數據
被動模式爲
agent端通過sender發送數據給server端
zabbix架構中的組件:
zabbix-server:C語言
zabbix-agent:C語言
zabbix-database:MySQL,PostgreSQL(PGsql),Oracle、DB2,SQLite
zabbix-web :GUI 用於實現設定和展示
zabbix-proxy:分佈式監控環境中的專用組件
zabbix 的邏輯架構
架構講解:通常我們的監控從添加host開始,而該host(主機)可以屬於一個hostgroup(主機組),當然,在添加host時,我們必然要添加一些我們需要的items(監控項),而這些items上的數據肯定是從agent端的主機上採集來的數據(根據採集方式不同,因此分爲了zabbix poller到agent端拉取,以及agent端直接推送到server端 ,因此有2個方向),當然host也可以直接使用template(模板),上面定義各個選項(包含graphs(數據生產的圖像)、trigger(觸發器)、items等等),好了下面從items往下走,定義了items之後我們必然會給這些採集到數據設定一個合理的範圍值,即閾值,而這就是trigger(觸發器),一旦超出了閾值之後,就會產生events(事件),而我們就可以根據這些event來定義相應的action(處理動作)了,這些動作可以是執行一些腳本、命令(例如發現數據異常可以通過命令完成遠程agent服務重啓等),也可以是發送信息、Email通知運維人員等。當然有些時候當服務器處於維護升級時,數據可能就會異常,而這些異常是運維人員知道的,無需報警的,因此這就是這裏的maintenance(維護)的意義了,maintenance可以定義維護時間內,而在這段時間內是不發送警報。
好了,這是我的大概理解,可能講的不是那麼好,見諒。
zabbix常用的術語
主機(host):要監控的網絡設備,可由IP或者DNS名稱指定
主機組(host group):主機的邏輯容器,可以包含主機和模板,但同一個組內的主機和模板不能相互連接
監控項(item):一個特定監控指標的相關的數據,這些數據來自於被監控的對象
觸發器(trigger):一個表達式,用於評估某監控對象的某特定item內所收到的數據是否在合理範圍內,即閾值;接收到的數據大於閾值時,觸發器狀態將從OK轉變爲problem,當數據再次迴歸合理範圍時,狀態也會相應變回OK
事件(event):即發生的一個值得關注的事情,當trigger狀態發生改變時自動產生事件
動作(action):指對於某特定事件實現定義的處理方法
報警升級(escalation):發送報警或執行遠程命令的自定義方案,如每隔幾分鐘發一次警報,總共發送幾次
媒介(media):發送通知的手段,如Email、jabber、SMS等
通知(notification):通過選定的媒介向用戶發送的有關某事件的信息
遠程命令(remote command):預定義的命令,可以在被監控主機處於某特定條件下時自動執行
模板(template):用於快速定義被監控主機的預設條目集合,通常包含了item、trigger、graph、screen、application以及low-level Discovery rule;
應用程序(application):一組item的集合
web場景(web scenario):用於檢測web站點可用性的一個或多個http請求
前端(frontend):zabbix的web接口
zabbix啓動的進程
housekeeper:負責清理過期的數據
poller:拉去數據
httppoller:監控web頁面的專業拉取數據用的
discoverer:發現資源的
alerter:報警用的
watchdog:負責監視所有的進程的狀態的,一旦某個進程關閉,watchdog將會通知zabbix重新啓動該進程
pinger:使用ping探測主機是否在線用的
timer:計時器
secalator:報警升級
nodewatcher:監控各節點的
db_config_syncer:數據庫配置同步
db_data_syncer:數據庫數據同步
實驗:利用zabbix實現agent主機監控
實驗中我們會通過2種模型來演示:
server-agent模型
server-proxy-agent模型
實驗前提:
已經安裝好lamp環境
server:172.16.6.30 node3
agent:172.16.6.50 node5
proxy: 172.16.6.40 node4
server-agent模型
zabbix 安裝
這裏我使用的是rpm安裝
下載網頁如下
這裏我已經下載好了
[root@node3 ~]# ls anaconda-ks.cfg install.log install.log.syslog zabbix-2.4 [root@node3 ~]# cd zabbix-2.4/ [root@node3 zabbix-2.4]# ls zabbix-2.4.0-1.el6.x86_64.rpm zabbix-agent-2.4.0-1.el6.x86_64.rpm zabbix-get-2.4.0-1.el6.x86_64.rpm zabbix-java-gateway-2.4.0-1.el6.x86_64.rpm zabbix-proxy-2.4.0-1.el6.x86_64.rpm zabbix-proxy-mysql-2.4.0-1.el6.x86_64.rpm zabbix-proxy-pgsql-2.4.0-1.el6.x86_64.rpm zabbix-proxy-sqlite3-2.4.0-1.el6.x86_64.rpm zabbix-release-2.4-1.el6.noarch.rpm zabbix-sender-2.4.0-1.el6.x86_64.rpm zabbix-server-2.4.0-1.el6.x86_64.rpm zabbix-server-mysql-2.4.0-1.el6.x86_64.rpm zabbix-server-pgsql-2.4.0-1.el6.x86_64.rpm zabbix-web-2.4.0-1.el6.noarch.rpm zabbix-web-japanese-2.4.0-1.el6.noarch.rpm zabbix-web-mysql-2.4.0-1.el6.noarch.rpm zabbix-web-pgsql-2.4.0-1.el6.noarch.rpm 這裏我用node3當做server端 [root@node3 zabbix-2.4]# yum -y install zabbix-2.4.0-1.el6.x86_64.rpm zabbix-server-2.4.0-1.el6.x86_64.rpm zabbix-server-mysql-2.4.0-1.el6.x86_64.rpm zabbix-agent-2.4.0-1.el6.x86_64.rpm zabbix-get-2.4.0-1.el6.x86_64.rpm zabbix-sender-2.4.0-1.el6.x86_64.rpm zabbix-web-2.4.0-1.el6.noarch.rpm zabbix-web-mysql-2.4.0-1.el6.noarch.rpm
創建數據庫並授權
mysql> create database zabbix; Query OK, 1 row affected (0.00 sec) mysql> grant all on zabbix.* to 'zbxuser'@'172.16.%.%' identified by 'zbxpass'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on zabbix.* to 'zbxuser'@'localhost' identified by 'zbxpass'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on zabbix.* to 'zbxuser'@'127.0.0.1' identified by 'zbxpass'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on zabbix.* to 'zbxuser'@'node3.mwj.com' identified by 'zbxpass'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
模板導入數據庫
[root@node3 ~]# cd /usr/share/doc/zabbix-server-mysql-2.4.0/create/ [root@node3 create]# ls data.sql images.sql schema.sql [root@node3 create]# mysql zabbix <schema.sql [root@node3 create]# mysql zabbix <images.sql [root@node3 create]# mysql zabbix <data.sql
修改server端配置數據庫信息
[root@node3 create]# vim /etc/zabbix/zabbix_server.conf
啓動server服務
[root@node3 create]# service zabbix-server start Starting Zabbix server: [ OK ]
使用瀏覽器打開
注意配置之前需要修改PHP配置文件中的時區,否則會出錯
[root@node3 ~]# vim /etc/php.ini
[Date] ; Defines the default timezone used by the date functions ;http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone date.timezone =Asia/Shanghai 啓用時區
修改完了別忘了重啓httpd
[root@node3 ~]# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
查看下監聽端口
MySQL3306 httpd80 zabbix-server 10051
注意這裏配置必須與之前授權的一致
注意登錄界面上有默認的登錄賬號密碼admin(zabbix)
OK
接下來配置agent端
先安裝agent客戶端
[root@node5 ~]# cd zabbix-2.4/ [root@node5 zabbix-2.4]# ls zabbix-2.4.0-1.el6.x86_64.rpm zabbix-proxy-mysql-2.4.0-1.el6.x86_64.rpm zabbix-server-2.4.0-1.el6.x86_64.rpm zabbix-web-mysql-2.4.0-1.el6.noarch.rpm zabbix-agent-2.4.0-1.el6.x86_64.rpm zabbix-proxy-pgsql-2.4.0-1.el6.x86_64.rpm zabbix-server-mysql-2.4.0-1.el6.x86_64.rpm zabbix-web-pgsql-2.4.0-1.el6.noarch.rpm zabbix-get-2.4.0-1.el6.x86_64.rpm zabbix-proxy-sqlite3-2.4.0-1.el6.x86_64.rpm zabbix-server-pgsql-2.4.0-1.el6.x86_64.rpm zabbix-java-gateway-2.4.0-1.el6.x86_64.rpm zabbix-release-2.4-1.el6.noarch.rpm zabbix-web-2.4.0-1.el6.noarch.rpm zabbix-proxy-2.4.0-1.el6.x86_64.rpm zabbix-sender-2.4.0-1.el6.x86_64.rpm zabbix-web-japanese-2.4.0-1.el6.noarch.rpm [root@node5 zabbix-2.4]# yum -y install zabbix-2.4.0-1.el6.x86_64.rpm zabbix-agent-2.4.0-1.el6.x86_64.rpm zabbix-sender-2.4.0-1.el6.x86_64.rpm
修改配置文件
[root@node5 zabbix-2.4]# vim /etc/zabbix/zabbix_agentd.conf 修改以下3項 Server=172.16.6.30 指向服務器端 ServerActive=172.16.6.30 主動模式指向的服務器 Hostname=node5.mwj.com 全局唯一的主機名
啓動服務
[root@node5 zabbix-2.4]# service zabbix-agent start Starting Zabbix agent: [ OK ]
[root@node5 zabbix-2.4]# ss -tnl 確保10050端口監聽 LISTEN 0 128 :::10050 :::* LISTEN 0 128 *:10050 *:*
然後就可以用web接口直接添加主機了
填完相關的信息還可以選定模板
模板有很多,適合的就行,這裏我選了個linux操作系統的監控項
選完添加完成就可以添加主機了
zabbix 的代理模式
代理端安裝proxy包
[root@node4 zabbix-2.4]# yum install zabbix-2.4.0-1.el6.x86_64.rpm zabbix-proxy-2.4.0-1.el6.x86_64.rpm zabbix-proxy-mysql-2.4.0-1.el6.x86_64.rpm
創建代理數據庫並授權
mysql> create database zabbix_proxy; Query OK, 1 row affected (0.00 sec) mysql> grant all on zabbix_proxy.* to 'zabbix'@'127.0.0.1' identified by '123456'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on zabbix_proxy.* to 'zabbix'@'node4.mwj.com' identified by '123456'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on zabbix_proxy.* to 'zabbix'@'localhost' identified by '123456'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges;
數據庫初始化
[root@node4 ~]# cd /usr/share/doc/zabbix-proxy-mysql-2.4.0/create/ [root@node4 create]# mysql zabbix_proxy < schema.sql
修改配置文件
[root@node4 ~]# vim /etc/zabbix/zabbix_proxy.conf
注意:在代理模式下也分爲主動模式和被動模式
### Option: ProxyMode # Proxy operating mode # 0 - proxy in the active mode # 1 - proxy in the passive mode # # Mandatory: no # Default: # ProxyMode=0 默認工作爲主動模式 Server=172.16.6.30 注意服務器指向監控端 Hostname=node4.mwj.com DBName=zabbix_proxy 注意,這裏的數據庫並不是server端的數據庫 DBUser=zabbix 而是在proxy端暫時存儲數據的數據庫 DBPassword=123456 ConfigFrequency=60 zabbix proxy 想服務器檢索配置數據信息的頻率,在被動模式下該參數將被忽略 DataSenderFrequency=5 zabbix proxy發送收集的數據給zabbix server的頻率
啓動服務
[root@node4 ~]# service zabbix-proxy start Starting Zabbix proxy: [ OK ]
啓動之後就可以到監控端添加了
注意添加是的代理名稱一定要與代理端配置文件中的主機名保持一致
添加完之後修改被監控的agent端的配置文件
[root@node5 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.6.40 server指向proxy主機 Hostname=node5.mwj.com
修改完之後重啓服務 [root@node5 ~]# service zabbix-agent restart Shutting down Zabbix agent: [ OK ] Starting Zabbix agent: [ OK ]
到監控端添加主機
尤其注意的是最下面的一個選項:monitored by proxy
這一項一定要選擇剛剛的創建的那個代理主機
創建完成之後等待一段時間後就可以看到主機監控成功了
並且監控到的數據也可以顯示了。
好的,那麼本節關於監控的內容就講到這裏,再見!