一、思路

首先搭建zabbixserver,本机需要安装agent以便对本机进行监控,然后部署邮件报警相关配置

二、部署、配置

环境

主机名 IP地址 角色
zserver 192.168.111.3 监控端同时也作为被监控端,Tomcat
zagent 192.168.111.4 被监控端,mysql
  • 可以正常连接互联网
  • 配置epel源
  • 本案例将防火墙以及selinux关闭
[root@localhost ~]# ntpdate ntp1.aliyun.com
#同步阿里云的时间

wget https://mirrors.tuna.tsinghua.edu.cn/epel//epel-release-latest-7.noarch.rpm
yum clean all 
  • 配置主机名和hosts
[root@localhost ~]# vim /etc/hosts

192.168.111.3 zserver
192.168.111.4 zagent

[root@zserver ~]#  uname -n
zserver

[root@zagent ~]# uname -n
zagent

安装zabbix

  • 安装依赖包和LAMP
[root@zserver ~]# yum -y install httpd mariadb-server mariadb mariadb-devel php php-mbstring php-mysql php-bcmath php-gd php-xmlrpc php-ldap php-xml libevent libevent-devel net-snmp net-snmp-devel libxml2 libxml2-devel

[root@zserver ~]# yum -y install httpd mariadb-server mariadb mariadb-devel php php-mbstring php-mysql php-bcmath php-gd php-xmlrpc php-ldap php-xml libevent libevent-devel net-snmp net-snmp-devel libxml2 libxml2-devel


[root@zserver ~]# systemctl enable mariadb
[root@zserver ~]# systemctl start mariadb
[root@zserver ~]# systemctl start httpd
[root@zserver ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@zserver ~]# mysqladmin -uroot password 123456
  • 部署二进制包jdk
rm -rf /usr/bin/java

tar zxf jdk-8u191-linux-x64.tar.gz 
mv jdk1.8.0_191 /usr/local/java8
echo "JAVA_HOME=/usr/local/java8" >> /etc/profile
source /etc/profile
echo "PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile
source /etc/profile


[root@zserver ~]# javac -version
javac 1.8.0_191
#系统自带的jdk中并无javac程序
  • 部署zabbix
tar zxf zabbix-3.4.15.tar.gz
cd zabbix-3.4.15/

./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --enable-java && make -j2 && make install

#--enable-server打开Zabbix服务器的构建
#--enable-agent打开Zabbix代理和客户端实用程序的构建
#--enable-java打开Zabbix Java网关的构建
#--enable-ipv6启用IPv6支持
#--with-mysql可选;使用MySQL客户端库[default = no]
#--with-net-snmp可选;使用Net-SNMP包[default = no]
  • mariadb对其进行授权
mysql -uroot -p123456

MariaDB [(none)]> create database zabbix character set utf8;
#创建zabbix专用库

MariaDB [(none)]> grant all on zabbix.* to zabbix@'192.168.111.3' identified by 'zabbix';

MariaDB [(none)]> flush privileges;
  • 导入初始架构和数据到zabbix库中
cd zabbix-3.4.15/

mysql -uzabbix -pzabbix -h192.168.111.3 zabbix < database/mysql/schema.sql
mysql -uzabbix -pzabbix -h192.168.111.3 zabbix < database/mysql/images.sql 
mysql -uzabbix -pzabbix -h192.168.111.3 zabbix < database/mysql/data.sql 

  • 创建专门的程序用户
[root@zserver zabbix-3.4.15]# useradd -M -s /sbin/nologin zabbix
[root@zserver zabbix-3.4.15]# mkdir /usr/local/zabbix/logs
[root@zserver zabbix-3.4.15]# chown -R zabbix:zabbix /usr/local/zabbix/
  • 配置文件
[root@zserver zabbix-3.4.15]# vim /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/usr/local/zabbix/logs/zabbix_server.log 
#指定zabbix日志位置 
PidFile=/tmp/zabbix_server.pid   
#指定zabbix pid文件位置 
DBHost=192.168.111.3
#指定数据库主机 
DBName=zabbix 
#指定数据库名为zabbix 
DBUser=zabbix  
DBPassword=zabbix 
#指定用户为zabbix ,密码zabbix
DBSocket=/var/lib/mysql/mysql.sock   
Include=/usr/local/zabbix/etc/zabbix_server.conf.d/*.conf 


[root@zserver zabbix-3.4.15]# vim /usr/local/zabbix/etc/zabbix_agentd.conf


PidFile=/tmp/zabbix_agentd.pid
Server=192.168.111.3
#zabbix server的ip地址,多个ip使用逗号分隔
ServerActive=192.168.111.3
#zabbix 主动监控server的ip地址,使用逗号分隔多IP,如果注释这个选项,那么当前服务器的主动监控就被禁用了(被动模式)
Hostname=zserver
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf


ln -s /usr/local/zabbix/sbin/* /usr/local/bin/
ln -s /usr/local/zabbix/bin/* /usr/local/bin/
#链接执行命令

[root@zserver ~]# zabbix_server 

[root@zserver ~]# zabbix_agentd 
#启动监控端,和agent端
  • zabbix前端配置PHP
mv zabbix-3.4.15/frontends/php/ /var/www/html/zabbix
chown -R apache:apache /var/www/html/zabbix
vim /etc/php.ini 
    878 date.timezone = Asia/Shanghai      
    #时区 
    384 max_execution_time = 300        
    #单位秒,通过POST、GET以及PUT方式接
    收数据时间进行限制 
    394 max_input_time = 300        
    #php程序上传文件解析数据时的时间限制 
    672 post_max_size = 32M        
    #POST 方式请求数据所允许的最大大小 
    405 memory_limit = 128M        
    #设置php程序的内存限制 
    854 extension=bcmath.so    
    #加载zabbix程序需要加载的扩展模块bcmath.so,手动添加
    
systemctl restart httpd
#重启服务

[root@zserver ~]# netstat -anpt | egrep ':10050|:10051|:80' 
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      72512/zabbix_agentd 
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      72450/zabbix_server 
tcp6       0      0 :::10050                :::*                    LISTEN      72512/zabbix_agentd 
tcp6       0      0 :::10051                :::*                    LISTEN      72450/zabbix_server 
tcp6       0      0 :::80                   :::*                    LISTEN      72666/httpd  
  • 客户机访问web页面进行zabbix安装
    ......

对zabbix进行初步优化

  • 中文页面

-->administration

-->Users

-->Admin

-->Language选择Chinese(zh_CN)

-->UPdates

-->然后刷新页面

  • 更改admin密码

-->administration

-->Users

-->Admin

  • 解决中文乱码
rm -rf /var/www/html/zabbix/fonts/DejaVuSans.ttf 
#然后将下载到的中文字体.ttf结尾的字体文件放到该目录即可

mv STXINWEI.TTF DejaVuSans.ttf

chown -R apache:apache /var/www/html/zabbix/fonts/*

添加监控主机

  • 添加自身
-->配置

    -->主机
        
        -->创建主机
        
            -->主机名称(与agent配置文件中相同)
               可见名称(自定义)    
               群组(将Linuxserver群组添加到左侧)
               ip(agent所在机器的IP地址和端口)
            
            -->添加
        
        -->选定agent1
        
            -->模板(进行选择,选定Template OS Linux)
            
            --添加
            
            -->更新(等待一会,相应的图标如ZBX会高亮)
  • 添加另一台
yum -y install libxml2-devel libcurl-devel pcre-devel mariadb*
#依赖安装

tar zxf zabbix-3.4.15.tar.gz
cd zabbix-3.4.15/

./configure --prefix=/usr/local/zabbix --enable-agent --with-net-snmp --with-libcurl --with-libxml2 && make && make install
#不需要开启server监控端了

cp misc/init.d/tru64/zabbix_agentd /etc/init.d/

vim /etc/init.d/zabbix_agentd 
    DAEMON=/usr/local/zabbix/sbin/zabbix_agentd
    #前面的目录更改为实际安装路径


chmod +x /etc/init.d/zabbix_agentd 
useradd -M -s /sbin/nologin zabbix
mkdir /usr/local/zabbix/logs
chown -R zabbix:zabbix /usr/local/zabbix/


PidFile=/tmp/zabbix_agentd.pid
Server=192.168.111.3
ServerActive=192.168.111.3
Hostname=zagent 
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log 
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf 
UnsafeUserParameters=1 
#允许所有字符的参数传递给用户定义的参数
UserParameter=mysql.version,mysql -V
# =前面表示定义一个键值对,=后面逗号前面是键的名称,后面是键的值.可以在server监控端使用zabbix_get -s 192.168.111.4 -k mysql.version来得到mysql -V命令的输出结果
UserParameter=mysql.status[*],/usr/local/zabbix/etc/chk_mysql.sh $1 
#显而易见,这里表示的就是执行一个脚本了,[*]这个是用户跟的参数,跟后面的$1位置参数对应,脚本里已经定义好
UserParameter=mysql.ping,mysqladmin -uroot -p123456 -P3306 -h192.168.111.4  ping | grep -c alive
#这里是监控MySQL的配置项

[root@zagent ~]# vim /usr/local/zabbix/etc/chk_mysql.sh
[root@zagent ~]# chmod +x /usr/local/zabbix/etc/chk_mysql.sh 
----chk_mysql.sh监控脚本----
cat /usr/local/zabbix/etc/chk_mysql.sh
#!/bin/bash 
# 用户名 
MYSQL_USER='root' 
  
# 密码 
MYSQL_PWD='123456' 
  
# 主机地址/IP 
MYSQL_HOST='192.168.111.4' 
  
# 端口 
MYSQL_PORT='3306' 
  
# 数据连接 
MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}" 
  
# 参数是否正确 
if [ $# -ne "1" ];then  
    echo "arg error!"  
fi 
# 获取数据 
case $1 in  
    Uptime)  
        result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"`  
        echo $result  
        ;;  
    Com_update)  
        result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3`  
        echo $result  
        ;;  
    Slow_queries)  
        result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"`  
        echo $result  
        ;;  
    Com_select)  
        result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3`  
        echo $result  
                ;;  
    Com_rollback)  
        result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3`  
                echo $result  
                ;;  
    Questions)  
        result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"`  
                echo $result  
                ;;  
    Com_insert)  
        result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3`  
                echo $result  
                ;;  
    Com_delete)  
        result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3`  
                echo $result  
                ;;  
    Com_commit)  
        result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3`  
                echo $result  
                ;;  
    Bytes_sent)  
        result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3`  
                echo $result  
                ;;  
    Bytes_received)  
        result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3`
		echo $result  
                ;;  
    Com_begin)  
        result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3`  
                echo $result  
                ;;  
                         
        *)  
                echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"  
        ;;  
esac
#关于脚本中MySQLadmin的详细用法,可以在网上找一些文档看一看,很多


[root@zagent ~]# systemctl start mariadb
[root@zagent ~]# systemctl enable mariadb

mysqladmin -uroot password 123456

[root@zagent ~]# mysql -uroot -p123456

MariaDB [(none)]> grant all on *.* to root@'zagent' identified by '123456';
#这一步授权,虽然都是MySQL本机,但只是我们人类角度的一台机器,MySQL程序也许并不会这么认为,我们需要明确授权哪台主机名所在的主机.
MariaDB [(none)]> flush privileges;

[root@zagent ~]# /etc/init.d/zabbix_agentd start
Zabbix agent started.


[root@zserver ~]# zabbix_get -s 192.168.111.4 -k mysql.status[Uptime]
4130
#可以在server监控端简单测试一下
-->配置

    -->主机
        
        -->创建主机
        
            -->主机名称(与agent配置文件中相同)
               可见名称(自定义)    
               群组(将Linuxserver群组添加到左侧)
               ip(agent所在机器的IP地址和端口)
            
            -->添加
        
        -->选定agent1
        
            -->模板(进行选择,选定Template OS Linux)
            
            --添加
            
            -->更新(等待一会,相应的图标如ZBX会高亮)
  • 配置监控zagent的MySQL
首先添加服务模板

-->配置

    -->主机
    
        -->选择相应的主机名称
        
            -->模板
            
                -->选择
                
                    -->模板(进行选择,选定Template DB MySQL)
                    
                    --添加
            
                    -->更新(等待一会亮)

创建图形


-->配置

    -->主机
    
        -->选择相应的主机名称后的图形
            
            -->创建图形
            
            -->监控项下-->添加 选择MySQL status
            
            -->添加

部署监控Tomcat

注意:编译安装zabbixserver时,添加--enable-java编译项

本案例在zabbix-server上安装Tomcat进行监控测试

[root@zserver ~]# vim /usr/local/zabbix/sbin/zabbix_java/settings.sh 
9 LISTEN_IP="0.0.0.0" 
17 LISTEN_PORT=10052 
27 PID_FILE="/tmp/zabbix_java.pid" 
35 START_POLLERS=5 

[root@zserver ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
#末行追加
JavaGateway=192.168.111.3
JavaGatewayPort=10052
StartJavaPollers=5


[root@zserver ~]# /usr/local/zabbix/sbin/zabbix_java/startup.sh 
[root@zserver ~]# pkill -9 zabbix_server
[root@zserver ~]# zabbix_server 
[root@zserver ~]# netstat -lnpt | grep 10052
tcp6       0      0 :::10052                :::*                    LISTEN      79396/java 

[root@zserver ~]# tar zxf apache-tomcat-8.5.16.tar.gz 
[root@zserver ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat8


[root@zserver ~]# vim /usr/local/tomcat8/bin/catalina.sh 

#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS 
-Dcom.sun.management.jmxremote 
#启用远程监控
-Dcom.sun.management.jmxremote.port=12345 
#jmx远程监控端口,webzabbix添加时必须一致
-Dcom.sun.management.jmxremote.authenticate=false 
#不开启用户密码认证
-Dcom.sun.management.jmxremote.ssl=false
#不开启ssl
-Djava.rmi.server.hostname=192.168.111.3"
#运行tomcat服务器所在IP地址

[root@zserver ~]# vim /usr/local/tomcat8/bin/catalina.sh 
[root@zserver ~]# //usr/local/tomcat8/bin/startup.sh 
Using CATALINA_BASE:   //usr/local/tomcat8
Using CATALINA_HOME:   //usr/local/tomcat8
Using CATALINA_TMPDIR: //usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java8
Using CLASSPATH:       //usr/local/tomcat8/bin/bootstrap.jar://usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
                LISTEN      79722/java          
[root@zserver ~]# netstat -lnpt | grep java
tcp6       0      0 :::10052                :::*                    LISTEN      79396/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      79722/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      79722/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      79722/java          
tcp6       0      0 :::46546                :::*                    LISTEN      79722/java          
tcp6       0      0 :::35319                :::*                    LISTEN      79722/java          
tcp6       0      0 :::12345                :::*                    LISTEN      79722/java         

  • webzabbix添加Tomcat监控
-->配置

    -->主机
    
        -->选择相应的主机名称
        
        -->jmx接口-->添加刚才在配置文件定义的ip以及12345端口
        
        -->更新
        

    -->模板
    
        -->导入(从本机文件中导入,从网络上下载的有很多)
            (不需要修改选项,直接导入就好)
        
-->配置

    -->主机
    
        -->选择相应的主机名称
        
            -->模板
            
            -->选择响应模板进行添加并更新
            
            刷新等待一两分钟,jmx字符会高亮

配置邮件报警

首先登陆网易邮箱,获取到授权码,这里已经成功,不在测试

继续进行

zabbixserver端配置邮件服务器

[root@zserver ~]# yum -y install mailx dos2unix
#dos2unix程序用来防止乱码的
[root@zserver ~]# vim /etc/mail.rc 

#末行追加

set from=该邮件来自于谁  smtp=smtp.163.com
#smtp是邮箱服务器地址
set smtp-auth-user=接收邮件的邮箱地址 smtp-auth-password=授权码
set smtp-auth=login



[root@zserver yum.repos.d]# vim /usr/local/zabbix/etc/zabbix_server.conf
#末行追加
AlerScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
#设置邮件报警脚本路径

[root@zserver yum.repos.d]# vim /usr/local/zabbix/share/zabbix/alertscripts/mail.sh
    #!/bin/bash 
    #export.UTF-8 
    bt=$2
    sjr=$1
    FILE=/tmp/mailtmp.txt
    echo "$3" >$FILE
    /usr/bin/dos2unix -k $FILE
    /bin/mail -s "$bt" "$sjr" <$FILE
[root@zserver ~]# chmod +x /usr/local/zabbix/share/zabbix/alertscripts/mail.sh 

[root@zserver ~]# chown zabbix:zabbix /usr/local/zabbix/share/zabbix/alertscripts/mail.sh 
[root@zserver ~]# touch /tmp/mailtmp.txt
[root@zserver ~]# chmod 777 /tmp/mailtmp.txt 
[root@zserver ~]# chown zabbix:zabbix /tmp/mailtmp.txt 

#文件以及报警脚本的归属以及权限,注:脚本文件和存放邮件消息文件归属必须是zabbix; 
  • 配置zabbixweb监控项邮件报警
-->管理

    -->报警媒介类型
    
        -->创建媒体类型
        
            -->自定义名称
            -->类型选择脚本
            -->脚本名称我这里输入mail.sh(要和真实脚本名称一致)
            -->添加三个脚本参数分别为{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE}
            
                -->添加
  • 配置zabbix中的用户所使用的报警媒介类型以及接收邮件的邮箱;
-->管理

    -->用户
    
        -->Admin
        
            -->报警媒介
            
                -->添加
                
                    -->类型选择,刚才添加的自定义名称
                    -->收件人填写收件人的邮箱地址
                        
                        -->添加
                
                -->更新
  • 创建发送邮件的动作
-->配置

    -->动作
    
        -->创建动作
        
            -->自定义动作名称
        
            -->操作
                
                -->默认操作步骤持续时间 60s(设置报警邮件间隔时间)
                -->默认标题 故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障! (报警邮件的标题)
                -->消息内容
                    告警主机:{HOSTNAME1} 
 
                    告警时间:{EVENT.DATE} {EVENT.TIME} 
                     
                    告警等级:{TRIGGER.SEVERITY} 
                     
                    告警信息: {TRIGGER.NAME} 
                     
                    告警项目:{TRIGGER.KEY1} 
                     
                    问题详情:{ITEM.NAME}:{ITEM.VALUE} 
                     
                    当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
                    
                    事件ID:{EVENT.ID}
                
                -->新的
                
                -->用户选择admin
                
                -->仅送到刚才添加的自定义名称
                
                -->添加
                
                -->恢复操作和操作写的内容一样(确认操作写的内容也是一样的)
                
            -->添加

现在是没有任何条件,即发生任何动作都会触发邮件报警

使用zagent主机上ftp服务做测试,现在将其关掉

稍等几秒监控图形已经可以看到值为0了


                

三.总结

  • 测试过程总体还算是顺利,但是zabbix也不可能做到实时监控,肯定会有时间延迟,虽然是测试环境资源也足够,还是没有实时报警,差不多服务停掉3分钟后才收到邮件
  • 本案例没有将图片上传出来,会影响阅览者阅读的直观性
  • 监控布置的结果虽然有了,但是思路还是不清晰