Zabbix的編譯安裝并發送通知郵件
1.寫在前面
本文主要介紹的是zabbix的編譯安裝過程,包含它的基礎環境LNMP,雖然zabbix官方一般推薦的環境是LAMP。以及實現簡單的監控任務,在發現問題時能夠發送通知郵件。
2.系統環境

提前安裝好如下兩個包組:yum groupinstall ?"Development Tools" "Server ?Platform Development"。
3.搭建web服務
zabbix作為監控系統需要有圖形化的頁面呈現給運維人員,它使用web+php的方式來實現。這里首先搭建其需要的web服務。我使用的是nginx-1.10.3的源碼包編譯安裝的方式。相應步驟如下:
- 添加nginx用戶

- 編譯安裝nginx
將前面提到的nginx-1.10.3.tar.gz
包解壓以后,cd到nginx-1.10.3
目錄中,然后使用如下參數進行configure
:

- 創建軟鏈接至nginx
默認情況下nginx編譯安裝的路徑(prefix) 是在/usr/local/nginx
,所以創建一個軟鏈接,使用起來更方便:ln -s /usr/local/nginx-1.10.3/ /usr/local/nginx
- 將源碼安裝的nginx執行程序放到PATH環境變量中

在Linux中,通過源碼安裝的各類軟件包的執行程序都可以都通過這種方式放入PATH環境變量中方便使用,且相應的文件不需要賦予執行權限。
- 更改nginx文件夾屬主為nginx
chown -R nginx.nginx /usr/local/nginx-1.10.3
- 驗證web service

- 設置nginx開機自啟
這里我選擇的是直接將nginx執行程序添加到rc.local
腳本中:

- 至此web service的搭建工作完成。下面繼續mysql的搭建。
4. 搭建mysql服務
zabbix的server和proxy是需要連接數據庫的,zabbix支持多種類型的數據庫,本文只涉及到mysql。
- 添加mysql用戶
useradd -s /sbin/nologin -M mysql
- 解壓mysql 二進制包到目標文件夾
因為我使用的是名為mysql-5.5.53-Linux2.6-x86_64.tar.gz
的壓縮包,此包實際是一個mysql的二進制包,相當于從相應平臺安裝編譯好后打包出來的,直接解壓以后可以使用,而無需再configure和make&&make install了。操作指令:tar xf mysql-5.5.53-Linux2.6-x86_64.tar.gz -C /usr/local ? #解壓出來的文件會自動放置于/usr/local/mysql-5.5.53-Linux2.6-x86_64中
- 創建軟鏈接
為后續使用方便,如在腳本中引用路徑時更方便,這里還是給它設置一個軟鏈接:ln -s /usr/local/mysql-5.5.53-Linux2.6-x86_64/ /usr/local/mysql
- 更改mysql文件夾屬主為mysql
chown -R mysql.mysql /usr/local/mysql/
- 初始化mysql數據庫
在解壓后的mysql目錄中有一個scripts目錄其中有一個mysql_install_db
的文件,執行它,并指定用戶為mysql
,數據目錄使用其默認的路徑/usr/local/mysql/data
,操作如下:

- 設置mysql開機自啟
mysql目錄中有一個support-files目錄,其中有一個mysql.server
文件,將其復制到/etc/init.d/
下,并更名為mysqld
:cp support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqldchkconfig mysqld on
- 提供mysql的配置文件
同樣是在support-files
目錄中有多種不同類型的mysql配置文件,本文我使用的是my-small.cnf
,將其復制到/etc
目錄下,因為我沒有設置非常規的basedir和datadir,所以這里可以不用對其進行修改:cp support-files/my-small.cnf /etc/my.cnf ? ? #更名為my.ncf
- 啟動mysql服務
service mysqld start ? lsof -i :3306 ? #檢查mysql是否啟動成功
- 設置mysql root賬戶密碼
mysqladmin -uroot -p<password>
然后在使用root用戶登錄。
5.搭建php-fpm環境
- configure php
在將前面提到的php-5.5.38.tar.gz
包解壓以后,cd
到php-5.5.38
目錄中,執行以下configure
指令:

configure
完成以后,會提示進行make test
,這是一個非常耗時間的過程,最后的結果有可能有一些警告,但不一定會有很大的影響,可以忽略。我在操作過程中遇到如下提示,沒有去深究它,后面編譯安裝正常完成,沒有錯誤提示,使用也還未發現問題。

- 在
configure
過程中如果碰到的有錯誤提示,請根據提示信息予以解決,查看是否上述指定的包并未安裝所致。 - 安裝php-fpm
makemake install
- 設置php的軟鏈接
ln -s /usr/local/php-5.5.38/ /usr/local/php
- 將php的執行程序放入PATH變量中

- 提供php的配置文件
在php
的源碼包中提供的有php的配置文件,在解壓后的目錄中將其復制到我們在configure
時指定的位置并更名為php.ini
,如:--with-config-file-path=/usr/local/php-5.5.38/etc
。

- 提供php-fpm的配置文件
php-fpm
的配置文件在執行make install
時已安裝好了,只需要將其改名即可:

- 啟動php-fpm

- 設置php-fpm開機自啟
在編譯后的php源碼包中其實就提供了php-fpm服務腳本:./sapi/fpm/init.d.php-fpm
,我們只需要將其復制到/etc/init.d/
目錄下,并更名即可。操作如下:

- 將php-fpm與nginx結合
在php-fpm
可以正常啟動以后,需要配置web service可以訪問php-fpm服務,因為我這里使用的nginx
提供web service,所以修改其配置 文件/etc/usr/local/nginx/conf/nginx.conf
如下:

-
- 可以直接將原
nginx.conf
文件中與php-fpm
相關的部分的注釋直接去掉,并修改成如上所示內容。 - 測試nginx是否可正常使用php-fpm
- 要進行此測試,還需要修改
nginx.conf
中的根location
,在其首頁中添加index.php
,內容如下:
- 要進行此測試,還需要修改
- 可以直接將原

-
-
- 在
nginx
的html
文件夾中使用如下指令,建立index.php
文件:echo "<?php phpinfo(); ?>" > index.php
- 重啟nginx程序和php-fpm服務
- 在
-

-
- 瀏覽器中輸入這臺server的ip后回車
正常情況下,可以顯示phpinfo的詳細信息了,如下所示:php info頁面
- 瀏覽器中輸入這臺server的ip后回車
6.搭建zabbix server
- 創建zabbix用戶
useradd -s /sbin/nologin -M zabbix
- configure zabbix
將前面提到的zabbix-3.2.4.tar.gz
包解壓以后,cd
到解壓后的目錄(zabbix-3.2.4)后執行如下指令:

- 因為zabbix server也需要被監控,所以其也需要agent。
configure時使用了--with-net-snmp --with-libcurl --with-libxml2
所以需要先在系統中使用yum
安裝net-snmp-devel、libcurl-devel、libxml2-devel包,使用yum
安裝會自動解決依賴關系將net-snmp、libcurl、libxml2一并安裝上。
正常完成configure
后,會顯示如下匯總信息:


- 安裝zabbix
根據configure
完成后的提示執行make install
即可,無需執行make然后再make install。
7.建立給zabbix使用的數據庫
zabbix
要實現將其相關的配置信息,監控的信息都存儲于后臺的數據庫中,自然需要建立相應的數據庫,并配置相應的賬號。zabbix
支持多種類型的數據庫,這里只以mysql
為例,且是在zabbix server上的mysql上需要做的。
- 創建給zabbix使用的數據庫zabbix

- 初始化zabbix數據庫
在zabbix的源碼解壓目錄中有一個database
目錄,其中有針對不同類型數據庫要使用的初始化sql語句,在這里需要選擇mysql目錄中的語句:

- 修改zabbix server配置文件
源碼安裝的zabbix,其配置文件默認位于其安裝目錄的etc
目錄中,即:/usr/local/zabbix/etc
下,server的為zabbix_server.conf
,此時修改其連接數據庫的相關信息即可,默認連接的數據庫即為本機的數據庫,數據庫即為zabbix,密碼為空,所以將密碼設置為前面創建的密碼即可。DBPassword=<password>
- 修改zabbix agent的配置文件
文件位置和server的一樣,需要修改的地方有如下幾處:

- 設置zabbix server和agent開機自啟動
zabbix原生也提供了用于實現開機自啟動的服務腳本,它們在3.2.4版本中位于解壓后的目錄/root/softwares/zabbix-3.2.4/misc/init.d
,這個目錄下有針對不同類型系統的腳本,這里我選擇的是fedora這一目錄中的腳本,腳本位置及名稱如下:

很明顯分別有針對server和agent的腳本,把它們復制到/etc/init.d/
目錄下:

打開這兩個文件(zabbix_agentd和zabbix_server)查看其內容,根據實際情況進行修改,一般需要更改的只是如下內容:

將這兩個服務安裝添加到自啟動中:

- 啟動zabbix server和agent程序

8.安裝zabbix web程序
zabbix對于監控的結果可以通過web頁面來進行展示和查看,它需要安裝一個使用php程序來運行的web站點,根據zabbix的官方要求,還有如下php的參數需要提前修改:

上述修改都在php.ini
文件中完成。在本文的環境中它位于/usr/local/php/etc/php.ini
。另外需要補充一下,zabbix3.2.4它要求的php版本最低為5.4。 修改完php.ini
文件后,重啟php-fpm服務service php-fpm restart
。
安裝zabbix web程序操作步驟如下:
-
- 創建web站點
在web service的根目錄下給zabbix單獨創建一個根目錄,用于存放zabbix的php程序文件,然后再將源碼解壓目錄中名為frontends/php
目錄中的全部內容復制過來。
- 創建web站點
- 打開zabbix web完成配置過程
瀏覽器中輸入
http://server_ip/zabbix
打開zabbix的web界面,初次打開會顯示歡迎界面,此時web程序的安裝還沒有完成,并不需要登錄web站點的用戶名和密碼,然后點擊Next step
可以看到它會進行一個php環境參數的檢測,需要它們全部顯示為OK
在繼續進行下一步,從此步也可以看到很多之前php configure時所enable和with的選項參數,它們都是運行zabbix web程序所要求的。 - zabbix 3.2.4 web需求php的環境如下:
php環境檢測通過的結果如下圖所示:

zabbix web php環境檢測通過圖1

zabbix web php環境檢測通過圖2
- 配置zabbix web連接的數據庫
數據庫為本機名為zabbix的mysql數據庫,賬戶名和密碼輸入此前創建zabbix數據庫時配置授權的賬戶和密碼。

zabbix web DB配置
- 配置zabbix server信息
這里在Name處可以填上本機的主機名,其它保持默認即可。

zabbix server詳細信息
- zabbix web安裝信息匯總

zabbix web安裝信息匯總
- 生成zabbix web的配置文件并導入站點配置目錄中
zabbix web安裝程序會自動生成一個名為zabbix.conf.php
的配置文件,并嘗試自動將其放入zabbix站點配置目錄中,但由于權限問題,會創建失敗,此時只需要通過瀏覽器下載,然后手動入到指定目錄即可,web安裝程序會有相關提示,如下圖所示:

zabbix web conf install
文件導入完成后,點擊Finish
,會出現以下信息,即表示zabbix web安裝成功。

zabbix web安裝成功提示信息
- 登錄zabbix web界面
在瀏覽器中輸入http://server_ip/zabbix
即可打開zabbix的登錄界面,輸入如下默認賬戶和密碼即可登錄:
user name:Admin
password:zabbix
此用戶為zabbix web系統中super user,擁有最高權限,用戶名注意字母大小寫。
初始情況下,只配置了讓zabbix server監控它自己,下面繼續配置一臺Linux server,讓zabbix server可以監控它,并可以發送監控通知郵件。
9.被監控端安裝zabbix agent
安裝過程還是使用源碼編譯安裝的方式,先創建zabbix用戶。

在被監控的Linunx server上,只需要安裝zabbix agent,在configure時使用如下參數即可:

configure完成以后,注意觀察匯總信息是否有錯誤提示,是否只啟用了agent,有問題根據實際情況去排查并解決。如果沒有錯誤,則根據提示信息執行make install
完成安裝過程。
被監控端設置軟鏈接,添加zabbix執行程序路徑至PATH變量,修改zabbix_agentd.conf
文件以及zabbix_agentd服務開機自啟的過程參考前文相關內容即可,此處不在贅述。
最后啟動被監控端的zabbix_agentd服務。

10.zabbix server上配置監控內容
在zabbix server上配置剛安裝了zabbix agent的主機,并設置要監控的內容。
- 添加要監控的主機
在zabbix web上添加要監控的主機,選擇Configuration
---->Hosts
--->Create host
,在如下界面中填寫相應信息:zabbix web添加主機1
根據實際情況填寫主機名,選擇主機分組,主機ip,對于主機分組此處我選擇Linux servers
作為示例。
然后可以選擇Host
旁的Templates
,zabbix內置了很多種不同的模板,它包含的有監控條目item
,告警觸發器trigger
,圖形展示Graphs
,屏幕Screens
等。以下為給主機應用模板的操作過程:

給主機應用監控模板1

選擇相應的監控模板

確認主機是否應用了監控模板
示例中的server3
上我啟用的有web服務,所以這里選擇了zabbix內置的Template App HTTP Serivice
這一模板對http服務進行監控。 等待片刻,ZBX
會顯示成綠色即表示zabbix server能和server3上的zabbix agent正常通信了,如下所示:

zabbix server已可監控到server3
11.配置zabbix server發送通知郵件
zabbix server默認支持多種發送通知的方式,其中就包含的有名為Email
的方式,但經過多次嘗試都未能實現讓zabbix server發送通知郵件,所以這里使用zabbix調用外部腳本且借助公網smtp服務器的方式來發送通知郵件。詳細過程如下:
- 配置Media Type
zabbix支持自定義Media Type,這里我創建一個名為user mail的Media Type,并指定它是需要使用Scripts
的方式。在Administration
下選擇Media Types
,然后選擇Create media type
,創建內容如下:

zabbix自定義media type
- 建立通知郵件腳本
默認情況下通知郵件腳本應該存放在/usr/local/zabbix/share/zabbix/alertscripts
,直接在這個路徑下建立相應的腳本即可,如果腳本不是存放在此處,需要修改zabbix_server.conf
文件中此處# AlertScriptsPath=${datadir}/zabbix/alertscripts
取消掉注釋并寫上腳本完整的存放路徑。mail.sh的內容如下: - 定義收件人郵件地址
在zabbix中每個用戶可以關聯多個Media type
,在這里我給Admin
這一用戶關聯上前面已經定義好的名為user mail
的Media type,并填上其郵件地址,即zabbix發送郵件通知時的收件人郵件地址。在zabbix web上依次選擇Administration
,Users
,Admin
,Media
標簽,然后點擊Add
,給這一用戶定義一個media,此處選擇user mail
,如下所示:

給用戶關聯相應的Media-1

給用戶關聯相應的Media-2

給用戶關聯相應的Media-3
- 設置發送通知的action
zabbix中只有設置 了action,它才知道應該如何發送通知,如在什么條件下發送,通知通過哪個media type發送,發送給哪些人,發送的頻率是怎么樣的,發送的通知主題和正文是怎樣的,當故障恢復以后如何發送通知等。 這些必須在action中定義好。以下為配置示例,當被監控端不是在工程態(維護狀態)中,發生了Problem
事件,即將相關信息發送給zabbix administraotrs
組內的所有用戶且通過上面自定義的user mail
這一media發送。
大致過程如下:依次選擇Configuration
,Actions
,Create action
,然后按照下圖所示過程進行操作:

定義action名稱及觸發條件

定義故障時action的具體行為-1

定義故障時action的具體行為-2

定義故障恢復后action的具體行為

查看剛定義的action
從上述過程也可以看到其實這些action定義的是由Trigger來觸發的,因為前面我是直接給主機應用了zabbix內置的http service的模板,它里面已經關聯的有相應的trigger了,所以當http service發生變化,會自動觸發相應的trigger,而后又觸發zabbix 執行相應的action。這是zabbix發送通知的一個大致的過程。
- 定義zabbix發送通知郵件使用的賬戶
zabbix server本機非合法的smtp服務器,由它直接發送郵件給公網郵箱,會有很多問題,不一定成功。所以這里依然選擇使用公網的163 smtp服務器來發送zabbix的通知郵件。因為不需要用到本機的smtp服務,所以可以選擇將smtp服務停止,并確保本機有mail程序可用,它由mailx軟件包提供。在上面定義通知郵件腳本時就已經用到了mail指令。
本機服務賬戶配置方法,在/etc/mail.rc
中增加如下內容: - 制造告警測試是否正常收到通知郵件
將server3的web service停掉,將近3分鐘查看郵件客戶端,收到了zabbix發送的通知郵件。這個從故障發生到zabbix發送通知消息的時長,取決于監控的item配置的檢測時長和trigger判斷條件,默認的http service的檢測時長為1分鐘,其判斷條件為最大連續檢測到3次失敗即認為http service down,觸發相應的trigger,并與相應的action聯動,從而發送通知郵件。zabbix發送的通知郵件內容大致如下:

zabbix通知郵件
12.小結
以上即為zabbix實現監控Linux服務器并發送通知郵件的實現過程小記。只是zabbix的基礎入門,還有很多內容需要在不斷的使用中熟悉,也可以參考官網手冊,會有很多收獲。