一、Linux下開源監控系統簡單介紹
1)cacti:儲存資料能力強,報警效能差
2)nagios:報警效能差,儲存資料僅有簡單的一段可以判斷是否在合理範圍內的資料長度,儲存在記憶體中。比如,連續取樣資料儲存,有連續三次不在合理範圍內的資料就報警
3)zabbix:結合上面兩種工具的優點,又可以儲存資料,又可以報警。
Zabbix是一個基於Web介面提供分散式系統監視及網路監視功能的企業級開源解決方案。藉助Zabbix可很輕鬆地減輕運維人員們繁重的伺服器管理任務,實現業務系統持續執行。
下面會逐步介紹Zabbix分散式監控系統的部署及使用記錄
二、zabbix特性
1)資料取樣:通過snmp、ssh、telnet、agent、ipmi、jmx等通道採集被監控主機的資料。可以自定義檢測機制和自定義時間間隔
2)實時繪圖:展示,讀取資料繪圖,支援graph,map,screen,幻燈片(slide show)
3)告警:(升級告警,規定時間內內解決不了的事情往上傳)
4)資料儲存:資料庫有mysql,pgsql,時間序列資料庫等等
三、程式構成
1)zabbix_server:服務端守護程式
2)zabbix_agented:agent端守護程式
3)zabbix_proxy:代理伺服器(可選,分散式才用到)
4)zabbix_get:命令列工具,手動測試資料採集
5)zabbix_sender:命令列工具,執行於agent端,手動向server端傳送資料
6)zabbixjavagateway:java閘道器
Zabbix的監控流程可以簡單描述為:
資料採集-->資料儲存-->資料分析-->資料展示-->監控報警
其中:
資料採集:Zabbix通過SNMP、Agent、ICMP、SSH、IPMI等進行資料採集
資料儲存:Zabbix儲存在MySQL上,也可以儲存在其他資料庫
資料展示:web介面展示、(移動APP、java_php開發一個web介面也可以)
資料包警:郵件報警、微信報警、簡訊報警、報警升級機制
Zabbix的監控配置流程可以簡單描述為:
告警是由一系列的流程組成,首先是觸發器達到閥值,產生一個事件,接下來由Action對事件資訊進行處理,其中包括兩部分:
第一部分是傳送訊息,即將告警資訊傳送給使用者。
第二部分是執行命令,即將事件用命令進行處理,達到對事件故障自動嘗試恢復的效果。
Host groups(主機組)-->Hosts(主機)-->template(模板)-->Applications(監控項組)-->Items(監控項)-->graph(圖形) -->screen (圖形分組)-->Triggers(觸發器)-->Event(事件)-->Actions(處理動作)-->Media types(告警升級|1.執行遠端命令2.傳送告警郵件)-->User groups(使用者組)-->Users(使用者)-->Medias(告警郵件)
在實際生產使用的時候,Items、Trigger、Graph採用模板來進行監控,模板特點就是可以重複的事情一次完成,修改了模板等於修改了所有呼叫此模板的主機,這樣可解放運維的雙手.
Graph不是必需的,因為沒有配置圖形,資料獲取並不影響,獲取資料是Items的功能。但是對於使用ZabbixWeb介面使用者來說,沒有圖形等於沒有資料,因此重要的Items必須新增必要的圖形以做視覺化展示。如果想集中檢視圖形,可以通過screen功能。
四、zabbix主動模式和被動模式
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)型別的監控項。
一般情況下,主動和被動這兩種模式都用,兩行內容都配置上。
五、基礎環境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環境部署完成!