Zabbix實戰篇(一步步帶你到郵件報警)
zabbix純內網環境監控伺服器傳送郵件報警
尊敬的各位大佬,親愛的小白們,以及正在剛入門zabbix的精英們,你們好,本文章適讀範圍:
- 大佬:瞅一眼就行了。
- 小白:我去,這是啥有點看不太懂。
- 正在入門zabbix:這文章還可以,先存下來,說不定以後有用。
- 打醬油的:隨手還是點個贊吧,精神上的支援,還是很重要的。
一、本章環境:
- Zabbix3.4.8伺服器OS:Centos7.2x86_64
- 郵件伺服器OS:Windows7x86_64
- 郵件客戶端OS:Windows7x86_64
- zabbix客戶端:OS:Centos7.2x86_64
二、搭建zabbix監控
搭建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 我們就會產生美好的故事~
謝謝觀看~ 再見!