1、Linux下開源監控系統簡單介紹
1)cacti:存儲數據能力強,報警性能差
2)nagios:報警性能差,存儲數據僅有簡單的一段能夠判斷是否在合理範圍內的數據長度,儲存在內存中。好比,連續採樣數據存儲,有連續三次不在合理範圍內的數據就報警
3)zabbix:結合上面兩種工具的優勢,又能夠存儲數據,又能夠報警。php
Zabbix是一個基於Web界面提供分佈式系統監視及網絡監視功能的企業級開源解決方案。藉助Zabbix可很輕鬆地減輕運維人員們繁重的服務器管理任務,實現業務系統持續運行。
下面會逐步介紹Zabbix分佈式監控系統的部署及使用記錄html
2、zabbix特性
1)數據採樣:經過snmp、ssh、telnet、agent、ipmi、jmx等通道採集被監控主機的數據。能夠自定義檢測機制和自定義時間間隔
2)實時繪圖:展現,讀取數據繪圖,支持graph,map,screen,幻燈片(slide show)
3)告警:(升級告警,規定時間內內解決不了的事情往上傳)
4)數據存儲:數據庫有mysql,pgsql,時間序列數據庫等等前端
3、程序構成
1)zabbix_server:服務端守護進程
2)zabbix_agented:agent端守護進程
3)zabbix_proxy:代理服務器(可選,分佈式纔用到)
4)zabbix_get:命令行工具,手動測試數據採集
5)zabbix_sender:命令行工具,運行於agent端,手動向server端發送數據
6)zabbixjavagateway:java網關java
Zabbix的監控流程能夠簡單描述爲:
數據採集-->數據存儲-->數據分析-->數據展現-->監控報警python
其中:
數據採集:Zabbix經過SNMP、Agent、ICMP、SSH、IPMI等進行數據採集
數據存儲:Zabbix存儲在MySQL上,也能夠存儲在其餘數據庫
數據展現:web界面展現、(移動APP、java_php開發一個web界面也能夠)
數據報警:郵件報警、微信報警、短信報警、報警升級機制mysql
Zabbix的監控配置流程能夠簡單描述爲:
告警是由一系列的流程組成,首先是觸發器達到閥值,產生一個事件,接下來由Action對事件信息進行處理,其中包括兩部分:
第一部分是發送消息,即將告警信息發送給用戶。
第二部分是執行命令,即將事件用命令進行處理,達到對事件故障自動嘗試恢復的效果。linux
Host groups(主機組)-->Hosts(主機)-->template(模板)-->Applications(監控項組)-->Items(監控項)-->graph(圖形) -->screen (圖形分組)-->Triggers(觸發器)-->Event(事件)-->Actions(處理動做)-->Media types(告警升級|1.執行遠程命令2.發送告警郵件)-->User groups(用戶組)-->Users(用戶)-->Medias(告警郵件)ios
在實際生產使用的時候,Items、Trigger、Graph採用模板來進行監控,模板特色就是能夠重複的事情一次完成,修改了模板等於修改了全部調用此模板的主機,這樣可解放運維的雙手.
Graph不是必需的,由於沒有配置圖形,數據獲取並不影響,獲取數據是Items的功能。可是對於使用ZabbixWeb界面用戶來講,沒有圖形等於沒有數據,所以重要的Items必須添加必要的圖形以作可視化展現。若是想集中查看圖形,能夠經過screen功能。nginx
4、zabbix主動模式和被動模式web
zabbix使用proxy代理插件的好處:
一方面能夠監控不可達的遠程區域;
另外一方面當監控項目數以萬計的時候使用代理能夠有效分擔zabbix server壓力,也簡化分佈式監控的維護。
說明:
主動、被動模式都是相對於proxy來講的。
proxy主動發送數據就是主動模式;
proxy等待server的請求,再發送數據就是被動模式。
由於主動模式能夠有效減輕zabbix server壓力,須要監控的東西不少時必定要把監控模式更改成主動監控
被動模式流程,被動模式必定要記得設置Server = ServerIP
被動模式工做流程:
Server 打開一個TCP鏈接
Server發送一個key 爲agent.
ping
Agent接受這個請求,而後響應< HEADER >< DATALEN >
Server對接受到的數據進行處理
TCP鏈接關閉
主動模式流程,主動模式必定要記得設置ServerActive=ServerIP
Agent向Server創建一個TCP鏈接
Agent請求須要檢測的數據列表
Server響應Agent,發送一個Items列表
Agent容許響應
TCP鏈接完成本次會話關閉
Agent開始週期性地收集數據
1)配置好IP、DNS 、網關,確保使用遠程鏈接工具可以鏈接服務器
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
特別提示:不少網友把這兩條規則添加到防火牆配置的最後一行,致使防火牆啓動失敗,正確的應該是添加到默認的22端口這條規則的下面
添加好以後防火牆規則以下所示:
---------------------------------------------------------------------------------------------------
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
---------------------------------------------------------------------------------------------------
[root@Zabbix-server ~]# /etc/init.d/iptables restart
3)關閉SELINUX
[root@Zabbix-server ~]# vim /etc/selinux/config
#SELINUX=enforcing
#SELINUXTYPE=targeted
SELINUX=disabled
[root@Zabbix-server ~]# reboot //重啓後永久生效,或者使用setenforce 0臨時生效
4)系統約定
軟件源代碼包存放位置:/usr/local/src
源碼包編譯安裝位置:/usr/local/軟件名字
此處參照:nginx1.10.3+php5.6+mysql5.7.0
測試完成後,確保nginx,php,mysql都能正常啓動,可以訪問php頁面
下面正式配置zabbix-3.0.3
環境說明
zabbix-server:192.168.1.1 #zabbix的服務端(若要監控本機,則須要配置本機的Zabbix agent)
zabbix-agent:192.168.1.2 #zabbix的客戶端(被監控端,須要配置Zabbix agent)
1、zabbix-server端的操做記錄(192.168.1.1)
1 建立zabbix運行的用戶2 安裝libcurl和net-snmp
3 安裝Fping
4 安裝zabbix server
5 Zabbix Server配置與啓動
6 Nginx配置 和 php.ini配置
groupadd zabbix
useradd -g zabbix zabbix
yum -y install libcurl net-snmp
cd /usr/local/src
wget -c http://fping.org/dist/fping-3.4.tar.gz
./configure
make && make install
chown root:zabbix /usr/local/sbin/fping
chown 4710 /usr/local/sbin/fping
安裝zabbix server
wget -c http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.3/zabbix-3.0.3.tar.gz
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl --enable-java
編譯時最好帶上--enable-java這個參數,方便之後監控tomcat用
zabbix server配置和啓動
建立zabbix數據庫和mysql用戶
>create schema zabbix character set utf8;
>create user 'zabbix'@'%' identified by '123456';
>grant all on zabbix.* to 'zabbix'@'%';
導入Zabbix初始數據:
cd /usr/local/src/zabbix-3.0.3/database/mysql
這個下面有三個sql的文檔:data.sql images.sql schema.sql
登陸mysql,進行zabbix初始數據導入:
use zabbix;
set sql_log_bin=0;
source ./schema.sql;
source ./images.sql;
source ./data.sql;
set sql_log_bin=1;
編輯/usr/local/zabbix/etc/zabbix_server.conf:
[root@Zabbix-server ~]#vim /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/usr/local/zabbix/logs/zabbix_server.log
PidFile=/usr/local/zabbix/logs/zabbix_server.pid
DBHost=192.168.1.1
DBName=zabbix
DBUser=zabbix
DBPassword=123456
DBPort=3306
FpingLocation=/usr/local/sbin/fping
該配置文件定義了php的安裝的log的目錄,用戶名,密碼端口,數據庫名稱
從安裝目錄拷貝zabbix_server腳本,並編輯:
[root@Zabbix-server ~]# cd /usr/local/src
[root@Zabbix-server src]# cd zabbix-3.0.3
[root@Zabbix-server zabbix-3.0.3]# cp misc/init.d/fedora/core5/zabbix_server /etc/init.d/
[root@Zabbix-server zabbix-3.0.3]# mkdir -p /usr/local/zabbix/logs
[root@Zabbix-server zabbix-3.0.3]# chown -R zabbix:zabbix /usr/local/zabbix
[root@Zabbix-server zabbix-3.0.3]# vim /etc/init.d/zabbix_server
[root@Zabbix-server zabbix-3.0.3]# cat /etc/init.d/zabbix_server
...
ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_server"
CONF_FILE="/usr/local/zabbix/etc/zabbix_server.conf"
...
start() {
...
daemon $ZABBIX_BIN -c $CONF_FILE
...
}
調整防火牆規則(開放端口10051):
[root@Zabbix-server ~]# vim /etc/sysconfig/iptables
...
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT
...
[root@Zabbix-server ~]# /etc/init.d/iptables restart
啓動Zabbix Server:
[root@Zabbix-server ~]# service zabbix_server start
#也能夠直接/usr/local/zabbix/sbin/zabbix_server方式啓動
配置開機自動啓動:
[root@Zabbix-server ~]# chkconfig --add zabbix_server
[root@Zabbix-server ~]# chkconfig --level 35 zabbix_server on
Zabbix的Web前端
在安裝目錄將frontends拷貝到指定的web root:
[root@Zabbix-server ~]# mkdir -p /data/www/zabbix
[root@Zabbix-server ~]# cd /usr/local/src
[root@Zabbix-server src]# cd zabbix-3.0.3
[root@Zabbix-server zabbix-3.0.3]#cp -a frontends/php/* /data/www/zabbix/
[root@Zabbix-server zabbix-3.0.3]# chown -R www:www /data/www/zabbix
Nginx配置:
[root@Zabbix-server ~]# cat /usr/local/nginx/conf/vhost/zabbix.conf
server { listen 80; server_name zabbix.zrwm.com; location / { root /data/www/zabbix; index index.php index.html index.htm ; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { root /data/www/zabbix; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
php.ini配置:
[root@Zabbix-server ~]# cat /usr/local/php5/etc/php.ini
...
memory_limit = 128M
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
session.auto_start = 0 ; //必須爲0
mbstring.func_overload = 0
date.timezone = Asia/ShangHai
注:PHP須要至少開啓擴展:gd,bcmath,ctype,libXML,xmlreader,xmlwriter,session,sockets,mbstring,gettext,mysql
以下,查看是否包括了上面所提到的擴展模塊
[root@Zabbix-server ~]# /usr/local/php5/bin/php -m
[PHP Modules]
bcmath
Core
ctype
curl
date
dom
ereg
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
mcrypt
mysql
mysqli
openssl
pcntl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
zip
zlib
訪問Web界面http://zabbix.zrwm.com,進行相關web配置,配置完成後使用默認用戶admin(密碼:zabbix)登錄便可.
在登陸web界面後出現一些可能的報錯
1)PHP option "max_execution_time" 120 300 failed # vim /data/php/lib/php.ini max_execution_time = 300 //修改成300 而後重啓nginx(如果apache+php,就重啓apache) 2)PHP bcmath off failed 解決辦法:安裝php的bcmath擴展 # yum install *bcmath* --skip-broken # cd /data/software/php-5.6.30/ext/bcmath/ # /data/php/bin/phize # ./configure --with-php-config=/data/php/bin/php-config # make && make install # vim /data/php/lib/php.ini 添加下面內容 ..... extension=/data/php/lib/php/extensions/no-debug-zts-20131226/bcmath.so 而後重啓php(如果apache+php,就重啓apache) 3)about always-populate-raw-post-data must be set -1 的問題: PHP option "always_populate_raw_post_data" on off failed 解決辦法: # vim /data/vhosts/zabbix/include/classes/setup/CFrontendSetup.php 添加下面這一行 ....... public function checkPhpAlwaysPopulateRawPostData() { $current = ini_get('always_populate_raw_post_data'); $current = -1; //添加這一行內容 return [ 'name' => _s('PHP option "%1$s"', 'always_populate_raw_post_data'), 'current' => ($current != -1) ? _('on') : _('off'), 'required' => _('off'), 'result' => ($current != -1) ? self::CHECK_FATAL : self::CHECK_OK, 'error' => _s('PHP option "%1$s" must be set to "%2$s"', 'always_populate_raw_post_data', -1) ];
2、zabbix客戶端的操做記錄(192.168.1.2)
安裝Zabbix,配置Zabbix agent:
[root@bastion-IDC ~]# cd /usr/local/src/
[root@bastion-IDC src]# wget -c wget -c http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.3/zabbix-3.0.3.tar.gz/download
[root@bastion-IDC src]# cd zabbix-3.0.3
[root@bastion-IDC zabbix-3.0.3]# ./configure --prefix=/usr/local/zabbix --enable-agent
[root@bastion-IDC zabbix-3.0.3]# make && make install
[root@bastion-IDC zabbix-3.0.3]# cp misc/init.d/fedora/core5/zabbix_agentd /etc/init.d/
配置zabbix_agentd:
[root@bastion-IDC ~]# groupadd zabbix
[root@bastion-IDC ~]# useradd -g zabbix zabbix
[root@bastion-IDC ~]# mkdir -p /usr/local/zabbix/logs
[root@bastion-IDC ~]# chown zabbix:zabbix -R /usr/local/zabbix/
[root@bastion-IDC ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
[root@bastion-IDC ~]# cat /usr/local/zabbix/etc/zabbix_agentd.conf
...
PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.1.1
ListenPort=10050
ServerActive=192.168.1.1
Hostname=192.168.1.2
[#在192.168.1.2本機的/etc/hosts裏作主機映射:「ip hostname」][也能夠設置公網ip]
Timeout=15
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
...
配置Zabbix Agent啓動腳本:
[root@bastion-IDC ~]# cat /etc/init.d/zabbix_agentd
...
prog="Zabbix Agent"
ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_agentd"
CONF_FILE="/usr/local/zabbix/etc/zabbix_agentd.conf"
...
start() {
...
daemon $ZABBIX_BIN -c $CONF_FILE
...
}
...
開啓防火牆端口10050:
[root@bastion-IDC ~]# cat /etc/sysconfig/iptables
...
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT
...
[root@bastion-IDC ~]# /etc/init.d/iptables restart
啓動zabbix_agentd:
[root@bastion-IDC ~]# /etc/init.d/zabbix_agentd start
Starting Zabbix Agent: [ OK ]
配置開機自動啓動:
[root@bastion-IDC ~]# chkconfig --add zabbix_agentd
[root@bastion-IDC ~]# chkconfig --level 35 zabbix_agentd on
測試下zabbix agent是否正常工做:
[root@bastion-IDC ~]# /usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf -t system.uptime
system.uptime [u|68301]
登陸zabbix,先在「配置」-「主機」裏添加主機監控,監控os資源:內存,cpu,io,負載,帶寬等
注意:下圖中的「主機名稱」要和zabbix_agentd.conf文件中設置的「Hostname」後面的名稱一致!
配置一段時間,看效果圖
在zabbix界面中,默認要查看多個主機的監控數據時須要不停的切換。其實能夠在一個頁面中批量查看多個主機的監控項的數據,這就須要使用Screen方法(Screen 的方法是將每一個item的graph放到一個屏幕上,即在聚合圖形裏選擇要放在一個screen裏的圖形,事先建立一個拓撲圖。注意選擇磁盤空間監控項的圖形時,圖形樣式調整「層積「顯示),可是看起來不夠明晰;最好是將各機器的同一item放到同一個graph裏。好比一個Nginx的組裏有10臺機器,將這10臺機器的內存使用率放到一個graph裏,方便在測試時查看。
在zabbix的前端要建立此類的graph只能經過手工一個一個的加,不能建立此類的templates。在網上有批量建立Screen的針對API的python腳本。
-------------------------------------------------------------------------------------------------------------------------
zabbix監控獲取數據的途徑有簡單檢查,zabbix agent,snmp。能夠經過zabbix agent獲取客戶機的cpu、內存、磁盤io等監控數據;可是對於交互機(打印機,路由器等網絡設備)的監控就要用到snmp協議,snmp經過特定的oid值來獲取對應的數據。交換機須要開啓snmp協議,經過snmpwalk 能夠抓取到數據就能夠了(snmpwalk -v 2c -c public *.*.*.*)
------------------------------------------------------------------------------------------------------------------------
使用zabbix的ICMP Ping模版實現對客戶端網絡狀態的監控
如上正確安裝及配置fping,而後在服務端進行zabbix用戶測試fping命令
[root@Zabbix-server ~]# /usr/local/sbin/fping www.baidu.com
www.baidu.com is alive //說明命令返回成功。
接着在zabbix監控界面裏添加主機設置,並選擇添加模版template icmp ping。而後點開這個模塊,能夠選擇想要的監控項的圖形
-----------------------------------------Zabbix監控項CPU Load數值與服務器上uptime的實際值不符合--------------------------------------
現象說明:
zabbix監控項cpu load的數值跟被監控機本地uptime顯示的負載值對不上,前者數值小於後者。
產生緣由:
如今服務器的cpu基本都是多核的,但zabbix監控項cpu load參數裏默認顯示的是一個核心的參數,
而不是總和,因此二者數值對不上。
解決辦法:
"配置"->"模板"->"Template OS Linux"->"監控項"->"Processor load (1 min average per core)"
點開,將system.cpu.load[percpu,avg1]改成system.cpu.load[all,avg1],即將percpu改成all。
其他5 min和15 min的load監控項的改法同樣!保存等幾分鐘便可顯示。
-----------------------------------添加網絡監控項的觸發器(報警設置)--------------------------------注意:網絡監控的默認單位是bps,監控報警通常看的是Mbps,須要轉爲爲bps。好比超過8M報警,那觸發器的值即爲8*1024*1024=8388608