简言

当我们使用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
2
vi /etc/zabbix/zabbix_agentd.conf

写入下面内容

1
2
3
4
5
#开启远程执行命令功能
EnableRemoteCommands=1
#开启远程记录日志功能
LogRemoteCommands=1

重启zabbix-agentd端

1
2
systemctl restart zabbix-agent

2.给zabbix用户添加权限
当然了如果我们是用root用户执行文件,那么此步骤可以省略

1
2
3
4
5
修改/etc/sudoers文件
zabbix ALL=NOPASSWD: ALL
这个是指定你需要执行脚本的绝对路径(zabbix用户可以无密码方式运行任何命令,当然这种方式权限太大,上面可以修改为)
zabbix ALL=NOPASSWD:/usr/local/apache-tomcat-8.5.43/bin/./startup.sh

但是网上说不太推荐这种方式,在里面添加权限,破坏性有点大。所以我们可以采用另外一种方式
将每个用户的权限分开放在/etc/sudoers目录下,zabbix是文件名,随便写,建议以用户名区分

1
2
3
4
vi   /etc/sudoers/zabbix
添加如下内容
zabbix ALL=(ALL)NOPASSWD: ALL

语法是: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
2
sudo -u zabbix /usr/local/apache-tomcat-8.5.43/bin/startup.sh

二、zabbix界面配置

1.给主机192.168.43.31主机添加监控项
在这里插入图片描述
按照下图所示添加监控项即可

1
2
3
4
键值	proc.num[,,all,apache-tomcat-8.5.43]
意思是在任何用户下运行的tomcat进程数
这里的apache-tomcat-8.5.43是文件名,tomcat的目录名称

语法是proc.num[name,user,state,cmdline],返回整型
name - 进程名称 (默认是 all processes)
user - 用户名 (默认是 all users)
state - 可选的值:
all-所有状态 (默认),
disk- 不间断休眠,
run - 运行中,
sleep- 间断休眠,
trace - 停止的,
zomb - 僵尸
cmdline - 按命令行过滤(它是一个正则表达式)

zabbix键值官方文档

在这里插入图片描述
2.给主机192.168.43.31主机添加触发器
监控项做好之后我们就需要设定触发器了,当监控项符合某项标准之后就去触发条件
表达式意为着在主机192.168.43.31上,监控项proc.num[,all,apache-tomcat-8.5.43]统计出的tomcat进程数倒数第二次等于0则触发。

1
2
{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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
这里介绍下zabbix的service.info命令,想了解的可以看一下
语法:service.info[service,param],这个命令可以获得服务的运行状态,启动类型,描述等
service是服务名。
param:默认是state,获得服务运行的状态,返回的值如:
0 - 运行,
1 - 暂停,
2 - 开始等待,
3 - 暂停等待,
4 - 继续等待,
5 - 停止等待,
6 - 停止,
7 - 未知,
255 - 没有这样的服务

startup:获得服务的启动类型
0 - 自动的,
1 - 自动延迟,
2 - 手动,
3 - 禁用,
4 - 未知

displayname:获得服务的标准名

path:启动命令位置

user:启动的用户

description:服务的描述
示例:
⇒ service.info[SNMPTRAP] - SNMPTRAP服务的状态
⇒ service.info[SNMP Trap] - 同一服务的状态,但指定了显示名称
⇒ service.info[EventLog,startup]<k/bd> - 事件日志服务的启动类型
请注意,只有使用 param 作为 状态,此选项将返回不存在的服务(255)。
自Zabbix 3.0.0起支持此监控项。不建议使用旧的service_state [service]选项。

1
2
测试: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
2
E:\apache-tomcat-8.5.43\bin\zabbixRestart.bat

1
2
3
net stop tomcat8
net start tomcat8

在这里插入图片描述
这样Window的就完成了!
关闭window的tomcat效果测试如下:
在这里插入图片描述