zabbix纯内网环境监控服务器发送邮件报警

Linux | zabbix | 实战篇(一步步带你到邮件报警)

 

一、本章环境:


  • Zabbix3.4.8服务器OS:Centos7.6x86_64
  • 邮件服务器OS:Windows10x86_64
  • 邮件客户端OS:Windows10x86_64
  • zabbix客户端:OS:Centos7.6x86_64

二、搭建zabbix监控


搭建zabbix可以参考我的这篇文章:https://blog.csdn.net/Kangshuo2471781030/article/details/79261753 (此文章为3.2版本)本章使用zabbix4.0.5版本,由于版本不同的问题,在配置方面也会有不同之处,那么同时可以参考以下内网一键安装zabbix脚本来完成此搭建。

#!/bin/bash

#Data: Fri May 4 09:37:26 CST 2018

#Founder: <kang-blxh>

#describe: One button installation zabbix3.4.8

#Edition: V1

#OS: Centos7.6x86_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-1810.iso /mnt

cat <<kang > /etc/yum.repos.d/centos.repo

[centos]

name=centos

baseurl=file:///mnt

enabled=1

gpgcheck=0

kang

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 MySQL8.0.15

################################################################

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-8.0.15-el7-x86_64.tar.gz && {

mv $Route/mysql-8.0.15-el7-x86_64 /usr/local/mysql && \

cd /usr/local/mysql/ && mkdir data  && 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 << kang > /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/data/mysql.err

kang

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/data/mysql.err | grep password | awk '{print $11}'`

mysqladmin -uroot -p${PASS} password pwd123 &> /dev/null

if [ "$?" -eq 0 ];then

echo "Mysql password is ok!"

else

echo "Mysql password is not ok!!!"

return 1

fi

}


#######################################################################

#Install Nginx1.15.9

#######################################################################

function Nginx(){

cd $Route && {

tar zxf $Route/nginx-1.15.9.tar.gz && cd nginx-1.15.9/ && \

./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-4.2.tar.gz && cd fping-4.2/ && ./configure && make && make install

if [ "$?" -eq 0 ];then

echo "fping-4.2.tar.gz install is ok!!!"

else

echo "fping-4.2.tar.gz install is not ok!!!"

return 1

fi

}

}

##########################################################################

#Install php5.6.25

##########################################################################

function php(){

cd $Route && {

tar zxf php-5.6.25.tar.gz && cd php-5.6.25 && \

./configure --prefix=/usr/local/php5.6.25 --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/kang.php

cat << kang >/usr/local/nginx/html/kang.php

<?php

phpinfo();

?>

kang

/usr/local/nginx/sbin/nginx -s reload

if [ "$?" -eq 0 ];then

echo "LNMP is ok! Please Visit http://IP/kang.php"

else

echo "LNMP is not ok!!!"

return 1

fi

}

############################################################################

#Install zabbix4.0.5

############################################################################

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-4.0.5.tar.gz && cd zabbix-4.0.5 && \

./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 zabbix@localhost 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-4.0.5/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 << kang >/etc/ld.so.conf

include ld.so.conf.d/*.conf

/usr/local/mysql/lib

/usr/local/lib

kang

/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-4.0.5/ && {

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-4.0.5/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.6x86_64位操作系统编写的一键安装,并且为纯内网环境,所以打包,下载,本地yum源都需要软件提供,在运行此脚本之前需要上传5-6个安装包. 获取完包之后上传至->zabbix服务器/usr/local/src --> 解压如下:

2.1、运行脚本安装zabbix监控如下:

[root@bogon src]# source zabbix_install.sh

此时可以去抽根烟、躺会、看会电视、等待着结束。安装过程时间(10-15分钟)

 

2.2、脚本结束会有以下提示:

2.3、提示访问http://IP/zabbix 访问如下:

初始账号密码:admin---zabbix

到此刻-zabbix服务已经搭建完毕!

三、搭建邮件服务器


3.1、软件下载

下载软件安装包可以在:http://www.hmailserver.com/ 官网下载

安装该软件需要提供需要Microsoft .NET Framework Version 2.0支持,微软官方下载地址: 

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

3.2、安装

设置管理控制台的密码

等待安装结束

当我们连接到管理控制台的时候需要输入之前此的密码(此处填写刚刚设置的密码)

如何汉化?

参考:https://www.hmailserver.org/viewtopic.php?f=5&t=13

汉化完成后如下:

若按照以上操作并没有汉化成功,请重启计算机

3.3、配置邮件服务器

先添加一个域

如果需要,可以更改一下限制,域使用的空间、邮件的最大尺寸、用户最大空间、用户数等等,比如,这里整个硬盘只有60G空间的话,每个用户1G,允许最大的邮件为30M,太大了对服务器的压力太大了,我们可以按如下图设置进行限制设定

 

接着我们要为用户创建帐号了,输入用户名、密码,保存,记得这里也要设置一下用户空间大小不超过1G就可以保存了,因为上面我们做好了限制.

在这里为了测试邮件能够正常发送 我建立两个账号

到目前为止,邮件服务器配置结束,接下来配置客户端

3.4、配置邮件客户端

邮件客户端,我们可以使用foxmail或者outlook等,这里我使用的是foxmail

foxmail官网:http://www.foxmail.com/ 下载即可(安装过程:略)

登录foxmail账号   yankai及zhangsan 测试邮件是否可以正常发送

192.168.1.120 是邮件服务器的IP地址(点击创建出现以下界面)

提示:zhangsan用户的邮箱和以上设置是一样的 这里不做演示

3.5、测试邮件是否能够正常通信

3.5.1、测试zhangsan发送邮件---->yankai@aab.cn 邮箱账号

3.5.2、使用yankai邮箱账号测试是否收到邮件

到目前为止内网邮件服务器搭建完毕!

四、安装zabbix客户端


zabbix客户端的安装可以参考:https://blog.csdn.net/qq_39591494/article/details/78983861 此文章。 

或者可以使用以上脚本中的zabbix-agent片段来运行,在此处不做演示!

五、监控一台主机


5.1、添加主机

提示:本章不会做太详细的配置监控说明,可以参考:https://blog.csdn.net/qq_39591494/article/details/80504256 (详细配置说明文章)

5.2、配置监控web服务若状态码非200,则触发灾难触发器

5.3、配置web场景监控zabbix_agent_webserver(配置过程:略)

https://blog.csdn.net/qq_39591494/article/details/80504256 (详细配置说明文章)

5.4、为了方便测试配置web场景触发器当最新的状态码==200时触发灾难警告!!!(配置过程:略)

https://blog.csdn.net/qq_39591494/article/details/80504256 (详细配置说明文章)

5.5、配置zabbix邮件报警设置,当zabbix-agent(webserver)== 200时 触发邮件报警

前言:在配置邮件报警的过程中可以参考我的这篇文章:https://blog.csdn.net/qq_39591494/article/details/80504256 (详细配置说明文章)

需要注意并严谨的配置如下:

5.5.1、动作配置

5.5.2、报警媒介类型配置

以上走25端口不走ssl 具体看邮件服务器配置~ 在用户名称下面有密码 直接输入邮箱密码就可以了。

其他的都可以参考:https://blog.csdn.net/qq_39591494/article/details/80504256 

六、验证邮件报警


6.1、在以上设置的触发器条件中如果状态码==200 那么就触发灾难,那么在配置邮件的时候(如果有灾难发生-那么我就触发动作-那么在这里的动作就是email邮件报警)

 

流程:首先配置了web检测 ----->配置了触发器条件如果状态码==200则灾难 ---->配置了动作如果出现了灾难情况那么触发email-->通过email中的配置指向内网邮箱地址yankai@aab.cn

以上图片中显示已经发送成功 这时候需要去邮箱中查看邮件报警内容

此时我们可以正常的收到邮件。

 

七、问?

一、为什么会一直发送那么多邮件,为什么==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

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值