「Zabbix」Centos7下搭建Zabbix+MySQL+Nginx

前言

小菜運(yùn)維僅僅只是一位菜鳥運(yùn)維

廢話不多說,小菜運(yùn)維最近計(jì)劃在公司內(nèi)網(wǎng)部署一套 Zabbix Server 環(huán)境,用于監(jiān)控公司線上WEB項(xiàng)目的運(yùn)行狀態(tài),經(jīng)過一番調(diào)研,最終決定采用 Nginx 部署 Zabbix,而放棄 Zabbix官網(wǎng) 推薦的 Apache 部署方案,主要原因還是目前公司運(yùn)行環(huán)境都是基于 Nginx 搭建的。如果想使用 Apache 進(jìn)行部署,完全可以參照 Zabbix官網(wǎng)教程 進(jìn)行操作即可。

前置條件

環(huán)境準(zhǔn)備:本文除 Zabbix 外,不再介紹其他組件的安裝過程,假設(shè)你已經(jīng)安裝好了其他相關(guān)組件。

序號(hào) 組件 版本
0 Centos 7
1 Zabbix 4.2
2 MySQL 5.7
3 PHP 7.0
4 Nginx 1.14.2

安裝Zabbix

我們將參照 Zabbix官網(wǎng)教程,通過yum的方式進(jìn)行安裝。

  1. 訪問 Zabbix官網(wǎng)下載頁(yè),如下圖選擇平臺(tái)環(huán)境,這里我們選擇的數(shù)據(jù)庫(kù)是 MySQL;
    Choose your platform
  2. 官方的安裝是通過yum進(jìn)行的,在上一步完成后會(huì)自動(dòng)在下面生成相關(guān)操作的shell命令,這里我們先完成前兩步,也就是通過yum方式完成安裝 zabbix-serverzabbix-agent;
# a. Install Zabbix repository
rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm
yum clean all 
# b. Install Zabbix server, frontend, agent
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent 

到這里,我們已經(jīng)實(shí)現(xiàn)了 zabbix-serverzabbix-agent 的安裝了,比通過源碼編譯安裝的方式容易了很多,沒錯(cuò),菜鳥運(yùn)維就是不喜歡源碼編譯安裝!接下來要做的就是完成 zabbix 運(yùn)行所需的數(shù)據(jù)庫(kù)和WEB容器的配置;

創(chuàng)建Zabbix數(shù)據(jù)庫(kù)

我們假設(shè)數(shù)據(jù)庫(kù)用戶為 root,密碼為 Zabbix01,數(shù)據(jù)庫(kù)實(shí)例名稱為 zabbix_server 。對(duì)于創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例,我們可以參照官網(wǎng)教程在服務(wù)器通過命令行實(shí)現(xiàn),也可以通過 Navicat 等客戶端實(shí)現(xiàn)。

  1. 通過Navicat客戶端工具創(chuàng)建數(shù)據(jù)庫(kù),注意字符集最好選擇 utf8mb4;
通過Navicat創(chuàng)建數(shù)據(jù)庫(kù)
  1. 通過命令行創(chuàng)建數(shù)據(jù)庫(kù);
# 通過命令行創(chuàng)建數(shù)據(jù)庫(kù)
mysql -uroot -p
mysql> create database zabbix_server character set utf8mb4 collate utf8mb4_general_ci;
mysql> grant all privileges on zabbix_server.* to 'root@%' identified by 'Zabbix01';
mysql> quit;

初始化Zabbix數(shù)據(jù)庫(kù)

Zabbix 的數(shù)據(jù)庫(kù)初始化SQL腳本默認(rèn)存儲(chǔ)在 /usr/share/doc/zabbix-server-mysql-4.2.0/create.sql.gz,我們可以將其下載到本地解壓后通過 Navicat 導(dǎo)入數(shù)據(jù)庫(kù),或通過執(zhí)行命令行的方式導(dǎo)入。

  1. 通過Navicat客戶端導(dǎo)入數(shù)據(jù);
通過Navicat導(dǎo)入數(shù)據(jù)
  1. 通過命令行方式導(dǎo)入數(shù)據(jù);
# 執(zhí)行初始化SQL腳本
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uroot -p zabbix_server 

配置Zabbix數(shù)據(jù)庫(kù)連接信息

Zabbix 的配置文件默認(rèn)存儲(chǔ)在 /etc/zabbix 目錄,其中 zabbix_server.confzabbix-server 的配置文件,zabbix_agentd.confzabbix-agent 的配置文件。

zabbix配置文件

編輯 /etc/zabbix/zabbix_server.conf,配置 Zabbix 數(shù)據(jù)庫(kù)連接信息:

# 編輯 /etc/zabbix/zabbix_server.conf
vi /etc/zabbix/zabbix_server.conf
# 修改以下配置項(xiàng)
DBHost=localhost
DBName=zabbix_server
DBUser=root
DBPassword=Zabbix01

啟動(dòng)zabbix-server服務(wù)

配置完數(shù)據(jù)庫(kù)信息后,我們可以暫時(shí)跳過 PHP 和 Nginx 的配置過程,嘗試啟動(dòng) zabbix-server 服務(wù),先確保 zabbix-server 服務(wù)是可正常啟動(dòng)的。

# 啟動(dòng)zabbix-server服務(wù)
systemctl restart zabbix-server

這時(shí)你可能會(huì)發(fā)現(xiàn) zabbix-server 服務(wù)啟動(dòng)失敗了,如果你的 zabbix-server 服務(wù)可正常啟動(dòng),那么你可以跳過這部分直接看 Nginx 的配置環(huán)節(jié)了,或者跟我們一起看一下控制臺(tái)給出的錯(cuò)誤提示信息:

systemctl restart zabbix-server

我們根據(jù)提示通過journalctl -xe命令查看一下詳細(xì)信息,具體內(nèi)容如下圖:

journalctl -xe

我們發(fā)現(xiàn)報(bào)錯(cuò)原因是不能正常加載 libmysqlclient.so.18 庫(kù)文件,對(duì)于類似的錯(cuò)誤可能大家都遇到過,我們也不再深入探討其原因和解決方案,在這里只給出一種小菜運(yùn)維的「簡(jiǎn)單粗暴」處理方法,重新安裝mysql-libs。如果大家嘗試無效的話還請(qǐng)大家自行百度一下解決方案。
小菜運(yùn)維的解決方案:

# libmysqlclient.so.18: cannot open shared object file: No such file or directory
yum -y reinstall mysql-libs

重新安裝完成 mysql-libs 之后,我們?cè)俅螄L試啟動(dòng) zabbix-server 服務(wù)沒有報(bào)錯(cuò),然后查看一下 zabbix-server 服務(wù)運(yùn)行狀態(tài)發(fā)現(xiàn)服務(wù)已經(jīng)啟動(dòng)成功。

# 啟動(dòng)zabbix-server服務(wù)
systemctl start zabbix-server
# 查看zabbix-server服務(wù)運(yùn)行狀態(tài)
systemctl status zabbix-server
systemctl status zabbix-server

配置Nginx的location

我們知道 zabbix 是 PHP 開發(fā)的,PHP7.0 已經(jīng)內(nèi)置了 PHP-FPM,我們要做的就是配置 Nginx 使其支持 php-fpm,這里我們不再介紹如何安裝 Nginx 以及配置 php-fpm,我們只給出經(jīng)測(cè)試可用的 Nginx server 配置文件以及相關(guān)異常錯(cuò)誤的排除過程。

找到你的 Nginx 的配置文件,參照如下的 server 配置做出相應(yīng)修改。需要注意的是 Zabbix 的WEB頁(yè)面文件默認(rèn)保存在 /usr/share/zabbix 目錄,所以這里我們 將server的root指向了 /usr/share/zabbix 目錄 。

# 重點(diǎn)說三遍!??!此處只給出重點(diǎn)配置項(xiàng)的參考,其他常規(guī)配置項(xiàng)自行補(bǔ)充
# 重點(diǎn)說三遍?。?!此處只給出重點(diǎn)配置項(xiàng)的參考,其他常規(guī)配置項(xiàng)自行補(bǔ)充
# 重點(diǎn)說三遍?。。〈颂幹唤o出重點(diǎn)配置項(xiàng)的參考,其他常規(guī)配置項(xiàng)自行補(bǔ)充
server {
  # 其他常規(guī)配置項(xiàng)自行補(bǔ)充
  root /usr/share/zabbix;
  location / {
    try_files $uri $uri/ /index.php?$args;
  }
  location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi.conf;
  }
}

執(zhí)行命令重新加載Nginx的配置文件使修改生效:

# 重新加載Nginx配置文件
nginx -s reload

接下來,我們嘗試通過瀏覽器訪問一下 http://server_ip_or_name/zabbix,看看是否能夠順利加載 zabbix的歡迎頁(yè)面?很掃興,服務(wù)端返回了 500 錯(cuò)誤碼。

ERROR 500

很明顯服務(wù)端處理出錯(cuò)了,面對(duì)這種情況,我們應(yīng)該如何排查錯(cuò)誤呢?錯(cuò)誤可能是 Nginx 的配置錯(cuò)誤,可能是 php-fpm 的處理錯(cuò)誤,也可能是 zabbix 的配置錯(cuò)誤,首先我們需要先定位出錯(cuò)誤出現(xiàn)在哪里。

小菜運(yùn)維排查錯(cuò)誤的第一反應(yīng)就是要查看錯(cuò)誤日志,Nginx 是一個(gè)WEB容器,其日志只記錄了請(qǐng)求訪問日志和 Nginx 本身的錯(cuò)誤日志,不會(huì)記錄 PHP 的運(yùn)行錯(cuò)誤信息,Nginx 把對(duì) PHP 的請(qǐng)求轉(zhuǎn)發(fā)給 php-fpm fastcgi 進(jìn)程來處理,默認(rèn)的 php-fpm 只會(huì)輸出 php-fpm 的錯(cuò)誤信息,在 php-fpm 的錯(cuò)誤日志里也看不到 PHP 的錯(cuò)誤日志,
原因是 php-fpm 的配置文件 php-fpm.conf 中默認(rèn)是關(guān)閉了 worker 進(jìn)程的錯(cuò)誤輸出,直接把他們重定向到 /dev/null,當(dāng)然這個(gè)可以通過修改 php-fpm.conf 來解決。那么 Zabbix 服務(wù)本身有沒有日志輸出呢?答案是肯定的,默認(rèn)情況下 Zabbix 的日志是保存在文件 /var/log/zabbix/zabbix_server.log 中,這個(gè)配置項(xiàng)我們可以在上面提到的 zabbix-server 默認(rèn)配置文件 /etc/zabbix/zabbix_server.conf 中進(jìn)行查看和編輯。

我們查看日志文件 /var/log/zabbix/zabbix_server.log 如下:

zabbix_server.log

在 zabbix-server 日志中我們發(fā)現(xiàn)有一條錯(cuò)誤信息 [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2),也就是說 zabbix-server 不能通過 socket 文件 '/var/lib/mysql/mysql.sock' 連接 MySQL 數(shù)據(jù)庫(kù),那么 '/var/lib/mysql/mysql.sock' 是哪里來的呢?帶著這個(gè)疑惑,小菜運(yùn)維又一次打開了 zabbix-server 的配置文件 /etc/zabbix/zabbix_server.conf,在 zabbix-server.conf 中我們找到了被注釋掉的配置項(xiàng) DBSocket,而且默認(rèn)值為空。

zabbix-server.conf

很顯然,配置項(xiàng) DBSocket 應(yīng)該配置 MySQL 數(shù)據(jù)庫(kù)的 socket 文件,難道我們服務(wù)器上 MySQL 的 socket 就是配置的 '/var/lib/mysql/mysql.sock'?帶著疑問我們先查找了一下文件 /var/lib/mysql/mysql.sock 并發(fā)現(xiàn)該文件并不存在,然后我們又打開MySQL的配置文件 /etc/my.cnf,發(fā)現(xiàn)我們安裝的 MySQL 默認(rèn)的 socket 配置項(xiàng)配置的是 /tmp/mysql.sock

/etc/my.cnf

我們編輯配置文件 zabbix-server.conf,將配置項(xiàng) DBSocket 設(shè)置為 /tmp/mysql.sock

zabbix-server.conf

然后重新啟動(dòng)zabbix-server服務(wù)并再次嘗試從瀏覽器訪問 http://server_ip_or_name/zabbix,依然很掃興,服務(wù)端仍然返回了 500 錯(cuò)誤碼!

# 重新啟動(dòng)zabbix-server服務(wù)
systemctl restart zabbix-server
ERROR 500

同樣的還是查看 zabbix-server 服務(wù)日志文件 /var/log/zabbix/zabbix_server.log

zabbix_server.log

這次從日志 zabbix_server.log 中我們看到,zabbix-server 服務(wù)正常啟動(dòng),沒有再報(bào)錯(cuò)了! zabbix-server 服務(wù)沒有報(bào)錯(cuò),而服務(wù)端也正常做出了響應(yīng),只不過響應(yīng)碼是 500 錯(cuò)誤碼,說明 Nginx 配置沒有問題,問題應(yīng)該是出在了 php-fpm 。上面已經(jīng)提到過了,php-fpm 默認(rèn)是不輸出錯(cuò)誤日志到日志文件的,所以我們需要先配置 php-fpm 日志輸出到日志文件,在這里我們就不再介紹如何配置了,直接給出 php-fpm 的錯(cuò)誤日志信息和解決方案。

php-fpm error_log

在 php-fpm 錯(cuò)誤日志中我們看到錯(cuò)誤提示信息 Failed opening required '/etc/zabbix/web/maintenance.inc.php',很明顯這是一個(gè)文件權(quán)限問題導(dǎo)致的錯(cuò)誤,因?yàn)槲覀?Nginx 的啟動(dòng)用戶組為 www:www,而 /etc/zabbix/web 目錄所屬用戶組為 root:root,導(dǎo)致 Nginx 無法讀取文件 '/etc/zabbix/web/maintenance.inc.php',我們嘗試修改 /etc/zabbix/web 目錄的用戶群組為 www:www,然后再次重啟 zabbix-server 服務(wù):

# 指定/etc/zabbix/web擁有者為www:www
chown -R www:www /etc/zabbix/web
# 重新啟動(dòng)zabbix-server服務(wù)
systemctl restart zabbix-server

我們又一次嘗試從瀏覽器訪問 http://server_ip_or_name/zabbix,這一次終于順利進(jìn)入 zabbix 歡迎頁(yè)面了!

zabbix welcome

點(diǎn)擊頁(yè)面 「Next step」按鈕,進(jìn)入到 Check of pre-requisites 頁(yè)面:

Check of pre-requisites

Check of pre-requisites 頁(yè)面我們看到 PHP 檢查項(xiàng) max_input_time 的當(dāng)前值60比 zabbix 的所需值300小,檢查沒有通過,所以我們需要先編輯 php.ini 文件,設(shè)定相關(guān) PHP 配置項(xiàng)滿足要求,其中 zabbix 必須的配置項(xiàng)有 max_execution_timemax_input_time 、date.timezone 等,大家可以根據(jù) Check of pre-requisites 頁(yè)面的提示信息進(jìn)行配置:

# 小菜運(yùn)維的PHP配置文件為/usr/local/php/etc/php.ini
cd /usr/local/php/etc
# 編輯PHP配置文件php.ini
vi php.ini
# 開始修改PHP配置項(xiàng)
# max_input_time = 300
# PHP配置項(xiàng)修改完成
# 重啟php-fpm服務(wù)
systemctl restart php-fpm

強(qiáng)制刷新 Check of pre-requisites 頁(yè)面,我們看到所有 PHP 配置項(xiàng)檢查都已通過,繼續(xù)點(diǎn)擊頁(yè)面 「Next step」 按鈕,進(jìn)入到 Configure DB connection頁(yè)面:

Configure DB connection

依次填寫數(shù)據(jù)庫(kù)各配置項(xiàng),然后繼續(xù)點(diǎn)擊頁(yè)面 「Next step」 按鈕,進(jìn)入到 Zabbix server details 頁(yè)面,在 Zabbix server details 頁(yè)面我們需要填寫 zabbix-server 實(shí)例的 Host 、Port 、Name,這些主要是用來和 zabbix-agent 做通信時(shí)使用的,這里我們只是簡(jiǎn)單的配置了 zabbix-server 實(shí)例的名稱為 zabbix server,其他均取了默認(rèn)值,如果以后有特殊需要的話可以到相應(yīng)配置文件下進(jìn)行修改:

Zabbix server details

繼續(xù)點(diǎn)擊 Zabbix server details 頁(yè)面 「Next step」 按鈕,進(jìn)入到 Pre-installation summary 確認(rèn)頁(yè)面:

Pre-installation summary

繼續(xù)點(diǎn)擊 Pre-installation summary 頁(yè)面 「Next step」按鈕,進(jìn)入到 Install 安裝完成頁(yè)面:

Install

記住上圖中標(biāo)注的文件 /etc/zabbix/web/zabbix.conf.php,有興趣的可以打開看看該文件內(nèi)容。

繼續(xù)點(diǎn)擊 Install 頁(yè)面 「Finish」 按鈕,我們看到 zabbix 的登錄頁(yè)面了,默認(rèn)登錄帳號(hào)為 Admin,密碼為 zabbix,輸入帳號(hào)密碼點(diǎn)擊 「Sign in」 按鈕完成登錄就可進(jìn)入 zabbix-server 主頁(yè)了:

Sign in

Home

到此,祝賀你,我們已經(jīng)成功完成 zabbix-server 的安裝了!

Zabbix中文亂碼處理

zabbix 默認(rèn)已經(jīng)內(nèi)置中文支持,可以通過系統(tǒng)配置選項(xiàng)切換系統(tǒng)語(yǔ)言類型,但是由于服務(wù)器字體缺失導(dǎo)致zabbix 圖表的中文會(huì)存在亂碼現(xiàn)象。

  1. 切換中文語(yǔ)言
    我們?cè)谥黜?yè),點(diǎn)擊右上角用戶圖標(biāo)進(jìn)入用戶個(gè)人資料設(shè)置頁(yè),在 Language 配置項(xiàng)選擇 Chinese(zh_CN),然后點(diǎn)擊 「Update」 按鈕即可自動(dòng)完成語(yǔ)言切換;
update language
  1. 修復(fù)中文亂碼
    zabbix 雖然本身已經(jīng)支持中文,但是在圖表的標(biāo)注上還存在中文亂碼,這是由于 zabbix 的圖表字體默認(rèn)配置的是 graphfont,而在 zabbix 字體目錄下卻不存在相應(yīng)字體造成的;
圖表中文亂碼

要解決這個(gè)問題,我們首先要到本地 windows 操作系統(tǒng)目錄 C:\Windows\Fonts 下找一款你喜歡的中文字體,將其ttf字體文件上傳到服務(wù)器目錄 /usr/share/zabbix/fonts 下,然后在服務(wù)器端編輯文件 /usr/share/zabbix/include/defines.inc.php,將配置項(xiàng) ZBX_GRAPH_FONT_NAME 的值由 graphfont 改為 simfang (這里小菜運(yùn)維選擇的字體是 「仿宋 常規(guī)」,對(duì)應(yīng)的字體文件為 simfang.ttf);

# 小菜運(yùn)維的PHP配置文件為/usr/local/php/etc/php.ini
vi /usr/share/zabbix/include/defines.inc.php
# 開始修改ZBX_GRAPH_FONT_NAME
# define('ZBX_GRAPH_FONT_NAME',   'simfang');  // font file name
# ZBX_GRAPH_FONT_NAME修改完成

再次強(qiáng)制刷新頁(yè)面,我們發(fā)現(xiàn)圖表的中文亂碼現(xiàn)象已經(jīng)不存在了。

圖表中文正常

踩坑經(jīng)歷

1. libmysqlclient.so.18: cannot open shared object file: No such file or directory
問題表現(xiàn):systemctl start zabbix-server 啟動(dòng)失敗
問題排查:journalctl -xe
解決方法:yum -y reinstall mysql-libs
2. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
問題表現(xiàn):訪問 http://server_ip_or_name/zabbix 返回500錯(cuò)誤碼
問題排查:依次排查 zabbix_server.log、php-fpm 日志
解決辦法:配置 zabbix_server.conf的DBSocket 和 MySQL 一致
3. Failed opening required '/etc/zabbix/web/maintenance.inc.php'
問題表現(xiàn):訪問 http://server_ip_or_name/zabbix 返回500錯(cuò)誤碼
問題排查:依次排查 zabbix_server.log、php-fpm 日志
解決辦法:將目錄 /etc/zabbix/web 指定擁有者為 Nginx 用戶 chown -R www:www /etc/zabbix/web
4. session.save_path is correct (/var/lib/php/session) in Unknown on line
問題表現(xiàn):zabbix 在某步點(diǎn)擊「Next step」無法進(jìn)入下一頁(yè)面
問題排查:依次排查 zabbix_server.log、php-fpm 日志,多是因權(quán)限不足導(dǎo)致
解決辦法:配置 PHP 的 session 存儲(chǔ)目錄如 session.save_path = /var/lib/php/session,并授權(quán) Nginx 用戶擁有該目錄 chown -R www:www /var/lib/php/session

zabbix服務(wù)管理

# zabbix-server
systemctl status zabbix-server
systemctl start zabbix-server
systemctl stop zabbix-server
systemctl restart zabbix-server

# zabbix-agent
systemctl status zabbix-agent
systemctl start zabbix-agent
systemctl stop zabbix-agent
systemctl restart zabbix-agent

# zabbix默認(rèn)配置文件目錄
cd /etc/zabbix

# zabbix默認(rèn)日志存儲(chǔ)目錄
cd /var/log/zabbix
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容