1. zabbix介紹
zabbix是一個基於WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。
zabbix能監視各種網絡參數,保證服務器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。
zabbix由2部分構成,zabbix server與可選組件zabbix agent。
zabbix server可以通過SNMP,zabbix agent,ping,端口監視等方法提供對遠程服務器/網絡狀態的監視,數據收集等功能,它可以運行在Linux,Ubuntu,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
zabbix agent需要安裝在被監視的目標服務器上,它主要完成對硬件信息或與操作系統有關的內存,CPU等信息的收集。
zabbix server可以單獨監視遠程服務器的服務狀態;同時也可以與zabbix agent配合,可以輪詢zabbix agent主動接收監視數據(agent方式),同時還可被動接收zabbix agent發送的數據(trapping方式)。
另外zabbix server還支持SNMP (v1,v2),可以與SNMP軟件(例如:net-snmp)等配合使用。
2.什么是zabbix及優缺點(對比cacti和nagios)
Zabbix能監視各種網絡參數,保證服務器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。是一個基於WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。
-
agent端:主機通過安裝agent方式采集數據。
-
server端:通過收集agent發送的數據,寫入數據庫(MySQL,ORACLE等),再通過php+apache在web前端展示.
-
zabbix = cacti + nagios
-
優點:基於兩款工具優點於一身並更強大,實現企業級分布式監控。
-
缺點:2.2版本帶寬占用大但是升級到2.4版本后更節省了帶寬資源,其它再無發現。
3. zabbix特點
zabbix的主要特點:
- 安裝與配置簡單,學習成本低
- 支持多語言(包括中文)
- 免費開源
- 自動發現服務器與網絡設備
- 分布式監視以及WEB集中管理功能
- 可以無agent監視
- 用戶安全認證和柔軟的授權方式
- 通過WEB界面設置或查看監視結果
- email等通知功能
Zabbix主要功能:
- CPU負荷
- 內存使用
- 磁盤使用
- 網絡狀況
- 端口監視
- 日志監視
4.工作原理
一個監控系統運行的大概的流程是這樣的:
zabbix agent需要安裝到被監控的主機上,它負責定期收集各項數據,並發送到zabbix server端,zabbix server將數據存儲到數據庫中,zabbix web根據數據在前端進行展現和繪圖。這里agent收集數據分為主動和被動兩種模式:
主動:agent請求server獲取主動的監控項列表,並主動將監控項內需要檢測的數據提交給server/proxy
被動:server向agent請求獲取監控項的數據,agent返回數據。
5.zabbix的組件及進程
1:重要組件
zabbix由以下幾個組件部分構成:
- Zabbix Server:負責接收agent發送的報告信息的核心組件,所有配置,統計數據及操作數據均由其組織進行;
- Database Storage:專用於存儲所有配置信息,以及由zabbix收集的數據;
- Web interface:zabbix的GUI接口,通常與Server運行在同一台主機上;
- Proxy:可選組件,常用於分布監控環境中,代理Server收集部分被監控端的監控數據並統一發往Server端;
- Agent:部署在被監控主機上,負責收集本地數據並發往Server端或Proxy端;
注:zabbix node也是 zabbix server的一種 。
2:常見進程
默認情況下zabbix包含5個程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一個zabbix_java_gateway是可選,這個需要另外安裝。下面來分別介紹下他們各自的作用。
(1)zabbix_agentd:
客戶端守護進程,此進程收集客戶端數據,例如cpu負載、內存、硬盤使用情況等。
(2)zabbix_get
zabbix工具,單獨使用的命令,通常在server或者proxy端執行獲取遠程客戶端信息的命令。通常用戶排錯。例如在server端獲取不到客戶端的內存數據,我們可以使用zabbix_get獲取客戶端的內容的方式來做故障排查。
(3)zabbix_sender
zabbix工具,用於發送數據給server或者proxy,通常用於耗時比較長的檢查。很多檢查非常耗時間,導致zabbix超時。於是我們在腳本執行完畢之后,使用sender主動提交數據。
(4)zabbix_server
zabbix服務端守護進程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的數據最終都是提交到server
備注:當然不是數據都是主動提交給zabbix_server,也有的是server主動去取數據。
(5)zabbix_proxy
zabbix代理守護進程。功能類似server,唯一不同的是它只是一個中轉站,它需要把收集到的數據提交/被提交到server里。為什么要用代理?代理是做什么的?賣個關子,請繼續關注運維生存時間zabbix教程系列。
(6)zabbix_java_gateway
zabbix2.0之后引入的一個功能。顧名思義:Java網關,類似agentd,但是只用於Java方面。需要特別注意的是,它只能主動去獲取數據,而不能被動獲取數據。它的數據最終會給到server或者proxy。
6.zabbix監控環境中基本概念
- 主機(host):要監控的網絡設備,可由IP或DNS名稱指定;
- 主機組(host group):主機的邏輯容器,可以包含主機和模板,但同一個組織內的主機和模板不能互相鏈接;主機組通常在給用戶或用戶組指派監控權限時使用;
- 監控項(item):一個特定監控指標的相關的數據;這些數據來自於被監控對象;item是zabbix進行數據收集的核心,相對某個監控對象,每個item都由"key"標識;
- 觸發器(trigger):一個表達式,用於評估某監控對象的特定item內接收到的數據是否在合理范圍內,也就是閾值;接收的數據量大於閾值時,觸發器狀態將從"OK"轉變為"Problem",當數據再次恢復到合理范圍,又轉變為"OK";
- 事件(event):觸發一個值得關注的事情,比如觸發器狀態轉變,新的agent或重新上線的agent的自動注冊等;
- 動作(action):指對於特定事件事先定義的處理方法,如發送通知,何時執行操作;
- 報警升級(escalation):發送警報或者執行遠程命令的自定義方案,如每隔5分鍾發送一次警報,共發送5次等;
- 媒介(media):發送通知的手段或者通道,如Email、Jabber或者SMS等;
- 通知(notification):通過選定的媒介向用戶發送的有關某事件的信息;
- 遠程命令(remote command):預定義的命令,可在被監控主機處於某特定條件下時自動執行;
- 模板(template):用於快速定義被監控主機的預設條目集合,通常包含了item、trigger、graph、screen、appication以及low-level discovery rule;模板可以直接鏈接至某個主機;
- 應用(application):一組item的集合;
- web場景(web scennario):用於檢測web站點可用性的一個活多個HTTP請求;
- 前端(frontend):Zabbix的web接口;
7.zabbix的監控架構
在實際監控架構中,zabbix根據網絡環境、監控規模等 分了三種架構: server-client 、master-node-client、server-proxy-client三種 。
1:server-client架構
也是zabbix的最簡單的架構,監控機和被監控機之間不經過任何代理 ,直接由zabbix server和zabbix agentd之間進行數據交互。適用於網絡比較簡單,設備比較少的監控環境 。
2:server-proxy-client架構
其中proxy是server、client之間溝通的一個橋梁,proxy本身沒有前端,而且其本身並不存放數據,只是將agentd發來的數據暫時存放,而后再提交給server 。該架構經常是和master-node-client架構做比較的架構 ,一般適用於跨機房、跨網絡的中型網絡架構的監控。
3:master-node-client架構
該架構是zabbix最復雜的監控架構,適用於跨網絡、跨機房、設備較多的大型環境 。每個node同時也是一個server端,node下面可以接proxy,也可以直接接client 。node有自已的配置文件和數據庫,其要做的是將配置信息和監控數據向master同步,master的故障或損壞對node其下架構的完整性。
其實zabbix做的還是挺人性化的,給了我們下載地址:http://repo.zabbix.com/ 里面可以選很多版本,但這里就給大家提供一個目前最新版本4.2的部署及添加客戶端方式。
8. zabbix配置文件
zabbix配置文件有兩種:
- 服務器端配置文件(/usr/local/etc/zabbix_server.conf)
- 客戶端配置文件(/usr/local/etc/zabbix_agentd.conf)
- zabbix代理配置文件(/usr/local/etc/zabbix_proxy.conf)
服務器端配置文件zabbix_server.conf常用配置參數:
| 參數 | 作用 |
|---|---|
| LogFile | 設置服務端日志文件存放路徑 |
| ListenIP | 設置服務端監聽IP |
| ListenPort | 設置服務端監聽的端口號 |
| PidFile | 設置服務端進程號文件存放路徑 |
| DBHost | 指定zabbix的數據庫服務器IP |
| DBName | 指定zabbix使用的數據庫庫名 |
| DBUser | 指定zabbix數據庫登錄用戶 |
| DBPassword | 指定zabbix數據庫登錄密碼 |
| DBPort | 指定zabbix數據庫端口號 |
| User | 設置zabbix以什么用戶的身份運行 |
| AlertScriptsPath | 設置告警腳本存放路徑 |
| ExternalScripts | 外部腳本存放路徑 |
客戶端配置文件zabbix_agentd.conf常用配置參數:
| 參數 | 作用 |
|---|---|
| Server | 指定zabbix服務器的IP或域名 |
| ServerActive | 指定zabbix服務器的IP或域名 |
| Hostname | 指定本機的主機名,此項必須與web界面配置項一致 |
| UnsafeUserParameters | 是否啟用自定義監控項,可選值為{1 | 0} |
| UserParameter | 指定自定義監控腳本參數 |
| LogFile | 設置客戶端日志文件存放路徑 |
9. 部署zabbix
環境說明:
| 環境 | IP | 要安裝的應用 |
|---|---|---|
| 服務器 | 192.168.163.128 | lamp架構 zabbix server zabbix agent |
| 客戶端 | 192.168.163.129 | zabbix agent |
因為zabbix是用php語言開發的,所以必須先部署lamp架構,使其能夠支持運行php網頁
9.1 zabbix服務端安裝
安裝依賴包
[root@cl ~]# yum -y install net-snmp-devel libevent-devel libxml2-devel curl-devel pcre*
下載zabbix
[root@cl ~]# cd /usr/src/
[root@cl src]# wget https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/4.2.1/zabbix-4.2.1.tar.gz
--2019-05-16 14:25:00-- https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/4.2.1/zabbix-4.2.1.tar.gz
正在解析主機 nchc.dl.sourceforge.net (nchc.dl.sourceforge.net)... 211.79.60.17, 2001:e10:ffff:1f02::17
正在連接 nchc.dl.sourceforge.net (nchc.dl.sourceforge.net)|211.79.60.17|:443... 已連接。
已發出 HTTP 請求,正在等待回應... 200 OK
長度:18284589 (17M) [application/x-gzip]
正在保存至: “zabbix-4.2.1.tar.gz”
[ <=> ] 16,789,873 327KB/s 用時 57s
2019-05-16 13:45:44 (287 KB/s) - “zabbix-4.2.1.tar.gz” 已保存 [16789873]
解壓
[root@cl src]# tar xf zabbix-4.2.1.tar.gz
創建zabbix用戶和組
[root@cl ~]# groupadd -r zabbix
[root@cl ~]# useradd -r -g zabbix -M -s /sbin/nologin zabbix
配置zabbix數據庫
[root@cl ~]# mysql -uroot -pjbgsn123!
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.22 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix123!';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@cl ~]# cd /usr/src/zabbix-4.2.1/database/mysql/
[root@cl mysql]# ls
data.sql images.sql Makefile.am Makefile.in schema.sql
[root@cl mysql]# mysql -uzabbix -pzabbix123! zabbix < schema.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@cl mysql]# mysql -uzabbix -pzabbix123! zabbix < images.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@cl mysql]# mysql -uzabbix -pzabbix123! zabbix < data.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
編譯安裝zabbix
[root@cl ~]# cd /usr/src/zabbix-4.2.1
[root@cl zabbix-4.2.1]# ./configure --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2
[root@cl zabbix-4.2.1]# make install
9.2 zabbix服務端配置
[root@cl ~]# ls /usr/local/etc/
zabbix_agentd.conf zabbix_agentd.conf.d zabbix_server.conf zabbix_server.conf.d
修改服務端配置文件
設置數據庫信息
[root@cl ~]# vim /usr/local/etc/zabbix_server.conf
....
DBPassword=cljhfy //設置zabbix數據庫連接密碼
啟動zabbix_server和zabbix_agentd
[root@cl ~]# zabbix_server
[root@cl ~]# zabbix_agentd
[root@cl ]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 *:10051 *:*
LISTEN 0 128 127.0.0.1:9000 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 80 :::3306 :::*
9.3 zabbix服務端web界面安裝與配置
9.3.1 zabbix web界面安裝前配置
修改/etc/php.ini的配置並重啟php-fpm
[root@cl ~]# sed -ri 's/(post_max_size =).*/\1 16M/g' /etc/php.ini
[root@cl ~]# sed -ri 's/(max_execution_time =).*/\1 300/g' /etc/php.ini
[root@cl ~]# sed -ri 's/(max_input_time =).*/\1 300/g' /etc/php.ini
[root@cl ~]# sed -i '/;date.timezone/a date.timezone = Asia/Shanghai' /etc/php.ini
[root@cl ~]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@cl ~]# cd /usr/src/zabbix-4.2.1
[root@cl zabbix-4.2.1]# ls
aclocal.m4 compile config.sub depcomp m4 misc src
AUTHORS conf configure frontends Makefile missing
bin config.guess configure.ac include Makefile.am NEWS
build config.log COPYING INSTALL Makefile.in README
ChangeLog config.status database install-sh man sass
[root@cl zabbix-4.2.1]# mkdir /usr/local/apache/htdocs/zabbix
[root@cl zabbix-4.2.1]# cp -a frontends/php/* /usr/local/apache/htdocs/zabbix/
[root@cl zabbix-4.2.1]# groupadd -r apache
[root@cl zabbix-4.2.1]# useradd -r -g apache -M -s /sbin/nologin apache
[root@cl zabbix-4.2.1]# chown -R apache.apache /usr/local/apache/htdocs
配置apache虛擬主機
[root@cl ~]# vim /etc/httpd/httpd.conf
在配置文件的末尾加如下內容
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/zabbix"
ServerName cljhfy.example.com
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/zabbix/$1
<Directory "/usr/local/apache/htdocs/zabbix">
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
設置zabbix/conf目錄的權限,讓zabbix有權限生成配置文件zabbix.conf.php
[root@cl ~]# chmod 777 /usr/local/apache/htdocs/zabbix/conf
[root@cl ~]# ll -d /usr/local/apache/htdocs/zabbix/conf
drwxrwsrwx 2 apache apache 81 4月 18 17:26 /usr/local/apache/htdocs/zabbix/conf
重啟apache
[root@cl ~]# apachectl -t
Syntax OK
[root@cl ~]# apachectl stop
[root@cl ~]# apachectl start
[root@cl ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 *:10051 *:*
LISTEN 0 128 127.0.0.1:9000 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 80 :::3306 :::*
9.3.2 安裝zabbix web界面
- 修改/etc/hosts文件,添加域名與IP的映射
- 在瀏覽器上訪問域名,本文設置的域名為cljhfy.example.com,你需要修改成你自己的域名
- 恢復zabbix/conf目錄的權限為755
在瀏覽器上訪問域名進行安裝:






恢復zabbix/conf目錄的權限為755:
[root@localhost ~]# chmod 755 /usr/local/apache/htdocs/zabbix/conf
[root@localhost ~]# ll -d /usr/local/apache/htdocs/zabbix/conf
drwxr-sr-x 2 apache apache 104 5月 16 15:21 /usr/local/apache/htdocs/zabbix/conf
9.4 登錄zabbix
zabbix默認登錄用戶名和密碼:
| 用戶名 | 密碼 |
|---|---|
| Admin | zabbix |

10.漢化zabbix
zabbix 自帶多種語言包,也包括中文。登陸zabbix web控制台默認是英文,可切換中文版本
1.默認登陸界面(英文版)

重命名字體名稱
將zabbix服務器正在使用字體備份
[root@cl ~]# mv /usr/local/apache/htdocs/zabbix/fonts/DejaVuSans.ttf{,.bak}
將剛剛上傳的字體替換
$ scp STXINWEI.TTF root@192.168.163.128:/usr/local/apache/htdocs/zabbix/fonts/DejaVuSans.ttf root@192.168.161.128's password: STXINWEI.TTF 100% 3956KB 1.3MB/s 00:03
點擊右上角小人圖標,切換語言



11.客戶端配置
安裝依賴包
[root@cl129 ~]# yum -y install net-snmp-devel libevent-devel libxml2-devel curl-devel pcre*
下載zabbix
[root@cl129 ~]# cd /usr/src/
[root@cl129 src]# scp 192.168.163.128:/usr/src/zabbix-4.2.1.tar.gz .
root@192.168.163.128's password:
zabbix-4.2.1.tar.gz 100% 17MB 61.7MB/s 00:00
[root@cl129 src]# tar xf zabbix-4.2.1.tar.gz
創建zabbix用戶和組
[root@cl129 ~]# groupadd -r zabbix
[root@cl129 ~]# useradd -r -g zabbix -M -s /sbin/nologin zabbix
編譯安裝zabbix
[root@cl129 ~]# cd /usr/src/zabbix-4.2.1
[root@cl129 zabbix-4.2.1]# ./configure --enable-agent
[root@cl129 zabbix-4.2.1]# make install
[root@cl129 zabbix-4.2.1]# ls /usr/local/etc/
zabbix_agentd.conf zabbix_agentd.conf.d
修改服務端配置文件
設置數據庫信息
[root@cl129 zabbix-4.2.1]# vim /usr/local/etc/zabbix_agentd.conf
Server=192.168.163.128
ServerActive=192.168.163.128
Hostname=167
啟動zabbix_agentd
[root@cl129 zabbix-4.2.1]# zabbix_agentd
[root@cl129 zabbix-4.2.1]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:10050 *:*


