Zabbix-Deployment
1. 介紹
Zabbix是一個免費的、開源的的監控系統,可以收集監控服務器、虛擬機和網絡設備的指標。Zabbix有通知機制,用戶可以自定義告警機制並通過郵件方式發送給用戶,比如設置了磁盤剩余空間小於5%的閾值,就會觸發相應的動作。基於已存儲的數據,Zabbix可以提供數據的可視化。運維主要使用Zabbix監控服務器(實體機/虛擬機)的CPU、內存、網絡和磁盤空間等指標。如果設置了磁盤使用空間大於95%的觸發器和郵件通知,那么當磁盤空間低於5%時,Zabbix就會通過郵件發送通知。
2. 軟硬件環境
Zabbix是基於C/S架構的,分為Server
和Agent
兩部分,這里的部署使用兩台虛擬機,一台虛擬機運行Server和Agent,另外一台虛擬機只運行Agent。
2.1 硬件環境
項 | 虛擬機1(Server) | 虛擬機2(Agent) |
---|---|---|
CPU | 8核心 | 4核心 |
內存 | 16G | 4G |
虛擬硬盤 | 100G vhd | 100G vhd |
IP | 172.16.11.141 | 172.16.11.197 |
2.2軟件環境
項 | 虛擬機1(Server) | 虛擬機2(Agent) |
---|---|---|
操作系統 | Centos7 | Centos7 |
Zabbix | v5.0.2 (Server+agent) | v5.0.2 (agent) |
MySQL | 8.0 | 無 |
PHP | 7.2.11 | 無 |
Nginx | 1.18.0 | 無 |
3. 安裝步驟
3.1 虛擬機1
虛擬機1上需要運行Server和agent兩個端,agent是用作指標收集的,Server是用作統一管理和分析的agent收集的指標。Server端需要安裝Zabbix Server+Agent,MySQL,PHP,Nginx。
(1)Zabbix Server+Agent
- 安裝
wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.2.tar.gz #下載zabbix5.0.2版本
tar -zxvf zabbix-5.0.2.tar.gz #解壓
mv zabbix-5.0.2 zabbix && cd zabbix #重命名並進入目錄
groupadd --system zabbix #創建系統組
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix #創建用戶.用戶所屬的組為系統的組zabbix;-d --home-dir為家目錄;-s --shell為shell類型,/sbin/nologin為不可登錄,可登錄的有/bin/bash;-c --comment注釋
yum install -y libevent-devel net-snmp-devel curl-devel #安裝編譯所需工具,可能會缺少另外的工具,需要根據報錯信息搜索缺少的工具安裝
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 #--prefix是安裝目錄;--enable-server開啟服務端;--enable-agent開啟客戶端;--with-mysql使用mysql數據庫,也有使用postgresql的--with-postgresql;--with-net-snmp使用snmp協議,可以發送郵件;--with-libcurl and --with-libxml2 configuration options are required for virtual machine monitoring;
make -j 8 #編譯,-j --job啟動8個工作進行編譯
make install #安裝
mkdir /var/www/html/zabbix #創建Zabbix前端UI項目目錄
cd ui #進入解壓的源碼包的ui目錄
cp -a . /var/www/html/zabbix/ #復制文件到目錄/var/www/html/zabbix/,后面部署nginx作為代理使用
- 配置
上述安裝完成后,會在/usr/local/zabbix/etc
目錄下生成zabbix的相關配置文件,其中文件zabbix_server.conf
是服務端的配置文件,zabbix_agentd.conf
是客戶端的配置文件。這里需要配置agent端的服務端IP,告訴agent哪個是Server;需要配置Server端數據庫配置,告訴Server端使用哪個數據庫、連接用戶和密碼。Zabbix安裝時有默認值,可以根據自己所需進行修改。
zabbix_server.conf
文件:
DBHost=127.0.0.1
DBName=zabbix
DBUser=zabbix
DBPassword=qazqaz
zabbix_agent.conf
文件:
Server=127.0.0.1
- 運行
配置文件更改后,即可運行Server端和Agent程序了。執行命令:
/usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf #啟動服務端
/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf #啟動客戶端
(2)MySQL
MySQL為了方便,我這里使用Docker容器引擎運行MySQL,注意,在生產環境下不推薦把MySQL部署成容器運行,如會存在數據損壞等風險。
- 安裝運行
wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm #下載mysql源
rm mysql-community-release-el7-5.noarch.rpm #安裝源
yum update #更新源
yum install mysql-server #使用源工具安裝
systemctl start mysqld #啟動 MySQL
chown -R mysql:mysql /var/lib/mysql #授權
mysqld --initialize #初始化 MySQL
###然后發現連接不上mysql
#error: 'Access denied for user 'root'@'localhost' (using password: NO)'
###修改/etc/my.cnf
sed -i '$a skip-grant-tables' /etc/my.cnf #在文件最后一行添加一行“skip-grant-tables”臨時關閉用戶驗證,這樣MySQL會開啟skip_networking,無法通過遠程連接,后面會恢復用戶驗證,這里是為了更改root密碼。
systemctl restart mysqld 重啟MySQL服務
mysql -uroot
進入了MySQL終端,先刷新權限,然后修改root用戶密碼:
mysql> flush privileges; #刷新權限
###
#這里為了可以使用弱密碼,修改了MySQL的密碼要求驗證策略
mysql> set global validate_password.policy=0;
mysql> set global validate_password.length=1;
###
mysql> alter user 'root'@'localhost'IDENTIFIED BY '10010';#修改root用戶密碼
- 初始化
zabbix
數據庫
mysql> create database zabbix character set utf8 collate utf8_bin; #創建zabbix數據庫
mysql> create user zabbix identified by 'qazqaz'; #創建zabbox數據庫連接用戶,密碼為qazqaz
mysql> grant all privileges on zabbix.* to zabbix; #授權zabbix數據庫所有的權限給zabbix用戶
#Ctrl+D退出MySQL終端
cd ~/zabbix/database/mysql #進入Zabbix源碼包下的MySQL數據庫目錄
#編輯一個sql導入順序的文件,其中schema文件是建表結構。
cat > all.sql << EOF
> source schema.sql;
> source images.sql;
> source data.sql;
> source double.sql;
> EOF
mysql -uzabbix -pqazqaz #進入MySQL終端
mysql> use zabbix; #使用zabbix schema(數據庫)
mysql> source all.sql; #執行順序導入語句
#Ctrl+D退出MySQL終端
sed -i '$d' /etc/my.cnf #刪除添加的’skip-grant-tables‘,不刪除這個選項無法使用MySQL的tcp協議的3306端口,意味着無法連接!!!
systemctl restart mysqld #重啟mysql服務,讓配置文件生效
至此,MySQL數據庫已經准備完成。
(3)PHP
- 安裝
yum install -y oniguruma-devel libicu-devel
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-zlib --enable-bcmath --with-curl --enable-mbregex --enable-mbstring --enable-sockets --with-gettext --with-gd --with-jpeg-dir --with-freetype-dir
make -j 8
###注意:###
#如果編譯過程中報錯undefined reference to symbol 'ber_scanf'
#編輯MakeFile,找到 開頭是 ‘EXTRA_LIBS’ 這一行,在結尾加上'-llber'
make install
- 配置
cp php.ini-production /usr/local/php/etc/php.ini #這個文件在解壓的源碼包目錄下
cd /usr/local/php/
cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf
cp etc/php-fpm.conf.default etc/php-fpm.conf
groupadd www-data #創建www-data用戶組
useradd -g www-data -s /sbin/nologin www-data #創建www-data用戶,屬於www-data用戶組(-g --group),類型為不可登錄(-s --shell)
創建了PHP-FPM的運行用戶www-data
后,再編輯相關的配置文件,其中編輯php.ini
文件是滿足Zabbix
的pre-requisites
,編輯www.conf
文件是設置PHP-FPM的啟動用戶和用戶組。
etc/php.ini
文件
post_max_size = 16M
max_input_time = 300
max_execution_time = 300
date.timezone = Asia/Shanghai
etc/php-fpm.d/www.conf
文件
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = www-data
group = www-data
- 運行
最后,啟動PHP的FPM進程:
cd usr/local/php
sbin/php-fpm
(4)Nginx
- 安裝
wget http://nginx.org/download/nginx-1.18.0.tar.gz #wget下載nginx源碼包,或者使用curl下載:curl -O http://nginx.org/download/nginx-1.18.0.tar.gz -O是--remote-name Write output to a file named as the remote file
tar -zxvf nginx-1.18.0.tar.gz #解壓下載的源碼壓縮包 -z(--gzip)針對gzip的壓縮,-x(--extract)是提取,-f保留原有壓縮包的文件結構,-v打印詳情
mv nginx-1.18.0 nginx #重命名文件夾
cd nginx #進入目錄
./configure --prefix=/usr/local/nginx --with-http_ssl_module #執行configure會檢查所需的庫,成功后會生成一個Makefile文件,--prefix是執行安裝的路徑,--with-http_ssl_module是添加ssl模塊支持,這里不會用到,可以執行./configure --help查看本版本支持的選項功能
make -j 8 #編譯,-j為--job,開啟8個工作任務
make install #執行安裝,這里會把編譯生成的程序文件拷貝到安裝目錄下並創建相關的文件夾
- 配置
cd /usr/local/nginx
groupadd nginx #創建nginx用戶組
useradd -g nginx -s /sbin/nologin nginx #創建www-data用戶,屬於nginx用戶組(-g --group),類型為不可登錄(-s --shell)
chown -R nginx:nginx /usr/local/nginx #修改目錄及目錄下的文件的所屬組和用戶為nginx
編輯/usr/local/nginx/conf/nginx.conf
文件
user nginx; #使用nginx用戶
worker_processes auto;
#...此處省略默認
events {
use epoil;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
#...此處省略默認
include ../conf.d/*.conf; #包含conf.d目錄下的配置文件
#...此處省略默認
}
新增/usr/local/nginx/conf.d/zabbix.conf
文件
server {
listen 172.16.11.141:3000; #設置運行端口為3000
server_name 172.16.11.141; #服務端的IP
location / {
root /var/www/html;
index index.php index.html index.htm;
}
location ~ \.php {
root /var/www/html;
fastcgi_index index.php; #PHP index頁面
fastcgi_pass 127.0.0.1:9000; #配置fastcgi服務器,請求會轉發到fastcgi服務器(可以理解為PHP解析器),IP和端口在php中配置
include fastcgi_params; #加入fastcgi_params,如下面的fastcgi_param參數
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
- 運行
最后,啟動nginx服務器:
cd /usr/local/nginx
sbin/nginx
(5)Zabbix Web UI
- 配置
瀏覽器輸入:http://172.16.11.141:3000/zabbix/setup.php
進入Zabbix Web UI界面,如下圖所示:
下一步,檢查zabbix的要求是否符合,如果不符合要求,可以搜查相關資料解決,如果版本一樣並且是跟着上面的教程安裝的話,應該所有的要求都是符合的,如下圖所示:
下一步,配置數據庫連接,填寫數據庫連接host、端口、用戶和密碼等,如下圖所示:
下一步,配置zabbix server詳細,取名為zabbix-server
,其中host為主機IP或域名,port為端口,name為標識名字,如下圖所示:
下一步,可以看到安裝的配置概述,如下圖所示:
下一步,會在目錄/var/www/html/zabbix/conf
下生成一個zabbix.conf.php
的配置文件,如果該目錄讀寫權限不足,可能無法生成,如下圖所示:
這時可以在瀏覽器下載文件zabbix.conf.php
,然后上傳到服務器的/var/www/html/zabbix/conf
目錄下,最后刷新頁面即可,如下圖所示:
單擊finish,跳轉到登錄頁面,輸入默認的賬號:Admin
,密碼:zabbix
進行登錄,如下圖所示:
至此,zabbix server
部署完成,可以看到zabbix server is running yes
字樣,瀏覽一下Latest data
可以看到名字的zabbix server
的host
主機有數據,證明agent
端正在運行。
3.2 虛擬機2
虛擬機2上只運行zabbix agent
,后續的新增主機只需要安裝agent
端即可加入zabbix
監控了。
(1)Zabbix Agent
- 安裝
wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.2.tar.gz #下載zabbix5.0.2版本
tar -zxvf zabbix-5.0.2.tar.gz #解壓
mv zabbix-5.0.2 zabbix && cd zabbix #重命名並進入目錄
groupadd --system zabbix #創建系統組
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix #創建用戶.用戶所屬的組為系統的組zabbix;-d --home-dir為家目錄;-s --shell為shell類型,/sbin/nologin為不可登錄,可登錄的有/bin/bash;-c --comment注釋
yum install -y gcc libxml2-devel pcre-devel
./configure --prefix=/usr/local/zabbix --enable-agent
make -j 8
make install
- 配置(主動模式)
編輯/usr/local/zabbix/etc/zabbix_agentd.conf
文件
Server=172.16.11.141 #server端的IP
ServerActive=172.16.11.141 #agent的主動模式需要使用該配置
Hostname=ansible01 #主機名,下面在Web控制台上添加監控主機時,主機名要一致
- 運行
cd /usr/local/zabbix
sbin/zabbix_agentd -c etc/zabbix_agentd.conf
(2)Zabbix Web UI
瀏覽器輸入:http://172.16.11.141:3000/zabbix
進入Zabbix Web控制台,選擇Configuration
的Hosts
標簽,如下圖所示:
單擊Create host
按鈕,填寫Host name
為ansible01
(與上面的配置文件Hostname
一致),選擇一個Groups
,填寫運行agent
端的服務器IP地址172.16.11.197
,最后切換到Templates
標簽,選擇一個監控模板Template OS Linux by Zabbix agent active
,如下圖所示:
然后單擊add
添加主機,可以在Configuration
的Hosts
標簽看到新增的Host
主機,如下圖所示:
等待3-5分鍾,可以在Monitoring
下的Latest data
選擇ansible01
主機的查看獲取的數據,如下圖所示:
遇到的問題:關於選擇的Templates,如果選擇Template OS Linux by Zabbix agent active
(帶active字樣),Availability
的ZBX
不為綠色;如果選擇Template OS Linux by Zabbix agent
(不帶active字樣),Availability
的ZBX
變為綠色。帶有actice字樣的應該是主動模式,不帶active字樣的被動模式,ZBX
是不是綠色都能獲取監控的數據,不影響功能的使用,暫時原因不明。
更新:發現Template OS Linux by Zabbix agent active
包含的module全都是帶active字樣的,ZBX
燈綠不綠是看有沒有添加了Template Module Zabbix agent
(不帶active字樣),不帶active字樣的是被動模式,如果想要燈綠,就逐個添加帶active字樣的Template Module,選擇zabbix agent是選擇不帶active字樣的。如下圖添加的模板: