• zabbix监控MySQL,Tomcat及配置邮件报警


    一、思路

    首先搭建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分钟后才收到邮件
    • 本案例没有将图片上传出来,会影响阅览者阅读的直观性
    • 监控布置的结果虽然有了,但是思路还是不清晰
  • 相关阅读:
    python字符串方法
    字符串格式化示例
    python中的list()函数和tuple()函数
    python中sort()方法的cmp参数
    条件/三元操作符
    html5 frameset5内嵌框架集
    Sublime Text3取消自动补全结束标签
    Python列表:元素的修改、添加、删除和排序
    SCOI2010 股票交易
    Codeforces 797 D. Broken BST
  • 原文地址:https://www.cnblogs.com/jojoword/p/10944024.html
Copyright © 2020-2023  润新知