前言:php
學習zabbix以前,不得不瞭解的是SNMP協議node
SNMP:簡單網絡管理協議(Simple Network Protocol)mysql
Snmp由兩部分組成,監控端和被監控端linux
監控模式:ios
主動模式:NMS向agent採集數據,監控端到被監控端採集數據nginx
被動模式:agent到NMS報告數據,被監控端到監控端報告數據web
這便意味着監控端和被監控端工做在不一樣套接字上sql
一旦被監控端發出特殊指令時,監控端會發送指令修改被監控端狀態數據庫
![](http://static.javashuo.com/static/loading.gif)
SNMP組件: apache
MIB:management information base(管理信息庫)
監控端可以向被監控發送請求採集數據,被監控經過MIB
MIB定義監控到到被監控的雙方採集規範
SMI:MIB表示機制
SNMP:協議自己,實現網絡管理
NMS可發起的操做:
Get:獲取數據
GetNext:獲取更多參數
Set:設定
Trap:陷阱操做
SNMP基於UDP工做
NMS監聽端口:161
Agent監聽端口:162
SNMP是沒有數據存儲的定義,一般完成數據採集後人爲的判斷數據是否存在問題!
這裏不得不提到cacti和nagios
Cacti相似於zabbox自己可以經過腳本,對每個監控端經過snmp協議發起數據採集請求。數據採集完成後會存儲在cacti的數據庫當中,cacti是由php開發的,它可以使用php強大的功能完成數據展現,這便意味着他可以從數據庫中提取出數據,即時繪製出數據走勢圖。Cacti也可讓用戶定義一個關注指標的閾值然後,一旦數據超出合理範圍也能完成報警操做!可是,他的報警能力較弱!
Cacti自己能夠完成強大的數據採集展現,可是他的報警功能薄弱。好比:cacti監控一臺nginx服務,當nginx出現故障時,通常狀況,會重啓nginx服務,當仍然不能正常工做時,監控會發起軟狀態和硬狀態的狀態探測切換,當第一次採集時發現異常,監控不會當即判斷爲故障,當採集超過幾回後,仍是異常,則爲硬狀態,爲了不誤判它會屢次採樣。而cacti自己不具有報警功能,須要第三方插件實現,而且報警的功能不能很是及時,尤爲是對狀態轉換的服務類應用,報警能力略顯薄弱
Nagios:強大的報警機制
當關注的指標超過閾值後,從軟狀態轉換硬狀態後當即執行報警操做,支持多種多樣報警,如:短信網關發短信,郵件發郵件,MSN窗口發信息,電子鈴,閃光燈等等!因而可知Nagios報警是很是靈活的。
Nagios的各組件依賴關係!
可是nagios不太適合大型環境衆多指標同時監控,主機若是有100臺,它的工做仍是客觀的,若是一旦達到數百臺,nagios效率低下,它不能完成分佈式工做
在早些,cacti和nagios同時工做是很常見的!而Zabblx即可以實現cacti和nagios的功能
其餘著名開源監控工具:zabbix,zennos,opennms,cacti,nagios(icinga),ganglia
監控功能的實現:agent,ssh,SNMP
SNMP協議版本在v1中是一款簡單協議,在v1中沒有認證功能,v2c:NMS-à agent ,v1和v2是基於UDP來實現,機制也相同!而v3和v2,v1不一樣的是,v3實現認證加密和解密功能,可是在應用中v1使用是最多的。
MIB:全部的能夠被監控被管理的對象的集合,定義對象的一系列屬性,每個agetn端都有本身的MIB庫,mib庫中定義了不少指標來實現接口的數據交互
MIB視圖:MIB片斷。SNMP是支持讀寫操做,對Mib庫操做進行讀寫操做均可實現。咱們能夠限定MIB庫的讀操做任何人均可以實現,寫操做再定義團體名。像這種能把mib庫中的子集,經過MIB某一個團體相關聯起來並定義其所能執行操做的機制就叫作MIB視圖,這裏可能須要查看下MIB樹狀結構!
在衆多開源軟件監控工具中zabbix是專用的agent的監控工具
監控的主機由:linux,windows,freebsd…..
網絡設備:snmp,ssh(並不是全部)
當了解了這些基礎後,在開始看zabbix概述
一般咱們在監控時須要監控哪些?
1,軟件/設備
設備:軟件,路由器,交換機,i/o系統
軟件:操做系統自己(OS),網絡,應用程序
2,偶發性故障
Down機,服務不能夠,主機不可達
3,嚴重事件
主機性能數據
4,趨勢圖
時間序列數據
5,
補充內容:
cacti數據存儲使用的是特殊數據庫(rrd ),而zabbix支持mysql,pgssql(關係型數據庫)
RRD:round robin database,環裝數據庫,因此他不會持久保存數據,一旦環走到盡頭,便覆蓋以前的數據從頭開始。cacti一旦數據初始化完成後是不會自動增加的,固然,若是定義n個數據指標,產生n個環裝數據,那也是不小的。而zabbix是插一條是一條,可是zabbix也是能夠定義的,可使用守護進程去清理數據。固然,也能夠永久保存,
Cacti的RRD是一個開源組件,cacti使用snmp收集數據,收集完成使用rrd保存數據,而rrd本身就有繪圖能力。全部cacti無非就是將rrd中所關注的數據繪成圖,在用php頁面展現出來而已。由此能夠cacti是一個很強大的集成工具。
Zabbix分佈式
Zabbix徹底開源,企業級監控,支持目前主流操做系統,Zabbix可監控10萬設備,20萬個指標(在對mysql切片優化後),可監控database,可監控web monitoring,,web響應代碼,響應時間等,可定義監控指標,可監控日誌,文件內容等等!
中心zabbix不作任何操做,讓每個代理收集監控各項指標,假設zabbix有6000條指標,每一個代理監控2000個指標,每一個代理將監控數據保存在代理監控主機數據庫。然後中心zabbix按期從代理取數據,當取完數據後,即可以刪除。代理zabbix只需保存按期時間的數據,按期傳輸便可。主zabbix壓力一定減小!
報警支持,短信,郵件,執行命令等!
Zabbix架構
Zabbix組件:
Zabbix-server:是c語言研發
監控端OS:zabbix-agent,一樣c研發
Zabbix-database:mysql,pgsql(postgreSQL),oracle,db2,sqlite
Zabbix-web GUI:展現工具,設置工具
Zabbix-proxy:分佈式專用組件,只應用於較大場景
#############################################################################################
Zabbix進程描述:
Poller:此進程可能會被啓動多個,應對更多請求
Httppoller:監控web頁面專用poller
Discoverer:發現進程 佔用資源較大
Alerter:警報工做
Housekeeper:指明數據保存時間,清理數據
Watchdog:監控主機進程是否關閉,並激活
Escalator:報警生成器
Timer:時間,計時器
Nodewatchel:監控節點
Pinger:ping操做監控節點是否在線的獨特機制
Db_config_syncer:同步配置,分佈式場景
Db_data_syncer: 同步時間,分佈式場景
安裝和部署:
在安裝zabbix以前,須要部署database,在部署lap平臺
Hardware Examples官方說明:
20臺機器:PII 350MHZ+256MB+sqlite
500臺:AMD Athion3200+2GB+mysql innodb
小於1000臺:Intel Core 6300 +4GB+RAUD 10 Mysql innodb or postgressql
小於10000臺:xeon 2xcpu+8GB +Fast RAID 10 Mysql innodb or postgressql
Zabbix產生的數據主要由四部分組成:
1, 配置數據
2, 歷史數據:50bytes
3, 歷史趨勢數據 :128bytes
4, 事件數據:130bytes
Zabbix支持衆多數據庫,通常而言預留多少存儲數據,每一次的數據收集有 50字節,歷史趨勢數據128字節,事件數據130字節,假設5分鐘收集一次,保存時間,相乘計算出存儲數據的預留空間
1,安裝mysql
下載mariadb-5.5.44.tar.gz
[root@[node108] ~]# yum groupinstall "Development Tools" "Server Platform Development" –y
[root@[node108] ~]#yum -y install cmake
[root@[node108] ~]# groupadd -r -g 306 mysql
[root@[node108] ~]# useradd -r -g 306 -u 306 mysql
[root@[node108] ~]# cd mariadb-5.5.44
[root@[node108] ~]# tar xf mariadb-5.5.44.tar.gz
[root@[node108] ~]# cd mariadb-5.5.44
[root@[node108] ~]# cmake
-DCMAKE_INSTALL_PREFIX=/usr/local/Nmariadb-5.5.44
-DMYSQL_DATADIR=/mydata/data
-DSYSCONFDIR=/etc
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
[root@[node108] ~]# make
[root@[node108] ~]# make install
[root@[node108] ~]#mkdir /mydata
[root@[node108] mariadb-5.5.44]# cd /usr/local/ Nmariadb-5.5.44/
[root@[node108] Nmariadb-5.5.44]# scripts/mysql_install_db --user=mysql --datadir=/mydata
[root@[node108] Nmariadb-5.5.44]# cp support-files/my-large.cnf /etc/mysql/my.cnf
[root@[node108] Nmariadb-5.5.44]# vim /etc/mysql/my.cnf
在[mysqld]裏面添加以下
datadir = /mydata/data 安裝目錄指定
innodb_file_per_table = NO
skip_name_resolve = NO 跳過名稱解析的
[root@[node108] Nmariadb-5.5.44]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@[node108] Nmariadb-5.5.44]# chmod +x /etc/rc.d/init.d/mysqld
[root@[node108] Nmariadb-5.5.44]# chkconfig --add mysqld
[root@[node108] Nmariadb-5.5.44]# chkconfig mysqld on
[root@[node108] Nmariadb-5.5.44]# service mysqld start
Starting MySQL....... [ OK ]
[root@[node108] Nmariadb-5.5.44]# ss -tlp |grep :mysql
LISTEN 0 50 *:mysql *:* users:(("mysqld",43871,14))
[root@[node108] Nmariadb-5.5.44]#
給root用戶添加密碼,而且刪除用戶
[root@localhost mysql]# /usr/local/mysql/bin/mysql_secure_installation
[root@[node108] profile.d]# vim /etc/profile.d/mysqld.sh
export PATH=/usr/local/Nmariadb-5.5.44/bin/:$PATH
[root@[node108] profile.d]# . /etc/profile.d/mysqld.sh
[root@[node108] profile.d]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.44-MariaDB-log Source distribution
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
建立數據庫zabbix
MariaDB [(none)]> CREATE DATABASE zabbix CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
建立zbuser用戶,受權此用用戶能夠經過172.16.x.x訪問zabbix庫,密碼zbuser
請注意:這裏因爲是做用在一臺主機,全部受權是localhost,若是不是同一個主機受權的多是主機名
MariaDB [(none)]> GRANT ALL on zabbix.* TO 'zbuser'@'172.16.%.%' IDENTIFIED BY 'zbuser';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> GRANT ALL on zabbix.* TO 'zbuser'@'localhost' IDENTIFIED BY 'zbuser';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> \q
Bye
[root@[node108] ~]#
使用本機測試下受權
[root@[node108] ~]# mysql -uzbuser -h172.16.249.22 -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.44-MariaDB-log Source distribution
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>\q
Bye
2,下載zabbix安裝
指定官方yum源,www.zabbix.com
Wget http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
下載zabbix-release-2.4-1.e16.noarch.rpm包,就會自動建立本地yum源
若是不裝把連接也到repo中便可
編譯安裝server和agent,並支持將數據放入mysql數據中,可以使用相似以下配置命令:
./configure --enable-server ---enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-ssh2
若是僅安裝server,並支持將數據庫放入mysql數據庫中,可以使用相似以下配置命令:
./configure --enable-server --with-mysql --with-net-snmp --with-libcurl
若是僅安裝proxy,並支持將數據放入mysql數據庫中,可以使用相似以下配置命令:
./configure --profix=/usr --enable-proxy --with-net-snmp --with-mysql --with-ssh2
若是僅安裝agent,可以使用相似以下配置命令:
./configure --enable-agent
然後編譯安裝zabbix便可:
#make
#make install
服務端安裝:
[root@[node108] zabbix-2.4.5]yum install zabbix-server-2.4.5-1.el6.x86_64.rpm zabbix-server-mysql-2.4.5-1.el6.x86_64.rpm zabbix-get-2.4.5-1.el6.x86_64.rpm zabbix-2.4.5-1.el6.x86_64.rpm zabbix-web-2.4.5-1.el6.noarch.rpm zabbix-web-mysql-2.4.5-1.el6.noarch.rpm zabbix-agent-2.4.5-1.el6.x86_64.rpm zabbix-sender-2.4.5-1.el6.x86_64.rpm
在/etc/httpd/conf.d目錄下由zabbix.conf文件,因此每次配置完成後必須重載httpd
啓動zabbix以前須要導入數據到mysql
[root@[node108] zabbix]# cd /usr/share/doc/zabbix-server-mysql-2.4.5/ create/
[root@[node108] create]#ls
data.sql images.sql schema.sql
導入順序從右到左
[root@localhost create]# mysql zabbix -uroot < schema.sql
[root@localhost create]# mysql zabbix -uroot < images.sql
[root@localhost create]# mysql zabbix -uroot < data.sql
配置文件:
LogFileSize=0 日誌滾動選項,0爲不滾動
默認爲Debuglevel=3級別
DBHost=localhost 指定數據庫
DBUser=zbuser 用戶
DBPassword=zbuser 密碼
DBSocket=/tmp/mysql.sock sock位置
# StartPollers=5 進程啓動5個
# StartDiscoverers=1啓動發現
# StartTimers=1 計時器進程
# MaxHousekeeperDelete=500最多刪除個數
# StartDBSyncers=4報警
# StartDBSyncers=4同步進程
# HistoryCacheSize=8M歷史數據緩存
# TrendCacheSize=4M歷史文本緩存
AlertScriptsPath=/usr/lib/zabbix/alertscripts 報警腳本存放路徑
ExternalScripts=/usr/lib/zabbix/externalscripts外部腳本存放路徑
# SSHKeyLocation= ssh監控
其餘是proxy
[root@localhost zabbix]# service zabbix-server start
Starting Zabbix server: [ OK ]
[root@localhost zabbix]# ss -tnl |grep :10051
LISTEN 0 128 :::10051 :::*
LISTEN 0 128 *:10051 *:*
[root@localhost zabbix]#ss -tnlp能夠看到zabbix啓動了不少進程
在瀏覽器中輸入ip地址/zabbix便可看到安裝界面
在下一步以前須要修改時區
[root@localhost zabbix]# vim /etc/php.ini
date.timezone = Asia/Shanghai
Reloading httpd:
[root@localhost zabbix]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@localhost zabbix]#
若是這裏報錯以下
Error connecting to database: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock
可su 到mysql用戶下
[root@localhost mysql]# su mysql
bash-4.1$ ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
然後下一步
默認管理員帳戶密碼:admin zabbix
讓zabbix監控本身,包已經安裝過了
[root@localhost mysql]# vim /etc/zabbix/zabbix_agentd.conf
受權IP地址
Server=127.0.0.1,172.16.249.22
主動發送server ip(若是監控的是本身,127.0.0.1是不能夠去掉的)
ServerActive=127.0.0.1,172.16.249.22
自動聯繫,推送數據,這裏的hostname必須全局惟一
Hostname=Zabbix server
[root@localhost mysql]# service zabbix-agent start
Starting Zabbix agent: [ OK ]
[root@localhost mysql]#
添加一臺主機監控
安裝如下包
[root@PC1 zabbix-2.4.5]# yum install zabbix-2.4.5-1.el6.x86_64.rpm zabbix-agent-2.4.5-1.el6.x86_64.rpm zabbix-sender-2.4.5-1.el6.x86_64.rpm
修改配置文件
[root@PC1 zabbix-2.4.5]# cp /etc/zabbix/zabbix_agentd.conf{,.bak}
[root@PC1 zabbix-2.4.5]# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=172.16.249.22 指向zabbix監控主機
Hostname=PC1 設置主機名
Server=172.16.249.22 指向zabbix監控主機
[root@PC1 zabbix-2.4.5]# service zabbix-agent start
Starting Zabbix agent: [ OK ]
[root@PC1 zabbix-2.4.5]#
PS:若是這裏有iptables,這裏須要放行zabbix
在web_gui界面添加主機
Templates:模板
Macros:主機宏,一次修改屢次有效的喲
Host inventory:資產清單
###############################################################################################
zabbbx-agent
安裝agent
yum -y install zabbix-agent zabbix
vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.120
添加UserParameter斷
vim /etc/zabbix/zabbix_agentd.conf
UserParameter=mysql_alive, mysqladmin ping|grep -c alive
可以使用zabbix_get -s 10.0.0.53 -k mysql_alive
查看
web頁面建立主機組
![](http://static.javashuo.com/static/loading.gif)
添加主機到主機組
![](http://static.javashuo.com/static/loading.gif)
建立mysqlitems
![](http://static.javashuo.com/static/loading.gif)
添加觸發器
![](http://static.javashuo.com/static/loading.gif)
graphs出圖
![](http://static.javashuo.com/static/loading.gif)
預覽
![](http://static.javashuo.com/static/loading.gif)
##############################################################################################################3
###################################################################################################33
1.在client的httpd.conf中添加以下
sudo vim /alidata/server/httpd/conf/httpd.conf
<Location /server-status>
SetHandler server-status
Allow from 127.0.0.1
Order deny,allow
Deny from all
</Location>
ExtendedStatus On
若是你有rewrite規則,則須要在.htaccess
中加上一條,以下:
RewriteCond %{REQUEST_URI} !server-status須要寫在index.php以前
sudo vim /alidata/www/jds.jince.com/.htaccess
# ThinkPHP Rewrite規則
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !server-status
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
#禁止顯示目錄列表
Options -Indexes
2,重加載apache配置
Check uptime並重啓apache
sudo /etc/init.d/httpd configtest 無錯誤後
sudo /etc/init.d/httpd graceful
可使用curl 127.0.0.1/server-status測試
3,在zabbix-agent上建立目錄和腳本
sudo mkdir /etc/zabbix/scripts
sudo vim /etc/zabbix/scripts/check_apache.sh
將check_apache.sh
放入client的/etc/zabbix/scripts
1 #! /bin/bash 2 # 3 # Name: zapache 4 # 5 # Checks Apache activity. 6 # 7 # Author: Alejandro Michavila 8 # Modified for Scoreboard Values: Murat Koc, murat@profelis.com.tr 9 # Modified for using also as external script: Murat Koc, murat@profelis.com.tr 10 # Modified for outputting usage or ZBX_NOTSUPPORTED: Alejandro Michavila 11 # Modified to do cacheing for performance, dmitry.frolov@gmail.com 12 # 13 # Version: 1.5
14 # 15
16 zapachever="1.5"
17 rval=0
18 value=""
19 cache_seconds="30"
20 [ "$TMPDIR" ] || TMPDIR=/tmp 21 function usage() 22 { 23 echo "zapache version: $zapachever"
24 echo "usage:"
25 echo " $0 [<url>] TotalAccesses - Check total accesses."
26 echo " $0 [<url>] TotalKBytes - Check total KBytes."
27 echo " $0 [<url>] CPULoad - Check CPU load."
28 echo " $0 [<url>] Uptime - Check uptime."
29 echo " $0 [<url>] ReqPerSec - Check requests per second."
30 echo " $0 [<url>] BytesPerSec - Check Bytes per second."
31 echo " $0 [<url>] BytesPerReq - Check Bytes per request."
32 echo " $0 [<url>] BusyWorkers - Check busy workers."
33 echo " $0 [<url>] IdleWorkers - Check idle workers."
34 echo " $0 [<url>] version - Version of this script."
35 echo " $0 [<url>] ping - Check if Apache is up."
36 echo " $0 [<url>] WaitingForConnection - Check Waiting for Connection processess."
37 echo " $0 [<url>] StartingUp - Check Starting Up processess."
38 echo " $0 [<url>] ReadingRequest - Check Reading Request processess."
39 echo " $0 [<url>] SendingReply - Check Sending Reply processess."
40 echo " $0 [<url>] KeepAlive - Check KeepAlive Processess."
41 echo " $0 [<url>] DNSLookup - Check DNSLookup Processess."
42 echo " $0 [<url>] ClosingConnection - Check Closing Connection Processess."
43 echo " $0 [<url>] Logging - Check Logging Processess."
44 echo " $0 [<url>] GracefullyFinishing - Check Gracefully Finishing Processess."
45 echo " $0 [<url>] IdleCleanupOfWorker - Check Idle Cleanup of Worker Processess."
46 echo " $0 [<url>] OpenSlotWithNoCurrentProcess - Check Open Slots with No Current Process."
47 } 48
49 ######## 50 # Main # 51 ######## 52
53 if [[ $# == 1 ]];then 54 #Agent Mode 55 STATUS_URL="http://localhost/server-status?auto"
56 CASE_VALUE="$1"
57 elif [[ $# == 2 ]];then 58 #External Script Mode 59 STATUS_URL="$1"
60 case "$STATUS_URL" in
61 http://*|https://*) ;;
62 *) STATUS_URL="http://$STATUS_URL/server-status?auto";; 63 esac 64 CASE_VALUE="$2"
65 else
66 #No Parameter 67 usage 68 exit 0
69 fi 70
71 case "$CASE_VALUE" in
72 'version') 73 echo "$zapachever"
74 exit 0;; 75 esac 76
77 cache_prefix="zapache-${STATUS_URL//[^a-zA-Z0-9_-]/_}"
78 cache="$TMPDIR/$cache_prefix.cache"
79 cache_timestamp_check="$TMPDIR/$cache_prefix.ts"
80 # This assumes touch from coreutils 81 touch -d "@$((`date +%s` - ($cache_seconds - 1)))" "$cache_timestamp_check"
82
83 if [ "$cache" -ot "$cache_timestamp_check" ]; then 84 curl="`which curl`"
85 if [ "$curl" ]; then 86 fetch_url_cmd="$curl --insecure --silent --location"
87 else
88 wget="`which wget`"
89 if [ "$wget" ]; then 90 fetch_url_cmd="$wget --no-check-certificate --quiet -O -"
91 else
92 echo "ZBX_NOTSUPPORTED"
93 exit 1
94 fi 95 fi 96
97 $fetch_url_cmd "$STATUS_URL" > "$cache"
98 rval=$?
99 if [ $rval != 0 ]; then 100 echo "ZBX_NOTSUPPORTED"
101 exit 1
102 fi 103 fi 104
105 case "$CASE_VALUE" in
106 'ping') 107 if [ ! -s "$cache" -o "$cache" -ot "$cache_timestamp_check" ]; then 108 echo "0"
109 else
110 echo "1"
111 fi 112 exit 0;; 113 esac 114
115 if ! [ -s "$cache" ]; then 116 echo "ZBX_NOTSUPPORTED"
117 exit 1
118 fi 119
120 case "$CASE_VALUE" in
121 'TotalAccesses') 122 value="`awk '/^Total Accesses:/ {print $3}' < \"$cache\"`"
123 rval=$?;; 124 'TotalKBytes') 125 value="`awk '/^Total kBytes:/ {print $3}' < \"$cache\"`"
126 rval=$?;; 127 'CPULoad') 128 value="`awk '/^CPULoad:/ {print $2}' < \"$cache\"`"
129 rval=$?;; 130 'Uptime') 131 value="`awk '/^Uptime:/ {print $2}' < \"$cache\"`"
132 rval=$?;; 133 'ReqPerSec') 134 value="`awk '/^ReqPerSec:/ {print $2}' < \"$cache\"`"
135 rval=$?;; 136 'BytesPerSec') 137 value="`awk '/^BytesPerSec:/ {print $2}' < \"$cache\"`"
138 rval=$?;; 139 'BytesPerReq') 140 value="`awk '/^BytesPerReq:/ {print $2}' < \"$cache\"`"
141 rval=$?;; 142 'BusyWorkers') 143 value="`awk '/^BusyWorkers:/ {print $2}' < \"$cache\"`"
144 rval=$?;; 145 'IdleWorkers') 146 value="`awk '/^IdleWorkers:/ {print $2}' < \"$cache\"`"
147 rval=$?;; 148 'WaitingForConnection') 149 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "_" }; { print NF-1 }'`"
150 rval=$?;; 151 'StartingUp') 152 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "S" }; { print NF-1 }'`"
153 rval=$?;; 154 'ReadingRequest') 155 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "R" }; { print NF-1 }'`"
156 rval=$?;; 157 'SendingReply') 158 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "W" }; { print NF-1 }'`"
159 rval=$?;; 160 'KeepAlive') 161 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "K" }; { print NF-1 }'`"
162 rval=$?;; 163 'DNSLookup') 164 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "D" }; { print NF-1 }'`"
165 rval=$?;; 166 'ClosingConnection') 167 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "C" }; { print NF-1 }'`"
168 rval=$?;; 169 'Logging') 170 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "L" }; { print NF-1 }'`"
171 rval=$?;; 172 'GracefullyFinishing') 173 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "G" }; { print NF-1 }'`"
174 rval=$?;; 175 'IdleCleanupOfWorker') 176 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "I" }; { print NF-1 }'`"
177 rval=$?;; 178 'OpenSlotWithNoCurrentProcess') 179 value="`awk '/^Scoreboard:/ {print $2}' < \"$cache\" | awk 'BEGIN { FS = "." }; { print NF-1 }'`"
180 rval=$?;; 181 *) 182 usage 183 exit 1;; 184 esac 185
186 if [ "$rval" -eq 0 -a -z "$value" ]; then 187 rval=1
188 fi 189
190 if [ "$rval" -ne 0 ]; then 191 echo "ZBX_NOTSUPPORTED"
192 fi 193
194 echo "$value"
195 exit $rval 196
197 # 198 # end zapache
check_apache.sh
給腳本執行權限
sudo chmod +x /etc/zabbix/scripts/check_apache.sh
4.將userparameter_apache.conf放入client的/etc/zabbix/zabbix_agentd.d,內容以下:
sudo vim /etc/zabbix/zabbix_agentd.d/userparameter_apache.conf
UserParameter=zapache[*],/bin/bash /etc/zabbix/scripts/check_apache.sh $1
5.重啓agentd
/etc/init.d/zabbix-agent restart
$ sudo /etc/init.d/zabbix-agent restart
測試
sudo sh /etc/zabbix/scripts/check_apache.sh CPULoad
2.06619
修改權限
sudo chown zabbix.zabbix /tmp/zapache-http___localhost_server-status_auto.*
文件以下:
-rw-r--r-- 1 zabbix zabbix 440 Mar 17 14:29 zapache-http___localhost_server-status_auto.cache
-rw-r--r-- 1 zabbix zabbix 0 Mar 17 14:29 zapache-http___localhost_server-status_auto.ts
6.在zabbix server 中建立Template App Apache service模板,添加items, 關聯須要監控的apache主機便可
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
apache服務監控可參考以下:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)