監控對於運維來講,至關重要,能夠稱爲是運維人員的眼。一個良好的監控系統能夠幫助運維人員快速的找到問題的根源,減小宕機的時間,提升故障處理速度。由此就看能夠看出,身爲運維人員,掌握常見的監控軟件的使用是最基本的技能之一。php
Zabbix是一個基於web界面的提供分佈式系統監控以及網絡監控功能的企業級開源運維平臺,也是目前國內互聯網後用戶中使用最廣的監控軟件,大概85%以上企業在使用zabbix作監控解決方案。Zabbix的入門容易、上手簡單,功能強大而且開源免費,zabbix易於管理和配置,能生成比較漂亮的數據圖,其自動發現功能大大減輕平常管理的工做量,豐富的數據採集方式和API接口可讓用戶靈活進行數據採集,而分佈式系統架構能夠支持監控更多的設備,理論上,經過zabbix提供的插件式架構,能夠知足企業的任何需求(部分插件功能會收費)。html
常見的監控工具備:Zabbix、nagios、cacti,本次博文只簡單介紹這三種,各自的優、缺點以下:前端
優勢:java
- 1)支持多平臺的企業級分佈式開源監控軟件(redhat、centos、Ubuntu、Debian);
- 2)安裝部署簡單,多種數據採集插件靈活集成;
- 3)功能強大、可實現複雜多條件告警;
- 4)自帶畫圖功能,獲得的數據能夠繪製成圖形,以圖像更直觀的展現;
- 5)提供多種api接口,支持調用腳本;
- 6)出現問題時能夠自動遠程執行命令(須要agent設置執行權限);
缺點:- 1)項目批量修改不方便;
- 2)系統級別報警設置相對比較多,若是篩選的話報警郵件比較多,而且自定義的項目須要本身設置,過程比較繁瑣(能夠去網上導入別人模板來進行修改);
- 3)缺乏數據彙總功能,若是沒法查看一組服務器平均值,須要二次開發;
- 4)客戶端須要安裝zabbix agent程序;
Ngios 是一款開源的企業級監控系統,可以實現對系統cou、磁盤、網絡等硬件方面參數的基本監控,以及smtp、pop3等各類基本的服務類型,另外經過安裝插件和編寫監控腳本,用戶能夠實現應用監控(功能比zabbix弱)node
優勢:mysql
- 1)出錯的服務器、應用和設備會自動重啓,自動日誌滾動;
- 2)配置靈活,能夠自定義shell腳本,經過分佈式監控模式;
- 3)支持以冗餘方式進行主機監控,報警設置多樣;
- 4)命令從新加載配置文件無需打擾Nagios的運行;
缺點:- 1)事件控制檯功能很弱,插件易用性差;
- 2)對性能、流量等指標的處理不給力;
- 3)看不到歷史數據,只能看到報警事件,很難追查故障緣由;
- 4)配置複雜,初學者投入的時間、精力和成本比較大;
因爲Zabbix的出現,這種技術已經被淘汰了,可能對於工做時間較久的會有所瞭解,這也就很少介紹了!linux
Zabbix具備如下功能:ios
- 1)具有常見的商業監控軟件所具有的功能(主機的性能監控、網絡設備性能監控、數據庫、性能監控、FTP 等通用協議監控、多種告警方式、詳細的報表圖表繪製);
- 2)支持自動發現網絡設備和服務器(能夠經過配置自動發現服務器規則來實現);
- 3)支持自動發現(low discovery)key 實現動態監控項的批量監控(需寫腳本);
- 4)支持分佈式,能集中展現、管理分佈式的監控點 ;
- 5)擴展性強,server 提供通用接口(api 功能),能夠本身開發完善各種監控(根據相關接口編寫程序實現)編寫插件容易,能夠自定義監控項,報警級別的設置;
- 6)服務器/代理和客戶端模式; 靈活的觸發器;能夠定義很是靈活的問題閾值,稱爲觸發器; 高可定製的報警;發送通知,可定製的報警升級,收件人,媒體類型。 CPU 負荷、內存使用、磁盤使用、網絡情況、端口監視、日誌監視等等;
Zabbix經過c/s模式採集數據,經過b/s模式在web端展現和配置。nginx
被控制端:主機經過安裝agent方式採集數據,網絡設備經過snmp方式採集數據;
Server端:經過收集snmp和agent發送的數據,寫入數據庫,再經過php+nginx(或者apache)在web前端顯示;web
zabbix主要由如下幾個重要的組件構成,具體做用以下:
- Zabbix Server:負責接收Agent發送報告信息的核心組件,全部的配置、數據統計、數據操做都由它組織進行;
- Database strongage:負責存儲全部的配置信息以及收集的數據;
- Web interface:是zabbix的GUI接口,一般狀況下與Zabbix Server運行在同一臺主機上;
- Proxy:屬於可選組件,經常使用於分佈式監控環境中,代理Server收集部分數據,而後轉發到Server,能夠減輕Server的壓力;
- Agent:部署在被監控的主機(客戶端)上,負責收集被監控端主機的數據,如CPU、內存、數據庫等數據,而後發送到Server端或Proxy端。
1)Agent須要安裝到被監控的主機上,她負責按期收集各項數據併發送到zabbix server 端;
2)zabbix server將數據存儲到數據庫中,zabbix web根據數據在前端進行展示和繪圖;
agent收集數據分爲主動和被動兩種模式:
主動:agent請求server獲取主動的監控項列表,並主動將監控向內檢測的數據提交給server/proxy;
被動:server向agent請求獲取監控項的數據,agent返回數據;
被動:比較消耗性能。
在被動模式中,zabbix server(或者proxy)詢問agent數據,如CPU的負載狀況,而後zabbix agent回送結果,zabbix server週期性的向agent 索取數據,這種模式的最大問題就是會加大zabbix server的工做量,也是默認的工做模式。
主動:效率高,但數據可能缺失。
主動模式是由zabbix agent主動採集數據並返回給zabbix server,再也不須要zabbix serve進行干預, 所以主動模式在必定程度上可減輕zabbix server的壓力。
在實際生產環境中,Zabbix根據網絡環境,監控規模等外界因素分爲三種架構,如圖:
server-client架構是Zabbix的最簡單的架構,監控機和被監控機之間不通過任何代理,直接在zabbix server和zabbix agentd之間進行數據交互,適用於網絡比較簡單,設備比較少的監控環境;
master-node-client架構是Zabbix最複雜的監控架構,適用於跨網絡、跨機房、設備較多的大型環境。每一個node同時也是一個server端。node下面能夠接proxy,也能夠直接接client。node有本身的配置文件和數據庫。其要作的是將配置信息和監控數據項master同步。當master發生故障或損壞,node能夠保證架構的完整性;
proxy是server、client之間溝通的一個橋樑,proxy自己沒有前端,並且其自己並不存放數據,只是將agentd發來的數據暫時存放,然後在提交給server。該架構常常是和master-node-client架構作比較的架構,通常適用於跨機房、跨網絡的中型網絡架構的監控;
因爲部署Zabbix須要使用到LNMP的環境,因此需事先部署。關於其部署詳細工程,能夠參考搭建LNMP,接下來關於LNMP命令的解釋就再也不詳細解釋了!
下載nginx軟件包
[root@zabbix ~]# yum -y install pcre-devel openssl-devel zlib-devel [root@zabbix ~]# tar zxf nginx-1.14.0.tar.gz && cd nginx-1.14.0 [root@zabbix nginx-1.14.0]# ./configure && make && make install //因爲只是使用nginx提供簡單的web頁面啓動便可! [root@zabbix ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //建立符號連接,稍後啓動
下載PHP軟件包
[root@zabbix ~]# yum -y install freetype-devel libpng-devel libjpeg-devel libxml2-devel bzip2-devel libcurl-devel //安裝php所需依賴 [root@zabbix ~]# tar zxf libmcrypt-2.5.7.tar.gz && cd libmcrypt-2.5.7 [root@zabbix libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install //安裝libmcrypt [root@zabbix ~]# tar zxf php-5.6.27.tar.gz && cd php-5.6.27 [root@zabbix php-5.6.27]# ./configure --prefix=/usr/local/php5.6 \ --with-config-file-path=/etc --with-mysql=/usr/local/mysql \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --with-mysql-sock=/usr/local/mysql/mysql.sock \ --with-gd --with-iconv --with-libxml-dir=/usr --with-mhash --with-mcrypt=/usr/local/libmcrypt \ --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-zlib \ --with-freetype-dir --with-png-dir --with-jpeg-dir --enable-xml \ --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization \ --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-curl && make && make install //編譯安裝php [root@zabbix ~]# cp /root/php-5.6.27/php.ini-production /etc/php.ini [root@zabbix ~]# cp /root/php-5.6.27/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@zabbix ~]# chmod +x /etc/init.d/php-fpm [root@zabbix ~]# chkconfig --add php-fpm [root@zabbix ~]# cd /usr/local/php5.6/etc [root@zabbix etc]# cp php-fpm.conf.default php-fpm.conf [root@zabbix etc]# sed -i 's#;pid = run/php-fpm.pid#pid = run/php-fpm.pid#g' php-fpm.conf [root@zabbix etc]# sed -i 's/listen = 127.0.0.1:9000/listen = 0.0.0.0:9000/g' php-fpm.conf [root@zabbix etc]# sed -i 's/pm.max_children = 5/pm.max_children = 50/g' php-fpm.conf [root@zabbix etc]# sed -i 's/pm.start_servers = 2/pm.start_servers = 5/g' php-fpm.conf [root@zabbix etc]# sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 5/g' php-fpm.conf [root@zabbix etc]# sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 35/g' php-fpm.conf [root@zabbix etc]# systemctl start php-fpm [root@zabbix etc]# ss -lnt | grep 9000 LISTEN 0 128 *:9000 *:* //保證PHP啓動成功
[root@zabbix ~]# vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi.conf; //修改這一行便可 } [root@zabbix ~]# echo -e "<?php\nphpinfo();\n?>" > /usr/local/nginx/html/index.php [root@zabbix ~]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@zabbix ~]# nginx
訪問測試;
下載mysql數據庫軟件提供的是一鍵安裝mysql的腳本進行安裝的,直接執行腳本便可!
[root@zabbix ~]# ls | grep mysql mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz mysql.sh [root@zabbix ~]# sh mysql.sh //安裝完成後,數據庫用戶root的密碼爲123
這裏就先不測試PHP與mysql的連接性了,對本身搭建的LNMP有信心!
[root@zabbix ~]# tar zxf fping-3.12.tar.gz && cd fping-3.12 [root@zabbix fping-3.12]# ./configure && make && make install //編譯安裝fping,使Zabbix支持自動發現功能 [root@zabbix fping-3.12]# groupadd zabbix [root@zabbix fping-3.12]# useradd zabbix -M -g zabbix [root@zabbix fping-3.12]# chown zabbix:zabbix /usr/local/sbin/fping //建立zabbix用戶使其可使用fping命令 [root@zabbix ~]# yum -y install net-snmp net-snmp-devel curl-devel OpenIPMI-devel libssh2-devel java-devel //安裝zabbix所需依賴 [root@zabbix ~]# tar zxf zabbix-3.2.1.tar.gz && cd zabbix-3.2.1 [root@zabbix zabbix-3.2.1]# ./configure --prefix=/usr/local/zabbix --enable-server \ --enable-agent --enable-java --with-mysql=/usr/local/mysql/bin/mysql_config \ --with-net-snmp --with-libcurl --with-openipmi && make && make install //--enable-java:便於往後監控tomcat程序使用; //--with-openipmi:使其能夠監控設備的硬件信息 [root@zabbix ~]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/ [root@zabbix ~]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/ //爲zabbix經常使用命令建立符號鏈接 [root@zabbix ~]# mysql -u root -p123 mysql> create database zabbix character set utf8; mysql> grant all privileges on zabbix.* to 'zabbix'@'192.168.1.%' identified by '123.com'; //建立zabbix數據庫及用戶 [root@zabbix ~]# cd /root/zabbix-3.2.1/database/mysql/ [root@zabbix mysql]# mysql -uzabbix -p123.com -h 192.168.1.8 zabbix < schema.sql [root@zabbix mysql]# mysql -uzabbix -p123.com zabbix -h 192.168.1.8 < images.sql [root@zabbix mysql]# mysql -uzabbix -p123.com zabbix -h 192.168.1.8 < data.sql //進入相應的目錄導入相應的數據庫文件 //切記需按照順序導入,不然可能會出現意外 [root@zabbix mysql]# cd /usr/local/zabbix/etc [root@zabbix etc]# egrep -v '^#|^$' zabbix_server.conf LogFile=/tmp/zabbix_server.log PidFile=/tmp/zabbix_server.pid DBHost=192.168.1.8 DBName=zabbix DBUser=zabbix DBPassword=123.com DBPort=3306 Timeout=4 FpingLocation=/usr/sbin/fping //fping(自動發現)文件路徑 LogSlowQueries=3000 //以上是修改完成的配置文件 [root@zabbix etc]# find / -name libmysqlclient.so /usr/local/mysql/lib/libmysqlclient.so [root@zabbix etc]# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf //添加libmysqlclinet的接口文件路徑 [root@zabbix etc]# ldconfig //主要是在默認搜尋目錄/lib和/usr/lib以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態連接庫(格式如lib*.so*),進而建立出動態裝入程序(ld.so)所需的鏈接和緩存文件。 [root@zabbix etc]# find / -name mysql.sock /usr/local/mysql/mysql.sock [root@zabbix etc]# ln -s /usr/local/mysql/mysql.sock /tmp/ //添加mysql.sock文件到tmp目錄下,不然會在啓動時會出現錯誤 [root@zabbix etc]# cd /root/zabbix-3.2.1/ [root@zabbix zabbix-3.2.1]# cp misc/init.d/fedora/core/zabbix_server /etc/init.d/ [root@zabbix zabbix-3.2.1]# chmod +x /etc/init.d/zabbix_server [root@zabbix zabbix-3.2.1]# sed -i "s#BASEDIR=/usr/local#BASEDIR=/usr/local/zabbix#g" /etc/rc.d/init.d/zabbix_server //將zabbix系統腳本中zabbix的安裝路徑進行更改 [root@zabbix zabbix-3.2.1]# systemctl daemon-reload [root@zabbix zabbix-3.2.1]# /etc/init.d/zabbix_server start Reloading systemd: [ 肯定 ] Starting zabbix_server (via systemctl): [ 肯定 ] [root@zabbix zabbix-3.2.1]# ss -lnt | grep 10051 LISTEN 0 128 *:10051 *:* //添加爲系統服務,並啓動,肯定其端口在監聽,默認是10051 //若是啓動失敗查看/tmp/zabbix_server.log這個日誌內容 [root@zabbix ~]# cp -r /root/zabbix-3.2.1/frontends/php/ /usr/local/nginx/html/zabbix //複製zabbix的網頁目錄到nginx網頁根目錄下 [root@zabbix ~]# ps -ef | grep php //根據查詢結果就能夠看出運行php程序的用戶是nobody [root@zabbix ~]# chown -R nobody:nobody /usr/local/nginx/html/zabbix/ //因此須要保證運行PHP的用戶對這個目錄有絕對的權限不然將沒法更改數據
客戶端訪問測試:
根據提示的警告信息修改php的配置文件
[root@zabbix ~]# sed -i 's/post_max_size = 8M/post_max_size = 16M/g' /etc/php.ini [root@zabbix ~]# sed -i 's/max_input_time = 60/max_input_time = 300/g' /etc/php.ini [root@zabbix ~]# sed -i 's/max_execution_time = 30/max_execution_time = 300/g' /etc/php.ini [root@zabbix ~]# echo -e "date.timezone = Asia/Shanghai" >> /etc/php.ini [root@zabbix ~]# echo -e "always_populate_raw_post_data = -1" >> /etc/php.ini [root@zabbix ~]# systemctl restart php-fpm //從新啓動php,使其加載配置文件
繼續訪問web頁面,如圖:
由此能夠看出界面已經變成了中文!
可是須要注意zabbix中文亂碼的問題,須要使用如下方法修改中文亂碼的問題!
[root@zabbix ~]# ls | grep SIMKAI.TTF SIMKAI.TTF [root@zabbix ~]# sed -i 's/DejaVuSans/simkai.ttf/g' /usr/local/nginx/html/zabbix/include/defines.inc.php [root@zabbix ~]# mv SIMKAI.TTF /usr/local/nginx/html/zabbix/fonts/simkai.ttf
若是不解決中文亂碼的問題,在後期工做中將會有很大的麻煩!
本次博文主要介紹如何搭建zabbix監控系統,在此先告一段落!
——————————本文到此結束,感謝閱讀————————————