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,時間序列數據庫等等java
3、程序構成
1)zabbix_server:服務端守護進程
2)zabbix_agented:agent端守護進程
3)zabbix_proxy:代理服務器(可選,分佈式纔用到)
4)zabbix_get:命令行工具,手動測試數據採集
5)zabbix_sender:命令行工具,運行於agent端,手動向server端發送數據
6)zabbixjavagateway:java網關node
Zabbix的監控流程能夠簡單描述爲:
數據採集-->數據存儲-->數據分析-->數據展現-->監控報警mysql
其中:
數據採集:Zabbix經過SNMP、Agent、ICMP、SSH、IPMI等進行數據採集
數據存儲:Zabbix存儲在MySQL上,也能夠存儲在其餘數據庫
數據展現:web界面展現、(移動APP、java_php開發一個web界面也能夠)
數據報警:郵件報警、微信報警、短信報警、報警升級機制linux
Zabbix的監控配置流程能夠簡單描述爲:
告警是由一系列的流程組成,首先是觸發器達到閥值,產生一個事件,接下來由Action對事件信息進行處理,其中包括兩部分:
第一部分是發送消息,即將告警信息發送給用戶。
第二部分是執行命令,即將事件用命令進行處理,達到對事件故障自動嘗試恢復的效果。ios
Host groups(主機組)-->Hosts(主機)-->template(模板)-->Applications(監控項組)-->Items(監控項)-->graph(圖形) -->screen (圖形分組)-->Triggers(觸發器)-->Event(事件)-->Actions(處理動做)-->Media types(告警升級|1.執行遠程命令2.發送告警郵件)-->User groups(用戶組)-->Users(用戶)-->Medias(告警郵件)nginx
在實際生產使用的時候,Items、Trigger、Graph採用模板來進行監控,模板特色就是能夠重複的事情一次完成,修改了模板等於修改了全部調用此模板的主機,這樣可解放運維的雙手.
Graph不是必需的,由於沒有配置圖形,數據獲取並不影響,獲取數據是Items的功能。可是對於使用ZabbixWeb界面用戶來講,沒有圖形等於沒有數據,所以重要的Items必須添加必要的圖形以作可視化展現。若是想集中查看圖形,能夠經過screen功能。c++
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開始週期性地收集數據
總結:
- 主動或者被動是相對客戶端來說的。
- 被動模式,服務端會主動鏈接客戶端獲取監控項目數據,客戶端被動地接受鏈接,並把監控信息傳遞給服務端,服務端請求之後,客戶端接受到請求之後,才把相應的數據彙報給服務中心。
- 主動模式,客戶端會主動把監控數據彙報給服務端,服務端只負責接收便可。
- 定義完策略以後,到達定義的時間之後,就會主動彙報數據給服務中心,好比系統的負載,網絡的網卡流量等。
- 當客戶端數量很是多時,建議使用主動模式,這樣能夠下降服務端的壓力。
- 服務端有公網ip,客戶端只有內網ip,但卻能連外網,這種場景適合主動模式。
Server=192.168.1.30 #被動模式下的zabbix server IP地址(若是設置爲純被動模式,則應該註釋掉這一條指令)
ServerActive=192.168.1.30 #主動模式下的zabbix server IP地址
注:純主動模式下的zabbix agent,只能支持Zabbix Agent (Active)類型的監控項。
通常狀況下,主動和被動這兩種模式都用,兩行內容都配置上。
5、基礎環境LNMP部署
1)配置好IP、DNS 、網關,確保使用遠程鏈接工具可以鏈接服務器
2)配置防火牆,開啓80端口、3306端口
[root@Zabbix-server ~]# vim /etc/sysconfig/iptables
-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/軟件名字
5)下載軟件包
所需軟件包下載地址:http://pan.baidu.com/s/1bDDLr4
提取密碼:rx4i
軟件均上傳到/usr/local/src目錄
6)安裝編譯工具及庫文件(使用CentOS yum命令安裝)
[root@Zabbix-server ~]# yum install make apr* autoconf automake curl-devel gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel gd kernel keyutils patch perl kernel-headers compat* mpfr cpp glibc libgomp libstdc++-devel ppl cloog-ppl keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* php-common php-gd ncurses* libtool* libxml2 libxml2-devel patch cmake
7)下面開始正式安裝
a)安裝mysql
[root@Zabbix-server ~]# groupadd mysql
[root@Zabbix-server ~]# useradd -g mysql mysql -s /bin/false
[root@Zabbix-server ~]# mkdir -p /data/mysql
[root@Zabbix-server ~]# chown -R mysql:mysql /data/mysql
[root@Zabbix-server ~]# mkdir -p /usr/local/mysql
[root@Zabbix-server ~]# cd /usr/local/src
[root@Zabbix-server src]# tar zxvf mysql-5.5.25a.tar.gz
[root@Zabbix-server src]# cd mysql-5.5.25 && cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc
[root@Zabbix-server src]# make
[root@Zabbix-server src]# make install
[root@Zabbix-server src]# cd /usr/local/mysql
[root@Zabbix-server mysql]# cp ./support-files/my-huge.cnf /etc/my.cnf //拷貝配置文件(注意:若是/etc目錄下面默認有一個my.cnf,直接覆蓋便可)
[root@Zabbix-server mysql]# vim /etc/my.cnf
datadir = /data/mysql //添加MySQL數據庫路徑
[root@Zabbix-server mysql]# ./scripts/mysql_install_db --user=mysql
[root@Zabbix-server mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@Zabbix-server mysql]# chmod 755 /etc/init.d/mysqld
[root@Zabbix-server mysql]# chkconfig mysqld on
[root@Zabbix-server mysql]# vim /etc/rc.d/init.d/mysqld
basedir = /usr/local/mysql
datadir = /data/mysql
[root@Zabbix-server mysql]# service mysqld start
[root@Zabbix-server mysql]# vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
下面這兩行把myslq的庫文件連接到系統默認的位置,這樣你在編譯相似PHP等軟件時能夠不用指定mysql的庫文件地址。
[root@Zabbix-server mysql]# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
[root@Zabbix-server mysql]# ln -s /usr/local/mysql/include/mysql /usr/include/mysql
[root@Zabbix-server mysql]# /usr/local/mysql/bin/mysqladmin -u root password "123456"
[root@Zabbix-server mysql]# service mysqld restart
b)安裝nginx
先編譯安裝pcre
[root@Zabbix-server ~]# cd /usr/local/src
[root@Zabbix-server src]# mkdir /usr/local/pcre
[root@Zabbix-server src]# tar zxvf pcre-8.31.tar.gz
[root@Zabbix-server src]# cd pcre-8.31
[root@Zabbix-server pcre-8.31]# ./configure --prefix=/usr/local/pcre
[root@Zabbix-server pcre-8.31]# make
[root@Zabbix-server pcre-8.31]# make install
接着編譯安裝nginx
[root@Zabbix-server ~]# cd /usr/local/src
[root@Zabbix-server src]# groupadd www
[root@Zabbix-server src]# useradd -g www www -s /bin/false //建立nginx運行帳戶www並加入到www組,不容許www用戶直接登陸系統
[root@Zabbix-server src]# tar zxvf nginx-1.2.2.tar.gz
[root@Zabbix-server src]# cd nginx-1.2.2
[root@Zabbix-server nginx-1.2.2]# ./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-openssl=/usr/ --with-pcre=/usr/local/src/pcre-8.31
注意:--with-pcre=/usr/local/src/pcre-8.31指向的是源碼包解壓的路徑,而不是安裝的路徑,不然會報錯
[root@Zabbix-server nginx-1.2.2]# make
[root@Zabbix-server nginx-1.2.2]# make install
[root@Zabbix-server nginx-1.2.2]# /usr/local/nginx/sbin/nginx
[root@Zabbix-server nginx-1.2.2]# vim /etc/rc.local
.....
/usr/local/nginx/sbin/nginx
c)安裝php
先編譯安裝libmcrypt
[root@Zabbix-server ~]# cd /usr/local/src
[root@Zabbix-server src]# tar zxvf libmcrypt-2.5.8.tar.gz
[root@Zabbix-server src]# cd libmcrypt-2.5.8
[root@Zabbix-server libmcrypt-2.5.8]# ./configure
[root@Zabbix-server libmcrypt-2.5.8]# make
[root@Zabbix-server libmcrypt-2.5.8]# make install
接着編譯安裝php
[root@Zabbix-server ~]# cd /usr/local/src
[root@Zabbix-server src]# tar -zvxf php-5.4.5.tar.gz
[root@Zabbix-server src]# cd php-5.4.5
[root@Zabbix-server php-5.4.5]# mkdir -p /usr/local/php5
[root@Zabbix-server php-5.4.5]# ./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-gd --with-iconv --with-zlib --with-freetype-dir --with-png-dir --with-jpeg-dir --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl
[root@Zabbix-server php-5.4.5]# make
[root@Zabbix-server php-5.4.5]# make install
-------------------------------------這一步會報錯以下----------------------------------
/usr/local/php5/ext/dom/node.c:1953: error: dereferencing pointer to incomplete type
make: *** [ext/dom/node.lo] Error 1
解決辦法
在國外的一個網站上找到了這個,其餘版本的php也一樣適用。
[root@Zabbix-server ~]# curl -o php-5.2.17.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
切換到php的解壓目錄
[root@Zabbix-server src]#cd php-5.4.5
[root@Zabbix-server php-5.4.5]# patch -p0 -b <../php-5.2.17.patch
patching file ext/dom/node.c
patching file
ext/dom/documenttype.c
patching file ext/simplexml/simplexml.c
---------------------------------------------------------------------------------------
[root@Zabbix-server php-5.4.5]# cp php.ini-production /usr/local/php5/etc/php.ini
[root@Zabbix-server php-5.4.5]# rm -rf /etc/php.ini
[root@Zabbix-server php-5.4.5]# ln -s /usr/local/php5/etc/php.ini /etc/php.ini
[root@Zabbix-server php-5.4.5]# cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf
[root@Zabbix-server php-5.4.5]# vim /usr/local/php5/etc/php-fpm.conf
user = www //設置php-fpm運行帳號爲www
group = www //設置php-fpm運行組爲www
pid = run/php-fpm.pid //取消前面的分號
設置 php-fpm開機啓動
[root@Zabbix-server php-5.4.5]# cp /usr/local/src/php-5.4.5/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@Zabbix-server php-5.4.5]# chmod +x /etc/rc.d/init.d/php-fpm
[root@Zabbix-server php-5.4.5]# chkconfig php-fpm on
[root@Zabbix-server php-5.4.5]# vim /usr/local/php5/etc/php.ini
找到:
disable_functions =
修改成:
disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
//列出PHP能夠禁用的函數,若是某些程序須要用到這個函數,能夠刪除,取消禁用。
找到:
;date.timezone =
修改成:
date.timezone = PRC //設置時區
找到:
expose_php = On
修改成:
expose_php = OFF //禁止顯示php版本的信息
找到:
short_open_tag = Off
修改成:
short_open_tag = ON //支持php短標籤
d)配置nginx支持php
[root@Zabbix-server ~]# vim /usr/local/nginx/conf/nginx.conf
user www www;
index index.php index.html index.htm;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#取消FastCGI server部分location的註釋,並要注意fastcgi_param行的參數,改成
$document_root$fastcgi_script_name,或者使用絕對路徑
[root@Zabbix-server ~]# pkill -9 ningx
[root@Zabbix-server ~]# /usr/local/nginx/sbin/nginx
e)測試篇
[root@Zabbix-server ~]# cd /usr/local/nginx/html/
[root@Zabbix-server html]# rm -rf /usr/local/nginx/html/*
[root@Zabbix-server html]# vim index.php
<?php
phpinfo();
?>
[root@Zabbix-server ~]#chown www.www /usr/local/nginx/html/ -R
[root@Zabbix-server ~]#chmod 700 /usr/local/nginx/html/ -R
在瀏覽器中輸入服務器IP地址,會看到php界面到此,LNMP環境部署完成!