一、实验需求

    公司tomcat服务经常自动崩溃,导致业务中断,暂时用zabbix对其执行监控,在tomcat崩溃时能够先自动启动,保证业务尽快恢复正常。


二、准备环境

    系统环境:CentOS 6.5

    IP地址:

         zabbix-server: 192.168.239.128

         zabbix-agent: 192.168.239.130


    zabbix的服务端和客户端的安装此处都以rpm包安装,配置略过。agent端上安装好tomcat。


三、开启踩坑之旅——agent端

    ① 修改zabbix-agent配置文件,修改后重启生效

       # vim /etc/zabbix/zabbix_agentd.conf

          EnableRemoteCommands=1    开启agent端远程命令执行功能   

       # sudo server zabbix-agent restart   

wKiom1cTPzXwryzAAAAVCi5j5v4096.png

    ② 修改sudoers,给zabbix用户赋予权限,不然zabbix-agent无法执行命令  

       # sudo visudo

         zabbix ALL=NOPASSWD: ALL 

         zabbix ALL=NOPASSWD: /usr/loacal/catalina.sh start

wKiom1cTQlGTzG8EAAAWg_dOMD8929.png

    ③ 在tomcat启动脚本中添加jdk的环境变量,不然仍有可能启动不起来。

   (超级大坑,被坑了俩礼拜才找到问题)

      # vim /usr/local/tomcat/bin/catalina.sh        # 添加jdk环境变量 

        export JAVA_HOME=/usr/java/latest

        export PATH=$PATH:$JAVA_HOME/bin

        export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

wKioL1cwUx-zgSy2AAAcWTFr1fs585.png


四、开启踩坑之旅——server端

    ① 先创建一个Host ,直接填入agent端的IP就行

wKioL1cTN5jQ4UpTAADKOPv-SLQ807.png

    ② 创建Item,使用內建的Key

       "proc.num[<name>,<user>,<state>,<cmdline>]"

       通过某用户执行,某进程状态,进程名称来统计进程的数量

          name:进程名称(默认"all processes")

          user:用户名(默认"all user")

          state:进程状态(默认"all"),可选:run,sleep,zomb

          cmdline:命令行过滤(使用正则表达式查找进程)

       例如: proc.num[,root,all,tomcat]   统计root用户运行匹配tomcat的所有状态的进程。

wKioL1cTOcvR1CU6AAB6rmzRy9Y855.png

    ③ 创建Trigger,设定触发条件,下面的表达式意思就是 最近第二次的结果为0就触发告警

wKiom1cTORDiaxQLAABIluzMhaM215.png

    ④ 创建Action

        Operation type:改为执行远端命令

        Target list:选定执行的agent

        Type:可以有多种选择,此处是启动tomcat,选择Remote command或ssh既可

        Execute on:执行端,默认选择agent端既可

        Commands:写入想让agent端执行的命令既可 

            坑:这里的命令尤为注意,一定要加sudo提升zabbix的权限,不然命令无法执行,并且远程命令执行不会有回复信息的,排错也比较难。

wKioL1cTPdXgLSw8AADD4EeyQZE630.png

wKioL1cTSD3SJkWCAAAwyXkUg9k846.png

五、测试

    ① agent端关闭tomcat

wKiom1cTQu7zSgxcAAApj-j7S1w359.png

   ② server显示为故障,过一会儿就正常了。(正常的图是截完日志再截的,时间上有点久)

wKioL1cTQ-jy9m2oAABPGxJWPJk267.png

wKiom1cTRJKCXvqkAABQbLQ47RY539.png

    ③ 通过日志也可以看出server端恢复了

wKiom1cTRDDiibF2AACYmVzDMyc467.png


总结:关键点总结

   ① zabbix-agent端:

        添加 EnableRemoteCommands=1

        修改sudoers,给zabbix授权

   ② zabbix-server端:

        确保触发条件和执行条件正常,远程命令记得添加 sudo


   直接参考zabbix官方文档既可