1.寫在前面
本文主要介紹的是zabbix的編譯安裝過程,包含它的基礎環境LNMP,雖然zabbix官方一般推薦的環境是LAMP。以及實現簡單的監控任務,在發現問題時能夠發送通知郵件。
2.系統環境
軟件包 | 版本 |
---|---|
OS | CentOS6.8-2.6.32-642.el6.x86_64 |
nginx | nginx-1.10.3.tar.gz |
mysql | mysql-5.5.53-linux2.6-x86_64.tar.gz |
php | php-5.5.38.tar.gz |
zabbix | zabbix-3.2.4.tar.gz |
提前安裝好如下兩個包組:yum groupinstall "Development Tools" "Server Platform Development"
。
3.搭建web服務
zabbix作為監控系統需要有圖形化的頁面呈現給運維人員,它使用web+php的方式來實現。這里首先搭建其需要的web服務。我使用的是nginx-1.10.3的源碼包編譯安裝的方式。相應步驟如下:
- 添加nginx用戶
useradd nginx -s /sbin/nologin -M #不讓此用戶通過shell登錄系統
#-M不在home下創建此用戶名同名的文件夾
-
編譯安裝nginx
將前面提到的nginx-1.10.3.tar.gz
包解壓以后,cd到nginx-1.10.3
目錄中,然后使用如下參數進行configure
:
./configure --prefix=/usr/local/nginx-1.10.3 --with-http_ssl_module
--with-http_stub_status_module --with-pcre --with-user=nginx
#提前yum安裝好pcre,pcre-devel,openssl,openssl-devl
make
make install
-
創建軟鏈接至nginx
默認情況下nginx編譯安裝的路徑(prefix) 是在/usr/local/nginx
,所以創建一個軟鏈接,使用起來更方便:
ln -s /usr/local/nginx-1.10.3/ /usr/local/nginx
- 將源碼安裝的nginx執行程序放到PATH環境變量中
vim /etc/profile.d/nginx.sh
export PATH=/usr/local/nginx/sbin:$PATH
source /etc/profile.d/nginx.sh #加載文件中的參數到當前的shell環境中
在Linux中,通過源碼安裝的各類軟件包的執行程序都可以都通過這種方式放入PATH環境變量中方便使用,且相應的文件不需要賦予執行權限。
- 更改nginx文件夾屬主為nginx
chown -R nginx.nginx /usr/local/nginx-1.10.3
- 驗證web service
[root@monitor-server2 ~]# nginx -t
nginx: the configuration file /usr/local/nginx-1.10.3/conf/nginx.conf syntax
is ok
nginx: configuration file /usr/local/nginx-1.10.3/conf/nginx.conf test is
successful
[root@monitor-server2 ~]# nginx #啟動nginx程序
[root@monitor-server2 ~]# pidof nginx #檢查nginx啟動的進程,默認
#nginx一個master進程,4個worker進程,此處共5個進程ID,正常
1642 1641 1640 1639 1634
[root@monitor-server2 ~]# curl -I 127.0.0.1 #進一步驗證web service是
#否已正常
HTTP/1.1 200 OK #此處結果為正常
Server: nginx/1.10.3
Date: Sat, 22 Apr 2017 10:52:45 GMT
Content-Type: text/html
Connection: keep-alive
-
設置nginx開機自啟
這里我選擇的是直接將nginx執行程序添加到rc.local
腳本中:
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
tail /etc/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
,操作如下:
scripts/mysql_install_db --user=mysql -datadir =/usr/local/mysql/data
#執行此語句后出現兩個ok,并有一些安全方面和配置mysql自啟服務的提示則為正常
tree /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 mysqld
chkconfig 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 --prefix=/usr/local/php-5.5.38 --with-config-file-path=/usr/local \
/php-5.5.38/etc --with-bz2 --with-curl --enable-ftp --enable-sockets \
--disable-ipv6 --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local \
--with-freetype-dir=/usr/local --enable-gd-native-ttf --with-iconv-dir=/usr \
/local --enable-mbstring --enable-calendar --with-gettext --with-libxml- \
dir=/usr/local --with-zlib --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd \
--with-mysql=mysqlnd --enable-dom --enable-xml --enable-fpm --with- \
libdir=lib64 --enable-bcmath --enable-ctype --without-pear --disable-phar
configure
完成以后,會提示進行make test
,這是一個非常耗時間的過程,最后的結果有可能有一些警告,但不一定會有很大的影響,可以忽略。我在操作過程中遇到如下提示,沒有去深究它,后面編譯安裝正常完成,沒有錯誤提示,使用也還未發現問題。
FAILED TEST SUMMARY
\---------------------------------------------------------------------
Bug #64267 (CURLOPT_INFILE doesn't allow reset) [ext/curl/tests/bug64267.phpt]
\#66265: gettext doesn't switch locales within the same script [ext/gettext/tests/bug66267.phpt]
Bug #32001 (xml_parse*() goes into infinite loop when autodetection in effect), using UTF-* [ext/xml/tests/bug32001.phpt]
WARNED TEST SUMMARY
zend multibyte (2) [ext/mbstring/tests/zend_multibyte-02.phpt] (warn: XFAIL section but test passes)
zend multibyte (6) [ext/mbstring/tests/zend_multibyte-06.phpt] (warn: XFAIL section but test passes)
zend multibyte (8) [ext/mbstring/tests/zend_multibyte-08.phpt] (warn: XFAIL section but test passes)
Bug #70172 - Use After Free Vulnerability in unserialize() [ext/standard/tests/serialize/bug70172.phpt] (warn: XFAIL section but test passes)
在configure
過程中如果碰到的有錯誤提示,請根據提示信息予以解決,查看是否上述指定的包并未安裝所致。
- 安裝php-fpm
make
make install
- 設置php的軟鏈接
ln -s /usr/local/php-5.5.38/ /usr/local/php
- 將php的執行程序放入PATH變量中
echo "export PATH=/usr/local/php/sbin:/usr/local/php/bin:$PATH
" > /etc/profile.d/php.sh
source /etc/profile.d/php.sh
-
提供php的配置文件
在php
的源碼包中提供的有php的配置文件,在解壓后的目錄中將其復制到我們在configure
時指定的位置并更名為php.ini
,如:--with-config-file-path=/usr/local/php-5.5.38/etc
。
cp php.ini-production /usr/local/php-5.5.38/etc/php.ini
#在解壓后的源碼包中實際有兩個配置文件,但我們使用這個適用生產環境的這個即可
-
提供php-fpm的配置文件
php-fpm
的配置文件在執行make install
時已安裝好了,只需要將其改名即可:
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
- 啟動php-fpm
php-fpm #因為已將php執行程序路徑放入PATH變量中,所以此處可以直接使用php-fpm指令
lsof -i :9000 #查看9000端口是否被php-fpm占用,是則表明php-fpm啟動成功
-
設置php-fpm開機自啟
在編譯后的php源碼包中其實就提供了php-fpm服務腳本:./sapi/fpm/init.d.php-fpm
,我們只需要將其復制到/etc/init.d/
目錄下,并更名即可。操作如下:
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm #當前的工作目錄為編譯
#安裝后的php源碼目錄php-5.5.38
chmod +x /etc/init.d/php-fpm #賦予服務腳本可執行權限
chkconfig --add php-fpm
chkconfig php-fpm on #設置php-fpm服務開機自啟動
service php-fpm start #啟動php-fpm服務
service php-fpm status #檢查php-fpm服務狀態,或者使用之前的lsof -i :9000查看
-
將php-fpm與nginx結合
在php-fpm
可以正常啟動以后,需要配置web service可以訪問php-fpm服務,因為我這里使用的nginx
提供web service,所以修改其配置 文件/etc/usr/local/nginx/conf/nginx.conf
如下:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
include fastcgi_params;
}
可以直接將原nginx.conf
文件中與php-fpm
相關的部分的注釋直接去掉,并修改成如上所示內容。
- 測試nginx是否可正常使用php-fpm
- 要進行此測試,還需要修改
nginx.conf
中的根location
,在其首頁中添加index.php
,內容如下:
location / {
root html;
index index.php index.html index.htm;
}
- 在
nginx
的html
文件夾中使用如下指令,建立index.php
文件:
echo "<?php phpinfo(); ?>" > index.php
- 重啟nginx程序和php-fpm服務
nginx -t
nginx -s reload
service php-fpm restart
-
瀏覽器中輸入這臺server的ip后回車
正常情況下,可以顯示phpinfo的詳細信息了,如下所示:
6.搭建zabbix server
- 創建zabbix用戶
useradd -s /sbin/nologin -M zabbix
-
configure zabbix
將前面提到的zabbix-3.2.4.tar.gz
包解壓以后,cd
到解壓后的目錄(zabbix-3.2.4)后執行如下指令:
./configure --prefix=/usr/local/zabbix-3.2.4 --enable-server \
--enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2
因為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
后,會顯示如下匯總信息:
Configuration:
Detected OS: linux-gnu
Install path: /usr/local
Compilation arch: linux
Compiler: gcc
Compiler flags: -g -O2
Library-specific flags:
database: -I/usr/local/mysql/include -fPIC -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1
libXML2: -I/usr/include/libxml2
Net-SNMP: -I/usr/include/rpm -I/usr/local/include -I/usr/lib64/perl5/CORE -I. -I/usr/include
Enable server: yes
Server details:
With database: MySQL
WEB Monitoring: cURL
Native Jabber: no
SNMP: yes
IPMI: no
SSH: no
TLS: no
ODBC: no
Linker flags: -L/usr/local/mysql/lib -L/usr/lib64 -rdynamic
Libraries: -lmysqlclient -lxml2 -lnetsnmp -lcurl -lm -ldl -lrt -lresolv
Enable proxy: no
Enable agent: yes
Agent details:
TLS: no
Linker flags: -rdynamic
Libraries: -lcurl -lm -ldl -lrt -lresolv
Enable Java gateway: no
LDAP support: no
IPv6 support: yes
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
-
安裝zabbix
根據configure
完成后的提示執行make install
即可,無需執行make然后再make install。
7.建立給zabbix使用的數據庫
zabbix
要實現將其相關的配置信息,監控的信息都存儲于后臺的數據庫中,自然需要建立相應的數據庫,并配置相應的賬號。zabbix
支持多種類型的數據庫,這里只以mysql
為例,且是在zabbix server上的mysql上需要做的。
- 創建給zabbix使用的數據庫zabbix
mysql -uroot -p<password> #登錄mysql后繼續以下操作
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '<password>';
mysql> quit;
-
初始化zabbix數據庫
在zabbix的源碼解壓目錄中有一個database
目錄,其中有針對不同類型數據庫要使用的初始化sql語句,在這里需要選擇mysql目錄中的語句:
cd database/mysql
mysql -uzabbix -p<password> zabbix < schema.sql
# 如果是在zabbix proxy服務器上初始化mysql數據庫,則只導入上面一條sql語句即可,切記!
mysql -uzabbix -p<password> zabbix < images.sql
mysql -uzabbix -p<password> zabbix < data.sql
#在zabbix server上將三條語句全部導入
-
修改zabbix server配置文件
源碼安裝的zabbix,其配置文件默認位于其安裝目錄的etc
目錄中,即:/usr/local/zabbix/etc
下,server的為zabbix_server.conf
,此時修改其連接數據庫的相關信息即可,默認連接的數據庫即為本機的數據庫,數據庫即為zabbix,密碼為空,所以將密碼設置為前面創建的密碼即可。
DBPassword=<password>
-
修改zabbix agent的配置文件
文件位置和server的一樣,需要修改的地方有如下幾處:
Server=127.0.0.1 #設置允許哪些zabbix server連接此agent
ServerActive=127.0.0.1 #設置為zabbix server地址,用于agent主動發送監控數據給server端
Hostname=Zabbix server #這個地方設置要和configuration-->host設置的host名稱一致
-
設置zabbix server和agent開機自啟動
zabbix原生也提供了用于實現開機自啟動的服務腳本,它們在3.2.4版本中位于解壓后的目錄/root/softwares/zabbix-3.2.4/misc/init.d
,這個目錄下有針對不同類型系統的腳本,這里我選擇的是fedora這一目錄中的腳本,腳本位置及名稱如下:
[root@monitor-server2 core]# pwd
/root/softwares/zabbix-3.2.4/misc/init.d/fedora/core
[root@monitor-server2 core]# ll
total 8
-rwxr-xr-x 1 1000 1000 2170 Feb 27 17:22 zabbix_agentd
-rwxr-xr-x 1 1000 1000 2181 Feb 27 17:22 zabbix_server
很明顯分別有針對server和agent的腳本,把它們復制到/etc/init.d/
目錄下:
cp zabbix_agentd /etc/init.d
cp zabbix_server /etc/init.d
打開這兩個文件(zabbix_agentd和zabbix_server)查看其內容,根據實際情況進行修改,一般需要更改的只是如下內容:
# Zabbix-Directory
BASEDIR=/usr/local #將此處改為/usr/local/zabbix即可
#congifure如果不指定zabbix的prefix,它默認直接安裝到/usr/local目錄下
將這兩個服務安裝添加到自啟動中:
chkconfig --add zabbix_agentd
chkconfig --add zabbix_server
chkconfig zabbix_agentd on
chkconfig zabbix_server on
- 啟動zabbix server和agent程序
service zabbix_server start
service zabbix_anentd start
[root@monitor-server2 ~]# ss -tnl | grep -E "10050|10051"
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 *:10051 *:*
#zabbix server和agent啟動成功
8.安裝zabbix web程序
zabbix對于監控的結果可以通過web頁面來進行展示和查看,它需要安裝一個使用php程序來運行的web站點,根據zabbix的官方要求,還有如下php的參數需要提前修改:
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
date.timezone = Asia/Shanghai #建議設成國內標準時區
上述修改都在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
目錄中的全部內容復制過來。
mkidr /usr/local/nginx/html/zabbix #nginx默認的站點根目錄為其安裝路徑下的html
cd frontends/php
cp -a . /usr/local/nginx/html/zabbix
-
打開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的環境如下: **
Pre-requisite | Minimum value | Description |
---|---|---|
PHP version | 5.4.0 | |
PHP memory_limit option | 128MB | In php.ini:memory_limit = 128M |
PHP post_max_size option | 16MB | In php.ini:post_max_size = 16M |
PHP upload_max_filesize option | 2MB | In php.ini:upload_max_filesize = 2M |
PHP max_execution_time option | 300 seconds (values 0 and -1 are allowed) | In php.ini:max_execution_time = 300 |
PHP max_input_time option | 300 seconds (values 0 and -1 are allowed) | In php.ini:max_input_time = 300 |
PHP session.auto_start option | must be disabled | In php.ini:session.auto_start = 0 |
Database support | One of: IBM DB2, MySQL, Oracle, PostgreSQL, SQLite | One of the following modules must be installed:ibm_db2, mysql, oci8, pgsql, sqlite3 |
bcmath | php-bcmath | |
mbstring | php-mbstring | |
PHP mbstring.func_overload option | must be disabled | In php.ini:mbstring.func_overload = 0 |
PHP always_populate_raw_post_data option | must be disabled | Required only for PHP versions 5.6.0 or newer.In php.ini:always_populate_raw_post_data = -1 |
sockets | php-net-socket. Required for user script support. | |
gd | 2.0 or higher | php-gd. PHP GD extension must support PNG images (--with-png-dir), JPEG (--with-jpeg-dir) images and FreeType 2 (--with-freetype-dir). |
libxml | 2.6.15 | php-xml or php5-dom |
xmlwriter | php-xmlwriter | |
xmlreader | php-xmlreader | |
ctype | php-ctype | |
session | php-session | |
gettext | php-gettext,Since Zabbix 2.2.1, the PHP gettext extension is not a mandatory requirement for installing Zabbix. If gettext is not installed, the frontend will work as usual, however, the translations will not be available. |
php環境檢測通過的結果如下圖所示:
-
配置zabbix web連接的數據庫
數據庫為本機名為zabbix的mysql數據庫,賬戶名和密碼輸入此前創建zabbix數據庫時配置授權的賬戶和密碼。
-
配置zabbix server信息
這里在Name處可以填上本機的主機名,其它保持默認即可。
- zabbix web安裝信息匯總
-
生成zabbix web的配置文件并導入站點配置目錄中
zabbix web安裝程序會自動生成一個名為zabbix.conf.php
的配置文件,并嘗試自動將其放入zabbix站點配置目錄中,但由于權限問題,會創建失敗,此時只需要通過瀏覽器下載,然后手動入到指定目錄即可,web安裝程序會有相關提示,如下圖所示:
文件導入完成后,點擊
Finish
,會出現以下信息,即表示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用戶。
useradd -s /sbin/nologin -M zabbix
在被監控的Linunx server上,只需要安裝zabbix agent,在configure時使用如下參數即可:
./configure --prefix=/usr/local/zabbix-3.2.4 --enable-agent
configure完成以后,注意觀察匯總信息是否有錯誤提示,是否只啟用了agent,有問題根據實際情況去排查并解決。如果沒有錯誤,則根據提示信息執行make install
完成安裝過程。
被監控端設置軟鏈接,添加zabbix執行程序路徑至PATH變量,修改zabbix_agentd.conf
文件以及zabbix_agentd服務開機自啟的過程參考前文相關內容即可,此處不在贅述。
最后啟動被監控端的zabbix_agentd服務。
service zabbix_agentd start
10.zabbix server上配置監控內容
在zabbix server上配置剛安裝了zabbix agent的主機,并設置要監控的內容。
-
添加要監控的主機
在zabbix web上添加要監控的主機,選擇Configuration
---->Hosts
--->Create host
,在如下界面中填寫相應信息:
根據實際情況填寫主機名,選擇主機分組,主機ip,對于主機分組此處我選擇
Linux servers
作為示例。然后可以選擇
Host
旁的Templates
,zabbix內置了很多種不同的模板,它包含的有監控條目item
,告警觸發器trigger
,圖形展示Graphs
,屏幕Screens
等。以下為給主機應用模板的操作過程:
示例中的
server3
上我啟用的有web服務,所以這里選擇了zabbix內置的Template App HTTP Serivice
這一模板對http服務進行監控。 等待片刻,ZBX
會顯示成綠色即表示zabbix server能和server3上的zabbix agent正常通信了,如下所示:
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
,創建內容如下:
-
建立通知郵件腳本
默認情況下通知郵件腳本應該存放在/usr/local/zabbix/share/zabbix/alertscripts
,直接在這個路徑下建立相應的腳本即可,如果腳本不是存放在此處,需要修改zabbix_server.conf
文件中此處# AlertScriptsPath=${datadir}/zabbix/alertscripts
取消掉注釋并寫上腳本完整的存放路徑。mail.sh的內容如下:
#!/bin/bash
#
file=/tmp/mailtmp.txt
echo "$3" > $file #$3為上一步中定義的{ALERT.MESSAGE},即告警詳細信息
dos2unix -k $file #實際使用中發現zabbix所發郵件的正文會以一
#個.dat結尾的文件作為附件來進行發送,使用dos2unix將郵件正文進行格
#式轉換,這樣在收到郵件后正文直接顯示通知的正文,-k是保持文件的時
#間戳不變。
/bin/mail -s "$2" $1 < $file #$2為上一步中定義的{ALERT.SUBJECT},即
#郵件主題,$1為上一步中定義的{ALERT.SENDTO}即收件人。
-
定義收件人郵件地址
在zabbix中每個用戶可以關聯多個Media type
,在這里我給Admin
這一用戶關聯上前面已經定義好的名為user mail
的Media type,并填上其郵件地址,即zabbix發送郵件通知時的收件人郵件地址。在zabbix web上依次選擇Administration
,Users
,Admin
,Media
標簽,然后點擊Add
,給這一用戶定義一個media,此處選擇user mail
,如下所示:
-
設置發送通知的action
zabbix中只有設置 了action,它才知道應該如何發送通知,如在什么條件下發送,通知通過哪個media type發送,發送給哪些人,發送的頻率是怎么樣的,發送的通知主題和正文是怎樣的,當故障恢復以后如何發送通知等。 這些必須在action中定義好。以下為配置示例,當被監控端不是在工程態(維護狀態)中,發生了Problem
事件,即將相關信息發送給zabbix administraotrs
組內的所有用戶且通過上面自定義的user mail
這一media發送。
大致過程如下:依次選擇Configuration
,Actions
,Create 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
中增加如下內容:
set from=zabbix@163.com #提供一個可用的163郵箱
set smtp=smtp.163.com
set smtp-auth-user=zabbix
set smtp-auth-password=xxxxxx #163郵箱的授權碼,在郵箱網頁中去設置
set smtp-auth=login
-
制造告警測試是否正常收到通知郵件
將server3的web service停掉,將近3分鐘查看郵件客戶端,收到了zabbix發送的通知郵件。這個從故障發生到zabbix發送通知消息的時長,取決于監控的item配置的檢測時長和trigger判斷條件,默認的http service的檢測時長為1分鐘,其判斷條件為最大連續檢測到3次失敗即認為http service down,觸發相應的trigger,并與相應的action聯動,從而發送通知郵件。zabbix發送的通知郵件內容大致如下:
12.小結
以上即為zabbix實現監控Linux服務器并發送通知郵件的實現過程小記。只是zabbix的基礎入門,還有很多內容需要在不斷的使用中熟悉,也可以參考官網手冊,會有很多收獲。