前言
小菜運(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)組件女责。
序號 | 組件 | 版本 |
---|---|---|
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)行安裝。
- 訪問 Zabbix官網(wǎng)下載頁抵知,如下圖選擇平臺環(huán)境墙基,這里我們選擇的數(shù)據(jù)庫是 MySQL;
Choose your platform - 官方的安裝是通過yum進(jìn)行的刷喜,在上一步完成后會自動在下面生成相關(guān)操作的shell命令残制,這里我們先完成前兩步,也就是通過yum方式完成安裝 zabbix-server 和 zabbix-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-server 和 zabbix-agent 的安裝了,比通過源碼編譯安裝的方式容易了很多浊闪,沒錯恼布,菜鳥運(yùn)維就是不喜歡源碼編譯安裝螺戳!接下來要做的就是完成 zabbix 運(yùn)行所需的數(shù)據(jù)庫和WEB容器的配置;
創(chuàng)建Zabbix數(shù)據(jù)庫
我們假設(shè)數(shù)據(jù)庫用戶為 root折汞,密碼為 Zabbix01倔幼,數(shù)據(jù)庫實(shí)例名稱為 zabbix_server 。對于創(chuàng)建數(shù)據(jù)庫實(shí)例爽待,我們可以參照官網(wǎng)教程在服務(wù)器通過命令行實(shí)現(xiàn)损同,也可以通過 Navicat 等客戶端實(shí)現(xiàn)。
- 通過Navicat客戶端工具創(chuàng)建數(shù)據(jù)庫鸟款,注意字符集最好選擇 utf8mb4揖庄;
- 通過命令行創(chuàng)建數(shù)據(jù)庫;
# 通過命令行創(chuàng)建數(shù)據(jù)庫
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ù)庫
Zabbix 的數(shù)據(jù)庫初始化SQL腳本默認(rèn)存儲在 /usr/share/doc/zabbix-server-mysql-4.2.0/create.sql.gz欠雌,我們可以將其下載到本地解壓后通過 Navicat 導(dǎo)入數(shù)據(jù)庫,或通過執(zhí)行命令行的方式導(dǎo)入疙筹。
- 通過Navicat客戶端導(dǎo)入數(shù)據(jù)富俄;
- 通過命令行方式導(dǎo)入數(shù)據(jù);
# 執(zhí)行初始化SQL腳本
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uroot -p zabbix_server
配置Zabbix數(shù)據(jù)庫連接信息
Zabbix 的配置文件默認(rèn)存儲在 /etc/zabbix 目錄而咆,其中 zabbix_server.conf 為 zabbix-server 的配置文件霍比,zabbix_agentd.conf 為 zabbix-agent 的配置文件。
編輯 /etc/zabbix/zabbix_server.conf暴备,配置 Zabbix 數(shù)據(jù)庫連接信息:
# 編輯 /etc/zabbix/zabbix_server.conf
vi /etc/zabbix/zabbix_server.conf
# 修改以下配置項(xiàng)
DBHost=localhost
DBName=zabbix_server
DBUser=root
DBPassword=Zabbix01
啟動zabbix-server服務(wù)
配置完數(shù)據(jù)庫信息后悠瞬,我們可以暫時(shí)跳過 PHP 和 Nginx 的配置過程,嘗試啟動 zabbix-server 服務(wù)涯捻,先確保 zabbix-server 服務(wù)是可正常啟動的浅妆。
# 啟動zabbix-server服務(wù)
systemctl restart zabbix-server
這時(shí)你可能會發(fā)現(xiàn) zabbix-server 服務(wù)啟動失敗了,如果你的 zabbix-server 服務(wù)可正常啟動障癌,那么你可以跳過這部分直接看 Nginx 的配置環(huán)節(jié)了凌外,或者跟我們一起看一下控制臺給出的錯誤提示信息:
我們根據(jù)提示通過journalctl -xe命令查看一下詳細(xì)信息,具體內(nèi)容如下圖:
我們發(fā)現(xiàn)報(bào)錯原因是不能正常加載 libmysqlclient.so.18 庫文件涛浙,對于類似的錯誤可能大家都遇到過康辑,我們也不再深入探討其原因和解決方案,在這里只給出一種小菜運(yùn)維的「簡單粗暴」處理方法轿亮,重新安裝mysql-libs疮薇。如果大家嘗試無效的話還請大家自行百度一下解決方案。
小菜運(yùn)維的解決方案:
# libmysqlclient.so.18: cannot open shared object file: No such file or directory
yum -y reinstall mysql-libs
重新安裝完成 mysql-libs 之后我注,我們再次嘗試啟動 zabbix-server 服務(wù)沒有報(bào)錯按咒,然后查看一下 zabbix-server 服務(wù)運(yùn)行狀態(tài)發(fā)現(xiàn)服務(wù)已經(jīng)啟動成功。
# 啟動zabbix-server服務(wù)
systemctl start zabbix-server
# 查看zabbix-server服務(wù)運(yùn)行狀態(tài)
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)測試可用的 Nginx server 配置文件以及相關(guān)異常錯誤的排除過程梳侨。
找到你的 Nginx 的配置文件,參照如下的 server 配置做出相應(yīng)修改太伊。需要注意的是 Zabbix 的WEB頁面文件默認(rèn)保存在 /usr/share/zabbix 目錄剿另,所以這里我們 將server的root指向了 /usr/share/zabbix 目錄 箫锤。
# 重點(diǎn)說三遍!S昱谚攒!此處只給出重點(diǎn)配置項(xiàng)的參考,其他常規(guī)配置項(xiàng)自行補(bǔ)充
# 重點(diǎn)說三遍7斩椤A蟪簟!此處只給出重點(diǎn)配置項(xiàng)的參考讼稚,其他常規(guī)配置項(xiàng)自行補(bǔ)充
# 重點(diǎn)說三遍@ㄈ濉!锐想!此處只給出重點(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的歡迎頁面固逗?很掃興,服務(wù)端返回了 500 錯誤碼藕帜。
很明顯服務(wù)端處理出錯了烫罩,面對這種情況,我們應(yīng)該如何排查錯誤呢洽故?錯誤可能是 Nginx 的配置錯誤嗡髓,可能是 php-fpm 的處理錯誤,也可能是 zabbix 的配置錯誤收津,首先我們需要先定位出錯誤出現(xiàn)在哪里饿这。
小菜運(yùn)維排查錯誤的第一反應(yīng)就是要查看錯誤日志,Nginx 是一個WEB容器撞秋,其日志只記錄了請求訪問日志和 Nginx 本身的錯誤日志长捧,不會記錄 PHP 的運(yùn)行錯誤信息,Nginx 把對 PHP 的請求轉(zhuǎn)發(fā)給 php-fpm fastcgi 進(jìn)程來處理吻贿,默認(rèn)的 php-fpm 只會輸出 php-fpm 的錯誤信息串结,在 php-fpm 的錯誤日志里也看不到 PHP 的錯誤日志,
原因是 php-fpm 的配置文件 php-fpm.conf 中默認(rèn)是關(guān)閉了 worker 進(jìn)程的錯誤輸出,直接把他們重定向到 /dev/null肌割,當(dāng)然這個可以通過修改 php-fpm.conf 來解決卧蜓。那么 Zabbix 服務(wù)本身有沒有日志輸出呢?答案是肯定的把敞,默認(rèn)情況下 Zabbix 的日志是保存在文件 /var/log/zabbix/zabbix_server.log 中弥奸,這個配置項(xiàng)我們可以在上面提到的 zabbix-server 默認(rèn)配置文件 /etc/zabbix/zabbix_server.conf 中進(jìn)行查看和編輯。
我們查看日志文件 /var/log/zabbix/zabbix_server.log 如下:
在 zabbix-server 日志中我們發(fā)現(xiàn)有一條錯誤信息 [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ù)庫盛霎,那么 '/var/lib/mysql/mysql.sock' 是哪里來的呢?帶著這個疑惑耽装,小菜運(yùn)維又一次打開了 zabbix-server 的配置文件 /etc/zabbix/zabbix_server.conf愤炸,在 zabbix-server.conf 中我們找到了被注釋掉的配置項(xiàng) DBSocket,而且默認(rèn)值為空掉奄。
很顯然规个,配置項(xiàng) DBSocket 應(yīng)該配置 MySQL 數(shù)據(jù)庫的 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
我們編輯配置文件 zabbix-server.conf引瀑,將配置項(xiàng) DBSocket 設(shè)置為 /tmp/mysql.sock
然后重新啟動zabbix-server服務(wù)并再次嘗試從瀏覽器訪問 http://server_ip_or_name/zabbix,依然很掃興榨馁,服務(wù)端仍然返回了 500 錯誤碼憨栽!
# 重新啟動zabbix-server服務(wù)
systemctl restart zabbix-server
同樣的還是查看 zabbix-server 服務(wù)日志文件 /var/log/zabbix/zabbix_server.log
這次從日志 zabbix_server.log 中我們看到,zabbix-server 服務(wù)正常啟動翼虫,沒有再報(bào)錯了屑柔! zabbix-server 服務(wù)沒有報(bào)錯,而服務(wù)端也正常做出了響應(yīng)珍剑,只不過響應(yīng)碼是 500 錯誤碼掸宛,說明 Nginx 配置沒有問題,問題應(yīng)該是出在了 php-fpm 招拙。上面已經(jīng)提到過了唧瘾,php-fpm 默認(rèn)是不輸出錯誤日志到日志文件的,所以我們需要先配置 php-fpm 日志輸出到日志文件别凤,在這里我們就不再介紹如何配置了饰序,直接給出 php-fpm 的錯誤日志信息和解決方案。
在 php-fpm 錯誤日志中我們看到錯誤提示信息 Failed opening required '/etc/zabbix/web/maintenance.inc.php'规哪,很明顯這是一個文件權(quán)限問題導(dǎo)致的錯誤求豫,因?yàn)槲覀?Nginx 的啟動用戶組為 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
# 重新啟動zabbix-server服務(wù)
systemctl restart zabbix-server
我們又一次嘗試從瀏覽器訪問 http://server_ip_or_name/zabbix,這一次終于順利進(jìn)入 zabbix 歡迎頁面了蚤告!
點(diǎn)擊頁面 「Next step」按鈕努酸,進(jìn)入到 Check of pre-requisites 頁面:
在 Check of pre-requisites 頁面我們看到 PHP 檢查項(xiàng) max_input_time 的當(dāng)前值60比 zabbix 的所需值300小,檢查沒有通過罩缴,所以我們需要先編輯 php.ini 文件蚊逢,設(shè)定相關(guān) PHP 配置項(xiàng)滿足要求,其中 zabbix 必須的配置項(xiàng)有 max_execution_time 箫章、max_input_time 烙荷、date.timezone 等,大家可以根據(jù) Check of pre-requisites 頁面的提示信息進(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 頁面檬寂,我們看到所有 PHP 配置項(xiàng)檢查都已通過终抽,繼續(xù)點(diǎn)擊頁面 「Next step」 按鈕,進(jìn)入到 Configure DB connection頁面:
依次填寫數(shù)據(jù)庫各配置項(xiàng)桶至,然后繼續(xù)點(diǎn)擊頁面 「Next step」 按鈕昼伴,進(jìn)入到 Zabbix server details 頁面,在 Zabbix server details 頁面我們需要填寫 zabbix-server 實(shí)例的 Host 镣屹、Port 圃郊、Name,這些主要是用來和 zabbix-agent 做通信時(shí)使用的女蜈,這里我們只是簡單的配置了 zabbix-server 實(shí)例的名稱為 zabbix server持舆,其他均取了默認(rèn)值,如果以后有特殊需要的話可以到相應(yīng)配置文件下進(jìn)行修改:
繼續(xù)點(diǎn)擊 Zabbix server details 頁面 「Next step」 按鈕伪窖,進(jìn)入到 Pre-installation summary 確認(rèn)頁面:
繼續(xù)點(diǎn)擊 Pre-installation summary 頁面 「Next step」按鈕逸寓,進(jìn)入到 Install 安裝完成頁面:
記住上圖中標(biāo)注的文件 /etc/zabbix/web/zabbix.conf.php,有興趣的可以打開看看該文件內(nèi)容覆山。
繼續(xù)點(diǎn)擊 Install 頁面 「Finish」 按鈕竹伸,我們看到 zabbix 的登錄頁面了,默認(rèn)登錄帳號為 Admin簇宽,密碼為 zabbix勋篓,輸入帳號密碼點(diǎn)擊 「Sign in」 按鈕完成登錄就可進(jìn)入 zabbix-server 主頁了:
到此,祝賀你魏割,我們已經(jīng)成功完成 zabbix-server 的安裝了生巡!
Zabbix中文亂碼處理
zabbix 默認(rèn)已經(jīng)內(nèi)置中文支持,可以通過系統(tǒng)配置選項(xiàng)切換系統(tǒng)語言類型见妒,但是由于服務(wù)器字體缺失導(dǎo)致zabbix 圖表的中文會存在亂碼現(xiàn)象孤荣。
- 切換中文語言
我們在主頁甸陌,點(diǎn)擊右上角用戶圖標(biāo)進(jìn)入用戶個人資料設(shè)置頁,在 Language 配置項(xiàng)選擇 Chinese(zh_CN)盐股,然后點(diǎn)擊 「Update」 按鈕即可自動完成語言切換钱豁;
- 修復(fù)中文亂碼
zabbix 雖然本身已經(jīng)支持中文,但是在圖表的標(biāo)注上還存在中文亂碼疯汁,這是由于 zabbix 的圖表字體默認(rèn)配置的是 graphfont牲尺,而在 zabbix 字體目錄下卻不存在相應(yīng)字體造成的;
要解決這個問題幌蚊,我們首先要到本地 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ī)」蜒简,對應(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)制刷新頁面漩仙,我們發(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 啟動失敗
問題排查: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錯誤碼
問題排查:依次排查 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錯誤碼
問題排查:依次排查 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)入下一頁面
問題排查:依次排查 zabbix_server.log卷仑、php-fpm 日志,多是因權(quán)限不足導(dǎo)致
解決辦法:配置 PHP 的 session 存儲目錄如 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)日志存儲目錄
cd /var/log/zabbix