1. 程式人生 > 實用技巧 >Zabbix部署

Zabbix部署

Zabbix-Deployment

目錄

1. 介紹

  Zabbix是一個免費的、開源的的監控系統,可以收集監控伺服器、虛擬機器和網路裝置的指標。Zabbix有通知機制,使用者可以自定義告警機制並通過郵件方式傳送給使用者,比如設定了磁碟剩餘空間小於5%的閾值,就會觸發相應的動作。基於已儲存的資料,Zabbix可以提供資料的視覺化。運維主要使用Zabbix監控伺服器(實體機/虛擬機器)的CPU、記憶體、網路和磁碟空間等指標。如果設定了磁碟使用空間大於95%的觸發器和郵件通知,那麼當磁碟空間低於5%時,Zabbix就會通過郵件傳送通知。

2. 軟硬體環境

  Zabbix是基於C/S架構的,分為ServerAgent兩部分,這裡的部署使用兩臺虛擬機器,一臺虛擬機器執行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		#編譯
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檔案是滿足Zabbixpre-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 serverhost主機有資料,證明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控制檯,選擇ConfigurationHosts標籤,如下圖所示:

  單擊Create host按鈕,填寫Host nameansible01(與上面的配置檔案Hostname一致),選擇一個Groups,填寫執行agent端的伺服器IP地址172.16.11.197,最後切換到Templates標籤,選擇一個監控模板Template OS Linux by Zabbix agent active,如下圖所示:

  然後單擊add新增主機,可以在ConfigurationHosts標籤看到新增的Host主機,如下圖所示:

  等待3-5分鐘,可以在Monitoring下的Latest data選擇ansible01主機的檢視獲取的資料,如下圖所示:

  遇到的問題:關於選擇的Templates,如果選擇Template OS Linux by Zabbix agent active(帶active字樣),AvailabilityZBX不為綠色;如果選擇Template OS Linux by Zabbix agent(不帶active字樣),AvailabilityZBX變為綠色。帶有actice字樣的應該是主動模式,不帶active字樣的被動模式,ZBX是不是綠色都能獲取監控的資料,暫時原因不明。

  更新:原因是Template OS Linux by Zabbix agent active包含的module全都是帶active字樣的,ZBX燈綠不綠是看有沒有添加了Template Module Zabbix agent(不帶active字樣),如果想要燈綠,就逐個新增帶active字樣的Template Module,選擇zabbix agent是選擇不帶active字樣的。