1. 程式人生 > >Zabbix實戰篇(一步步帶你到郵件報警)

Zabbix實戰篇(一步步帶你到郵件報警)

zabbix純內網環境監控伺服器傳送郵件報警

尊敬的各位大佬,親愛的小白們,以及正在剛入門zabbix的精英們,你們好,本文章適讀範圍:

  • 大佬:瞅一眼就行了。
  • 小白:我去,這是啥有點看不太懂。
  • 正在入門zabbix:這文章還可以,先存下來,說不定以後有用。
  • 打醬油的:隨手還是點個贊吧,精神上的支援,還是很重要的。

一、本章環境:

  • Zabbix3.4.8伺服器OS:Centos7.2x86_64
  • 郵件伺服器OS:Windows7x86_64
  • 郵件客戶端OS:Windows7x86_64
  • zabbix客戶端:OS:Centos7.2x86_64

二、搭建zabbix監控

搭建zabbix可以參考我的這篇文章:

https://blog.csdn.net/qq_39591494/article/details/78983861 (此文章為3.2版本)本章使用zabbix3.4.8版本,由於版本不同的問題,在配置方面也會有不同之處,那麼同時可以參考以下內網一鍵安裝zabbix指令碼來完成此搭建。

#!/bin/bash
#Data: Fri May  4 09:37:26 CST 2018
#Founder: <daasbank-yankai>
#describe: One button installation zabbix3.4.8
#Edition: V1
#OS: Centos7.2x86_64
. /etc/init.d/functions
MMM=`rpm -qa | grep mariadb`
Route=/usr/local/src
################################################################
#mount iamges!
################################################################
function MOUNT(){
rm -rf /etc/yum.repos.d/*
mount /usr/local/src/CentOS-7-x86_64-DVD-1511.iso /mnt
cat <<daasbank > /etc/yum.repos.d/aaa.repo
[aaa]
name=aaa
baseurl=file:///mnt
enabled=1
gpgcheck=0
daasbank
sleep 3		
yum install -y make apr* autoconf automake curl-devel gcc gcc-c++  openssl openssl-devel perl  compat* mpfr cpp glibc libgomp 
sleep 3
yum install -y libstdc++-devel keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm*
sleep 3
yum install -y freetype libjpeg* libpng* libtool* libxml2 libxml2-devel patch libcurl-devel bzip2-devel freetype-devel2 
sleep 3
yum install -y freetype-devel  net-snmp-devel freetype-devel net-snmp-devel net-snmp net-snmp-devel curl-devel 
sleep 3
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel  OpenIPMI-devel  libssh2-devel
}

################################################################
#Install MySQL5.7.18
################################################################
function Mysql(){
if [ -n $MMM ];then
		rpm -e mariadb-libs --nodeps 2&>/dev/null
	else
		echo "Mariadb error!!!"
		return 1
fi

tar zxf $Route/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz && {
	mv $Route/mysql-5.7.18-linux-glibc2.5-x86_64 /usr/local/mysql && \
		cd /usr/local/mysql/ && mkdir data && mkdir log && echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
	if [ "$?" -eq 0 ];then
		source /etc/profile && groupadd mysql && useradd -r -g mysql -s /bin/false mysql 
	else
		echo "Mysql error !!!"
		return 1
	fi
}
cat << daasbank-mysql > /etc/my.cnf  
[client]      
socket=/usr/local/mysql/mysql.sock      
[mysqld]      
basedir=/usr/local/mysql      
datadir=/usr/local/mysql/data      
pid-file=/usr/local/mysql/data/mysqld.pid      
socket=/usr/local/mysql/mysql.sock      
log_error=/usr/local/mysql/log/mysql.err    
daasbank-mysql
	if [ -f /etc/my.cnf ];then
		chmod 750 data/ && chown -R mysql . && chgrp -R mysql . && bin/mysqld --initialize --user=mysql && cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld && service mysqld start
	else
		echo "/etc/my.cnf error !!!"
		return 1
	fi
#######################################################################
#Mysql password install
#######################################################################
ln -s /usr/local/mysql/bin/mysql /usr/local/sbin 
ln -s /usr/local/mysql/bin/mysqladmin /usr/local/sbin
PASS=`cat /usr/local/mysql/log/mysql.err | grep password | awk '{print $11}'` 
mysqladmin -uroot -p${PASS} password 111111 &> /dev/null
	if [ "$?" -eq 0 ];then
		echo "Mysql password is ok!"
	else
		echo "Mysql password is not ok!!!"
		return 1
	fi
}

#######################################################################
#Install Nginx1.12.2
#######################################################################
function Nginx(){
cd $Route && {
tar zxf $Route/nginx-1.12.2.tar.gz &&  cd nginx-1.12.2/ && \
	./configure  --prefix=/usr/local/nginx --with-http_dav_module   --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx && make && make install
useradd -M -s /sbin/nologin nginx
}
if [ "$?" -eq  0 ];then
		ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin && /usr/local/nginx/sbin/nginx 
	else
		echo "Nginx Install error!!!"
		exit 1
fi
}
########################################################################
#Intsall LIB.so
########################################################################
function Lib(){
cd $Route && {
tar zxf libevent-2.1.8-stable.tar.gz && cd libevent-2.1.8-stable && ./configure && make && make install
	if [ "$?" -eq 0 ];then
		echo "libevent install is ok!!!"
	else
		echo "libevent install is not ok!!!"
	return 1
	fi
}
cd $Route && {
tar zxf libmcrypt-2.5.7.tar.gz && cd libmcrypt-2.5.7 && ./configure && make && make install 
	if [ "$?" -eq 0 ];then
		echo "libmcrypt-2.5.7 install is ok!!!"
	else
		echo "libmcrypt-2.5.7 install is not ok!!!"
		return 1
	fi
}
cd $Route && {
tar zxf fping-3.10.tar.gz && cd fping-3.10/  && ./configure && make && make install 
	if [ "$?" -eq 0 ];then
		echo "fping-3.10.tar.gz install is ok!!!"
	else
		echo "fping-3.10.tar.gz install is not ok!!!"
		return 1
	fi
}
}
##########################################################################
#Install php5.6
##########################################################################
function php(){
cd $Route && {
tar zxf php-5.6.25.tar.gz && cd php-5.6.25  && \
	./configure --prefix=/usr/local/php5.6 --with-config-file-path=/etc  --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/usr/local/mysql/mysql.sock --with-gd --with-iconv --with-libxml-dir=/usr --with-mhash --with-mcrypt --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-zlib --with-freetype-dir --with-png-dir --with-jpeg-dir --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl
if [ "$?" -eq  0 ];then
	make && make install
else
	echo "php install ./configure error!!!!"
	return 1
fi
}
cd $Route/php-5.6.25 && {
	cp php.ini-production /etc/php.ini && cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && chmod +x /etc/init.d/php-fpm && chkconfig --add php-fpm && chkconfig php-fpm on 
}
	if [ "$?" -eq 0 ];then
		cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
	else
		echo "php Environmental Science ERROR!!!"
		return 1
	fi
if [ ! -d /usr/local/php5.6/etc/php-fpm.conf ]
	 then    
		sed -i 's#;pid = run/php-fpm.pid#pid = run/php-fpm.pid#g' /usr/local/php5.6/etc/php-fpm.conf    
		sed -i 's/listen = 127.0.0.1:9000/listen = 127.0.0.1:9000/g' /usr/local/php5.6/etc/php-fpm.conf    
		sed -i 's/pm.max_children = 5/pm.max_children = 300/g' /usr/local/php5.6/etc/php-fpm.conf    
		sed -i 's/pm.start_servers = 2/pm.start_servers = 20/g' /usr/local/php5.6/etc/php-fpm.conf    
		sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 20/g' /usr/local/php5.6/etc/php-fpm.conf    
		sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 100/g' /usr/local/php5.6/etc/php-fpm.conf    
		sed -i 's/user = nobody/user = nginx/g' /usr/local/php5.6/etc/php-fpm.conf  
		sed -i 's/group = nobody/group = nginx/g' /usr/local/php5.6/etc/php-fpm.conf
	 else
		echo "php-fpm.conf ERROR!!!"
	return 1
fi
	if [ $? -eq 0 ]
		then
			systemctl start php-fpm && echo "php install is ok!!!"
		else
			echo "php install is not ok!!!"
		return 1
	fi
}
##################################################################################
#Install nginx && php config!
##################################################################################
function nginx-php(){
if [ -f /usr/local/nginx/conf/nginx.conf ];then
	sed -i 's/index  index.html index.htm;/index  index.php index.html index.htm;/g' /usr/local/nginx/conf/nginx.conf    
	sed -i 's/#    root           html;/    root           html;/g' /usr/local/nginx/conf/nginx.conf
	sed -i 's/#    fastcgi_pass   127.0.0.1:9000;/    fastcgi_pass   127.0.0.1:9000;/g' /usr/local/nginx/conf/nginx.conf   
	sed -i 's/#    fastcgi_index  index.php;/    fastcgi_index  index.php;/g' /usr/local/nginx/conf/nginx.conf 
	sed -i 's*#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;*    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;*g' /usr/local/nginx/conf/nginx.conf    
	sed -i 's/#    include        fastcgi_params;/    include        fastcgi.conf;/g' /usr/local/nginx/conf/nginx.conf
	sed -i '71d' /usr/local/nginx/conf/nginx.conf && sed -i 'N;70a}' /usr/local/nginx/conf/nginx.conf
	sed -i '65d' /usr/local/nginx/conf/nginx.conf && sed -i 'N;64alocation ~ \\.php$ {' /usr/local/nginx/conf/nginx.conf   
else
	echo "Nginx && php ERROR!!!"
	return 1
fi
touch /usr/local/nginx/html/daasbank.php
cat << daasbank-lnmp >/usr/local/nginx/html/daasbank.php
<?php  
phpinfo();  
?>  
daasbank-lnmp
/usr/local/nginx/sbin/nginx -s reload
if [ "$?" -eq 0 ];then
	echo "LNMP is ok! Please Visit http://IP/daasbank.php"
	else
		echo "LNMP is not ok!!!"
		return 1
fi
}
############################################################################
#Install zabbix3.4.8
############################################################################
function zabbix(){
groupadd zabbix && useradd -g zabbix zabbix
		sed -i 's/;date.timezone =/date.timezone = PRC/g' /etc/php.ini  
		sed -i 's/expose_php = On/expose_php = Off/g' /etc/php.ini  
		sed -i 's/short_open_tag = Off/short_open_tag = On/g' /etc/php.ini  
		sed -i 's/post_max_size = 8M/post_max_size = 16M/g' /etc/php.ini  
		sed -i 's/max_execution_time = 30/max_execution_time = 300/g' /etc/php.ini  
		sed -i 's/max_input_time = 60/max_input_time = 300/g' /etc/php.ini  
		sed -i 's/;always_populate_raw_post_data = -1/always_populate_raw_post_data = -1/g' /etc/php.ini  
		sed -i 's/;mbstring.func_overload = 0/mbstring.func_overload = 0/g' /etc/php.ini
cd $Route && {
	tar zxf zabbix-3.4.8.tar.gz && cd zabbix-3.4.8 && \
	./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-java --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl
	if [ "$?" -eq 0 ];then
		make && make install 
	else
		echo "zabbix install error !!!"
		return 1
	fi
}
ln -s /usr/local/zabbix/bin/* /usr/local/bin/  
ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
/usr/local/mysql/bin/mysql -uroot -p111111 -e "create database zabbix character set utf8;"
/usr/local/mysql/bin/mysql -uroot -p111111 -e "grant all privileges on zabbix.* to 
[email protected]
identified by 'zabbix';" if [ "$?" -eq 0 ] then echo "user zabbix mysql is ok!!!" else echo "user zabbix mysql is not ok!!!" return 1 fi cd $Route/zabbix-3.4.8/database/mysql && { /usr/local/mysql/bin/mysql -uzabbix -pzabbix -hlocalhost zabbix < schema.sql /usr/local/mysql/bin/mysql -uzabbix -pzabbix -hlocalhost zabbix < images.sql /usr/local/mysql/bin/mysql -uzabbix -pzabbix -hlocalhost zabbix < data.sql } if [ "$?" -eq 0 ] then echo "zabbix is mysql database is ok!" else echo "zabbix is mysql database is not ok!" fi sed -i 's$LogFile=/tmp/zabbix_server.log$LogFile=/usr/local/zabbix/logs/zabbix_server.log$g' /usr/local/zabbix/etc/zabbix_server.conf sed -i 's$# PidFile=/tmp/zabbix_server.pid$PidFile=/usr/local/zabbix/logs/zabbix_server.pid$g' /usr/local/zabbix/etc/zabbix_server.conf sed -i 's/# DBHost=localhost/DBHost=localhost/g' /usr/local/zabbix/etc/zabbix_server.conf sed -i 's/# DBPassword=/DBPassword=zabbix/g' /usr/local/zabbix/etc/zabbix_server.conf sed -i 's/# DBPort=3306/DBPort=3306/g' /usr/local/zabbix/etc/zabbix_server.conf sed -i 's$# FpingLocation=/usr/sbin/fping$FpingLocation=/usr/sbin/fping$g' /usr/local/zabbix/etc/zabbix_server.conf sed -i 's$# DBSocket=/tmp/mysql.sock$DBSocket=/usr/local/mysql/mysql.sock$g' /usr/local/zabbix/etc/zabbix_server.conf mkdir -p /usr/local/zabbix/logs && chown -R zabbix:zabbix /usr/local/zabbix/ cat << daasbank-zabbix >/etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/mysql/lib /usr/local/lib daasbank-zabbix /usr/local/nginx/sbin/nginx -s reload && /etc/init.d/php-fpm restart if [ "$?" -eq 0 ];then echo "zabbix && nginx && php restart is ok!!!" else echo "zabbix && nginx && php restart is not ok!!!" return 1 fi cd $Route/zabbix-3.4.8/ && { cp misc/init.d/fedora/core/zabbix_server /etc/rc.d/init.d/zabbix_server cp misc/init.d/fedora/core/zabbix_agentd /etc/rc.d/init.d/zabbix_agentd chmod +x /etc/rc.d/init.d/zabbix_server chmod +x /etc/rc.d/init.d/zabbix_agentd chkconfig --add zabbix_server chkconfig --add zabbix_agentd chkconfig zabbix_server on chkconfig zabbix_agentd on sed -i 's$BASEDIR=/usr/local$BASEDIR=/usr/local/zabbix/$g' /etc/rc.d/init.d/zabbix_server sed -i 's*PIDFILE=/tmp/$BINARY_NAME.pid*PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid*g' /etc/rc.d/init.d/zabbix_server sed -i 's$BASEDIR=/usr/local$BASEDIR=/usr/local/zabbix/$g' /etc/rc.d/init.d/zabbix_agentd sed -i 's*PIDFILE=/tmp/$BINARY_NAME.pid*PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid*g' /etc/rc.d/init.d/zabbix_agentd ldconfig && systemctl daemon-reload /etc/init.d/zabbix_agentd start &>/dev/null /etc/init.d/zabbix_server start &>/dev/null } if [ "$?" -eq 0 ];then echo "zabbix Being configured....." else echo "zabbix start is not ok!!!" fi mkdir /usr/local/nginx/html/zabbix/ if [ -d /usr/local/nginx/html/zabbix ];then cp -r $Route/zabbix-3.4.8/frontends/php/* /usr/local/nginx/html/zabbix/ else echo "zabbix mkdir error!!!" return 1 fi chown -R nginx:nginx /usr/local/nginx/html/zabbix if [ "$?" -eq 0 ];then echo "zabbix install is ok pleses http://IP/zabbix" else echo "zabbix install is not ok!!! error!" return 1 fi } function main(){ MOUNT Mysql Nginx Lib php nginx-php zabbix } main

可能會有疑問了,這個指令碼怎麼執行啊?我咋執行不起來呢?

解答:此指令碼專門為:Centos7.2x86_64位作業系統編寫的一鍵安裝,並且為純內網環境,所以打包,下載,本地yum源都需要軟體提供,在執行此指令碼之前需要上傳5-6個安裝包。 那如何獲取包。這裡可以聯絡我。WeChat 宣告:(非廣告-文章特殊情況) 獲取完包之後上傳至->zabbix伺服器/usr/local/src --> 解壓如下:

2.1、執行指令碼安裝zabbix監控如下:

[[email protected] src]# source zabbix_install.sh

此時可以去抽根菸、躺會、看會電視、等待著結束。安裝過程時間(10-15分鐘)

2.2、指令碼結束會有以下提示:

2.3、提示訪問http://IP/zabbix 訪問如下:

初始賬號密碼:admin---zabbix

到此刻-zabbix服務已經搭建完畢!

三、搭建郵件伺服器

3.1、軟體下載

安裝該軟體需要提供需要Microsoft .NET Framework Version 2.0支援,微軟官方下載地址: 

hs-3879http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displayLang=en

3.2、安裝

設定管理控制檯的密碼

等待安裝結束

當我們連線到管理控制檯的時候需要輸入之前此的密碼(此處填寫剛剛設定的密碼)

如何漢化?

漢化完成後如下:

若按照以上操作並沒有漢化成功,請重啟計算機

3.3、配置郵件伺服器

先新增一個域

如果需要,可以更改一下限制,域使用的空間、郵件的最大尺寸、使用者最大空間、使用者數等等,比如,這裡整個硬碟只有60G空間的話,每個使用者1G,允許最大的郵件為30M,太大了對伺服器的壓力太大了,我們可以按如下圖設定進行限制設定

接著我們要為使用者建立帳號了,輸入使用者名稱、密碼,儲存,記得這裡也要設定一下使用者空間大小不超過1G就可以儲存了,因為上面我們做好了限制.

在這裡為了測試郵件能夠正常傳送 我建立兩個賬號

到目前為止,郵件伺服器配置結束,接下來配置客戶端

3.4、配置郵件客戶端

郵件客戶端,我們可以使用foxmail或者outlook等,這裡我使用的是foxmail

登入foxmail賬號   yankai及zhangsan 測試郵件是否可以正常傳送

192.168.1.120 是郵件伺服器的IP地址(點選創建出現以下介面)

提示:zhangsan使用者的郵箱和以上設定是一樣的 這裡不做演示

3.5、測試郵件是否能夠正常通訊

3.5.1、測試zhangsan傳送郵件---->[email protected] 郵箱賬號

3.5.2、使用yankai郵箱賬號測試是否收到郵件

到目前為止內網郵件伺服器搭建完畢!

四、安裝zabbix客戶端

或者可以使用以上指令碼中的zabbix-agent片段來執行,在此處不做演示!

五、監控一臺主機

5.1、新增主機

5.2、配置監控web服務若狀態碼非200,則觸發災難觸發器

5.3、配置web場景監控zabbix_agent_webserver(配置過程:略)

5.4、為了方便測試配置web場景觸發器當最新的狀態碼==200時觸發災難警告!!!(配置過程:略)

5.5、配置zabbix郵件報警設定,當zabbix-agent(webserver)== 200時 觸發郵件報警

需要注意並嚴謹的配置如下:

5.5.1、動作配置

5.5.2、報警媒介型別配置

以上走25埠不走ssl 具體看郵件伺服器配置~ 在使用者名稱稱下面有密碼 直接輸入郵箱密碼就可以了。

六、驗證郵件報警

6.1、在以上設定的觸發器條件中如果狀態碼==200 那麼就觸發災難,那麼在配置郵件的時候(如果有災難發生-那麼我就觸發動作-那麼在這裡的動作就是email郵件報警)

流程:首先配置了web檢測 ----->配置了觸發器條件如果狀態碼==200則災難 ---->配置了動作如果出現了災難情況那麼觸發email-->通過email中的配置指向內網郵箱地址[email protected]

以上圖片中顯示已經發送成功 這時候需要去郵箱中檢視郵件報警內容

此時我們可以正常的收到郵件。

七、問?

一、為什麼會一直髮送那麼多郵件,為什麼==200時儀表盤的問題閃的會那麼多。

答:因為在配置web觸發器中配置了多重,所以會有那麼多。

2、用163郵箱和qq郵箱不行嗎? 為什麼還要自己搭建個郵件伺服器?

答:用163和qq當然可以,只不過在很多大型公司都是內網如果要求使用zabbix去監控併發送郵件報警該怎麼辦?

3、你寫的這個文章IP地址好亂,能不能寫一下客戶端服務端郵件伺服器的IP地址?

答:可以

zabbix_server-IP地址:192.168.1.100

zabbix_agent-IP地址:192.168.1.110

郵件伺服器IP地址:192.168.1.120

郵件客戶端foxmail-IP地址:192.168.1.130

4、我覺得寫的還是可以看的下去的,我以後要看咋辦?

點選關注應該就不會迷路,多一份關注,多一份愛~~~~

本章內容到此結束,若在過程中遇到問題---->請前往主頁左側找到顯眼的wx 我們就會產生美好的故事~

謝謝觀看~ 再見!