Zabbix監控系統部署
那我們今天就開始研究Zabbix。使用Zabbix的目的,是為了能夠更好的監控服務器,並且能夠生成圖形報表,雖然Nagios也能夠生成圖形報表,但沒有Zabbix這麽強大。
一、Zabbix的介紹
1、Zabbix簡介
Zabbix是一個提供Web管理界面的企業級的開源系統/網絡監控分布式監控解決方案,由一個國外的團隊持續維護更新,軟件可以自由下載使用,運作團隊靠提供收費的技術支持盈利。
官方網站:https://www.zabbix.com/
Zabbix由Zabbix Server與可選組件Zabbix Agent兩部分組成,Zabbix通過 C/S 模式采集數據,通過 B/S 模式在 web 端展示和配置。
Zabbix Agent端:主機通過安裝Agent方式采集數據,網絡設備通過SNMP方式采集數據。
Zabbix Serve端:通過SNMP、Zabbix Agent、ping、端口監視等方法提供對遠程服務器/網絡狀態的監視,將采集的數據寫入到MySQL數據庫中;再通過PHP+Apache在Web前端展示;最後對其進行分析整理,達到條件觸發告警。
2、Zabbix特點
- 安裝與配置簡單,學習成本低
- 支持多語言(包括中文
- 免費開源
- 自動發現服務器與網絡設備
- 分布式監視以及WEB集中管理功能
- 可以無agent監視
- 用戶安全認證和柔軟的授權方式
- 通過WEB界面設置或查看監視結果
- Email、SMS等報警通知功能
3、Zabbix功能
具備常見的商業監控軟件所具備的功能(主機的性能監控、網絡設備性能監控、數據庫性能監控、FTP 等通用協議監控、多種告警方式、詳細的報表圖表繪制)。
- 支持自動發現網絡設備和服務器(可以通過配置自動發現服務器規則來實現)。
- 支持分布式,能集中展示、管理分布式的監控點,擴展性強。
- 數據收集:支持 SNMP(包括 trapping and polling)、IPMI、JMX、SSH、TELNET。
- 自定義的檢測:自定義收集數據的頻率。
- 靈活的觸發器:可以定義非常靈活的問題閾值,稱為觸發器。
- 高可定制的報警:發送通知,可定制的報警升級,收件人,媒體類型。
- 監控:CPU負荷、內存使用、磁盤使用、網絡狀況、端口監視、日誌監視等等。
- 硬件監控:Zabbix IPMI Interface
- 系統監控:ZabbixAgent Interface
- Java監控:Zabbix JMX Interface
- 網絡設備監控:Zabbix SNMP Interface
- 應用服務監控:Zabbix Agent UserParameter
- MySQL數據庫監控:percona-monitoring-plulgins
- URL監控:Zabbix Web 監控
- Server:提供通用接口(API功能),可以自己開發完善各類監控(根據相關接口編寫程序實現),編寫插件容易,可以自定義監控項,報警級別的設置。
4、Zabbix架構圖
Zabbix 支持多種網絡方式下的監控,可通過分布式的方式部署和安裝監控代理,整個架構下所示。
監控系統運行大概的流程如下:
Agentd需要安裝到被監控的主機上,它負責定期收集各項數據,並發送到Zabbix Server端,Zabbix Server將數據存儲到數據庫中,Zabbix Web根據數據在前端進行展現和繪圖。這裏Agentd收集數據分為主動和被動兩種模式:
- 主動模式:Agent請求Server獲取主動的監控項列表,並主動將監控項內需要檢測的數據提交給Server/Proxy
- 被動模式:Server向Agent請求獲取監控項的數據,Agent返回數據。
Aabbix常用的監控架構平臺:
- Server-Agentd模式:這個是最簡單的架構了,常用於監控主機比較少的情況下。
- Server-Proxy-Agentd模式:這個常用於比較多的機器,使用Proxy進行分布式監控,有效的減輕Server端的壓力。
5、Zabbix運行條件
- Server:指安裝在Zabbix服務的服務器(以下簡稱服務器端)上,Zabbix Server 需運行在 LAMP(Linux+Apache+Mysql+PHP)的環境下(或者LNMP),對硬件要求低。
- Agent:指安裝在被監控設備上的 Zabbix 代理(以下簡稱代理端),被監控設備上的數據由代理收集後統一上傳到服務器端由服務器端收集、整理並呈現。
- SNMP:也是 Agent 的一種,指支持 SNMP 協議的設備(也可以是服務器),通過設定 SNMP 的參數將相關監控數據傳送至服務器端(大部份的交換機、防火墻等網絡設備都支持 SNMP 協議)。
- IPMI:Agent 的另一種方式,主要應用於設備的物理性能監控,例如設備的溫度、風扇的轉速等。
二、系統環境
系統環境: CentOS 7.3
Web環境:Apache(Nginx) + MySQL + PHP(傳送門LAMP、LNMP搭建)
Zabbix Server: 192.168.8.55
Zabbix Agent: 192.168.8.66
# 寫hosts記錄(Server和Agent)
[root@Server ~]# echo "192.168.8.55 Server" >> /etc/hosts
[root@Server ~]# echo "192.168.8.66 Agent" >> /etc/hosts
# 關閉firewalld和selinux(Server和Agent)
[root@Server ~]# systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
# 關閉selinux(Server和Agent)
[root@Server ~]# setenforce 0
[root@Server ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘ /etc/selinux/config
三、搭建LAMP環境
Zabbix Server和Zabbix Agent都搭建好LAMP環境(本文以LAMP為例)。
搭建LAMP環境網址:http://blog.51cto.com/13525470/2118643
搭建LNMP環境網址:http://blog.51cto.com/13525470/2117048
編譯安裝完成後再測試Web能否訪問PHP頁面
先添加PHP頁面
[root@Server ~]# vim /web/index.php
<?php
phpinfo();
?>
再查看是否有該進程
[root@Server ~]# netstat -anlp | grep :80
tcp6 0 0 :::80 :::* LISTEN 62265/httpd
在瀏覽器中訪問測試:是否能看到PHP頁面
http://192.168.8.55/
四、安裝Zabbix-3.4.8服務端
1、修改PHP配置文件參數
安裝Zabbix前,需要先配置PHP,否則安裝不上
[root@Server ~]# vim /usr/local/php/etc/php.ini
# 修改以下參數
665 post_max_size = 16M
378 max_execution_time = 300
388 max_input_time = 300
932 date.timezone = Asia/Shanghai
# 重啟Apache服務
[root@Server ~]# systemctl restart apache.service
2、創建用戶賬戶
對於所有的Zabbix守護進程,都需要一個非特權用戶。如果Zabbix守護進程從非特權用戶帳戶啟動,它將以該用戶身份運行。
[root@Server ~]# groupadd zabbix
[root@Server ~]# useradd -g zabbix -s /sbin/nologin zabbix
3、安裝Zabbix依賴包
[root@Server ~]# yum -y install net-snmp-devel libevent libevent-devel libcurl-devel
[root@Server ~]# wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
[root@Server ~]# tar zxvf libevent-2.1.8-stable.tar.gz -C /usr/src/
[root@Server ~]# cd /usr/src/libevent-2.1.8-stable/
[root@Server libevent-2.1.8-stable]# ./configure
[root@Server libevent-2.1.8-stable]# make && make install
4、編譯安裝Zabbix包
# 下載
[root@Server ~]# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.8/zabbix-3.4.8.tar.gz/download
# 解壓
[root@Server ~]# tar zxvf zabbix-3.4.8.tar.gz -C /usr/src/
[root@Server ~]# cd /usr/src/zabbix-3.4.8/
# 查看所有受支持的配置選項
[root@Server zabbix-3.4.8]# ./configure –help
# 編譯安裝
[root@Server zabbix-3.4.8]# ./configure --prefix=/usr/local/zabbix --with-mysql=/usr/local/mysql57/bin/mysql_config --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy
[root@Server zabbix-3.4.8]# make
[root@Server zabbix-3.4.8]# make install
**configure編譯配置參數說明:**
--prefix # 指定安裝路徑
--with-mysql # 指定本機數據庫路徑
--with-net-snmp # 開啟snmp協議采集功能(備:snmp用於采集網絡設備:如交換機,路由器,防火墻)
--with-libcurl # 開啟鏈接監控功能
--enable-server # 開啟服務端
--enable-agent # 開啟代理端
--enable-proxy # 開啟數據代理收集端
5、修改Zabbix配置文件
Zabbix的配置文件在/usr/local/zabbix/etc/目錄,有如下三個:
- zabbix_server.conf 負責服務器端的設定
- zabbix_agent.conf 用來設置客戶端代理參數
- zabbix_proxy.conf 用來設定分布式的部署
修改Zabbix的zabbix_server.conf配置文件,添加Zabbix數據庫密碼
[root@Server ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
# 修改以下內容
38 LogFile=/var/log/zabbix/zabbix_server.log # 指定zabbix日誌文件
68 PidFile=/var/run/zabbix/zabbix_server.pid # 指定zabbix的pid文件
85 DBHost=localhost # 指定登陸數據庫的地址
95 DBName=zabbix # 指定數據庫名稱
111 DBUser=zabbix # 指定登陸數據庫的用戶名
119 DBPassword=123456 # 指定登陸數據庫密碼(自定義)
126 DBSocket=/var/lib/mysql57/mysql57.socket # 指定連接數據庫的socket文件
134 DBPort=3306 # 指定連接數據庫的端口
# 根據需求,可對如下參數進行設置
158 # StartPollers=5 # 輪詢的初始值(0-1000)
167 # StartIPMIPollers=0 # IPMI輪詢的初始值(0-1000)
186 # StartPollersUnreachable=1 # 輪詢不可達的主機數(包括IPMI 0-1000)
197 # StartTrappers=5 # 捕獲的初始值(0-1000)
205 # StartPingers=1 # ping的初始值(0-1000)
213 # StartDiscoverers=1 # 自動發現的初始值(0-250)
377 # CacheSize=8M # 緩存大小
385 # CacheUpdateFrequency=60 # 緩存更新的頻率
393 # StartDBSyncers=4 # 數據庫同步時間
420 # TrendCacheSize=4M # 總趨勢緩存大小
480 # AlertScriptsPath=${datadir}/zabbix/alertscripts # 腳本的存放位置
524 LogSlowQueries=3000 # 日誌慢查詢設定
驗證配置是否正確
[root@Server ~]# cat /usr/local/zabbix/etc/zabbix_server.conf |grep -v "#" |grep -v ^$
LogFile=/var/log/zabbix/zabbix_server.log
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123456
DBSocket=/var/lib/mysql57/mysql57.socket
DBPort=3306
Timeout=4
LogSlowQueries=3000
# 創建、修改相關文件權限
[root@Server ~]# mkdir -p /var/log/zabbix/ /var/run/zabbix
[root@Server ~]# chown -R zabbix.zabbix /var/log/zabbix /var/run/zabbix
6、創建、導入Zabbix數據庫
(1)創建Zabbix數據庫
# 登陸MySQL數據庫
[root@Server ~]# /usr/local/mysql57/bin/mysql -uroot -p123
# 創建zabbix數據庫,並指定字符集為utf8
mysql> create database zabbix default charset utf8;
Query OK, 1 row affected (0.00 sec)
# 添加zabbix_user用戶並指定使用zabbix庫
mysql> grant all on zabbix.* to zabbix@‘localhost‘ identified by ‘123456‘;
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> grant all on zabbix.* to zabbix@‘192.168.8.55‘ identified by ‘1233456‘;
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 完成執行刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)
# 退出
mysql> quit
Bye
(2)導入Zabbix數據庫
[root@Server ~]# cd /usr/src/zabbix-3.4.8/
[root@Server zabbix-3.4.8]# /usr/local/mysql57/bin/mysql -uroot -p123 < database/mysql/schema.sql zabbix;
[root@Server zabbix-3.4.8]# /usr/local/mysql57/bin/mysql -uroot -p123 < database/mysql/ zabbix;
[root@Server zabbix-3.4.8]# /usr/local/mysql57/bin/mysql -uroot -p123 < database/mysql/data.sql zabbix;
7、配置Web站點
添加Zabbix安裝文件到httpd家目錄,用於安裝Zabbix
[root@Server ~]# cd /usr/src/zabbix-3.4.8/frontends/
[root@Server frontends]# cp -rf ./php /web/ # 復制php目錄到/web目錄下(php目錄是zabbix系統的操作界面)
[root@Server ~]# mv /web/php/ /web/zabbix # 將php目錄改名為zabbix
[root@Server ~]# chown -R zabbix:zabbix /web/zabbix # 更改所屬用戶為zabbix
[root@Server ~]# chmod 757 -R /web/zabbix # 將權限改為757
8、啟動Zabbix服務端
啟動Zabbxi服務端命令:
[root@Server ~]# /usr/local/zabbix/sbin/zabbix_server
關閉Zabbix,需要用ps -ef | grep zabbix 查出來,然後用kill -9 殺死
Zabbix服務端默認端口是10051,代理端默認端口是10050
使用:netstat -anlp | grep 10051 查看是否有10051端口
如果沒有則啟動失敗,此時需要去看日誌
日誌位置:/var/log/zabbix/zabbix_server.log
錯誤一:
/usr/local/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
# 解決方法
[root@Server ~]# echo "/usr/local/mysql56/lib" >>/etc/ld.so.conf
[root@Server ~]# ldconfig
錯誤二:
/usr/local/zabbix/sbin/zabbix_server: error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory
# 解決方法
[root@Server ~]# echo "/usr/local/lib" >>/etc/ld.so.conf
[root@Server ~]# ldconfig
啟動成功過後,在瀏覽器中訪問測試:
http://192.168.8.55/zabbix
哇!一看全是英文的,那我們可以把它設置為中文界面。
嗯,這樣看著就比較舒服了!
五、安裝Zabbix-3.4.8服務代理端
1、編譯安裝Zabbix包
# 下載
[root@Agent ~]# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.8/zabbix-3.4.8.tar.gz/download
# 解壓
[root@Server ~]# tar zxvf zabbix-3.4.8.tar.gz -C /usr/src/
[root@Server ~]# cd /usr/src/zabbix-3.4.8/
# 編譯安裝(因為這臺是代理端,所以在編譯時指定為代理 --enable-agent)
[root@Agent zabbix-3.4.8]# ./configure --prefix=/usr/local/zabbix/ --enable-agent
[root@Agent zabbix-3.4.8]# make && make install
2、修改Agentd配置文件
[root@Agent ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
# 修改以下內容
11 PidFile=/var/run/zabbix/zabbix_agentd.pid # 指定進程pid記錄文件
30 LogFile=/var/log/zabbix/zabbix_agentd.log # 指定日誌記錄
93 Server=192.168.8.55 # 被動模式下,連接Zabbix服務器的IP
134 ServerActive=192.168.8.55 # 主動模式下,連接Zabbix服務器的IP
145 Hostname=192.168.8.66 # 代理端的本機的IP(被監控機)
說明:
Server和ServerActive都指定Zabbix Server的IP地址,不同的是,前者是被動後者是主動。也就是說Server這個配置是用來允許192.168.8.55這個IP來我這取數據。而serverActive的192.168.8.55的意思是,代理端主動提交數據給它。
3、啟動Zabbix代理端
# 創建用戶
[root@Agent ~]# groupadd zabbix
[root@Agent ~]# useradd -g zabbix -s /sbin/nologin zabbix
# 創建、修改相關文件權限
[root@Agent ~]# mkdir -p /var/run/zabbix /var/log/zabbix
[root@Agent ~]# chown -R zabbix.zabbix /var/run/zabbix /var/log/zabbix
# 啟動Zabbxi代理端
[root@Agent ~]# /usr/local/zabbix/sbin/zabbix_agentd
# 查詢10050端口有沒有被監聽
[root@Agent ~]# lsof -i:10050
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 97087 zabbix 4u IPv4 673478 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 97088 zabbix 4u IPv4 673478 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 97089 zabbix 4u IPv4 673478 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 97090 zabbix 4u IPv4 673478 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 97091 zabbix 4u IPv4 673478 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 97092 zabbix 4u IPv4 673478 0t0 TCP *:zabbix-agent (LISTEN)
關閉Zabbix,需要用ps -ef | grep zabbix 查出來,然後用kill -9 殺死
Zabbix服務端默認端口是10051,代理端默認端口是10050
使用:netstat -anlp | grep 10050 查看是否有10050端口
如果沒有則啟動失敗,此時需要去看日誌
日誌位置:/var/log/zabbix/zabbix_agentd.log
至此,Zabbix安裝圖解教程完成。
Zabbix監控系統部署