简言
当我们使用Tomcat发布项目时,有些时候会遇见Tomcat故障的问题,所以我们需要当tomcat停止时,就重启它。
这里我们使用zabbix的功能来实现它,当然了也可以使用自定义脚本的功能来实现,这里我们先讲第一种方法。
准备工作
服务器端zabbix-server 192.168.43.32
客户端zabbix-agentd 192.168.43.31(Tomcat所在服务器Linux)
客户端zabbix-agentd 192.168.43.25(Tomcat所在服务器Window)
一、zabbix-agentd端配置(Linux部分)
1.编辑客户端配置文件,开启远程相关功能
1 | vi /etc/zabbix/zabbix_agentd.conf |
写入下面内容
1 | #开启远程执行命令功能 |
重启zabbix-agentd端
1 | systemctl restart zabbix-agent |
2.给zabbix用户添加权限
当然了如果我们是用root用户执行文件,那么此步骤可以省略
1 | 修改/etc/sudoers文件 |
但是网上说不太推荐这种方式,在里面添加权限,破坏性有点大。所以我们可以采用另外一种方式
将每个用户的权限分开放在/etc/sudoers目录下,zabbix是文件名,随便写,建议以用户名区分
1 | vi /etc/sudoers/zabbix |
语法是:who host=(runas) TAG:command
who :运行者用户名
host:主机
runad:以那个身份运行
TAG:标签
command:命令zabbix用户可以无密码方式运行任何命令,当然这种方式权限太大,上面可以修改为
zabbix ALL=NOPASSWD:/usr/local/apache-tomcat-8.5.43/bin/./startup.sh
3.测试zabbix用户是否有执行权限
1 | sudo -u zabbix /usr/local/apache-tomcat-8.5.43/bin/startup.sh |
二、zabbix界面配置
1.给主机192.168.43.31主机添加监控项
按照下图所示添加监控项即可
1 | 键值 proc.num[,,all,apache-tomcat-8.5.43] |
语法是proc.num[name,user,state,cmdline],返回整型
name - 进程名称 (默认是 all processes)
user - 用户名 (默认是 all users)
state - 可选的值:
all-所有状态 (默认),
disk- 不间断休眠,
run - 运行中,
sleep- 间断休眠,
trace - 停止的,
zomb - 僵尸
cmdline - 按命令行过滤(它是一个正则表达式)
2.给主机192.168.43.31主机添加触发器
监控项做好之后我们就需要设定触发器了,当监控项符合某项标准之后就去触发条件
表达式意为着在主机192.168.43.31上,监控项proc.num[,all,apache-tomcat-8.5.43]统计出的tomcat进程数倒数第二次等于0则触发。
1 | {192.168.43.31:proc.num[,,all,apache-tomcat-8.5.43].last(#2)}=0 |
3.给主机192.168.43.31主机添加动作
触发器做好之后就要添加动作,当触发器表达式的值成立时就去执行动作,具体动作肯定就是去重启tomcat了!
动作页配置
动作的条件为在新的触发条件里,先将动作与触发器绑定得到B条件,再与触发器示警度绑定,得到A条件,当A和B条件都满足时,才会执行动作。
操作页配置
主要配置操作
注意类型选SSH
命令为: /usr/local/apache-tomcat-8.5.43/bin/./startup.sh
远程命令最大长度为255字符,同时支持多个远程命令,如需要执行多条命令,只需要另起一行写命令即可,还有,远程命令可以使用宏变量。
4.测试效果
这个时候手动关闭tomcat,观察效果
三、zabbix-agentd端配置(Window部分)
由于在远程执行tomcat的startup.bat启动命令时不能成功打开tomcat(可能是不能成功打开dos命令窗口原因),所以,这里介绍将tomcat注册成服务的方式启动。在tomcat/bin目录下执行安装服务命令:service.bat install。有的tomcat默认是有这项服务的,没有的再去执行上述命令。这里我的tomcat名字是tomcat8.
Tomcat8w是图形化界面程序,作用是配置和监视tomcat的服务
Tomcat8是windows服务的运行程序,就是开启tomcat
1.首先我们需要新建监控项
键值 service.info[tomcat8,state]
1 | 这里介绍下zabbix的service.info命令,想了解的可以看一下 |
1 | 测试:zabbix_get -s 192.168.43.31 -k service.info[tomcat8,startup] |
2.然后我们新建一个触发器
表达式 {192.168.43.25:service.info[tomcat8,state].last(#2)}=0
3.再之后我们新建一个动作
选好要操作的主机,这个地方我们选用自定义脚本,不使用SSH方式执行,(windows上PowerShellServer可以模拟ssh连接方式),通过自定义脚本反而可以执行,和上面的linux不同。自定义脚本可直接执行启动windows服务。
我们需要在客户端新建一个脚本也就是下面的执行命令,在tomcat的bin下面新建一个zabbixRestart.bat
1 | E:\apache-tomcat-8.5.43\bin\zabbixRestart.bat |
1 | net stop tomcat8 |
这样Window的就完成了!
关闭window的tomcat效果测试如下: