zabbix4.0学习四:Zabbix监控tomcat故障重启
前言
使用zabbix监控tomcat的运行,当tomcat停止运行,则重启它。
下面教程里,在执行远程脚本时,使用ssh方式,不使用自定义脚本方式,因为自定义脚本方式问题太多,我试了很多都没试成功
两台机器
名称 | ip | 作用 |
---|---|---|
zabbix-server | 192.168.2.33 | zabbix服务器端 |
zabbix-agent | 192.168.1.239 | zabbix客户端 |
agent在linux上
编辑zabbix-agent.conf配置文件
打开:vi /etc/zabbix/zabbix_agentd.conf
配置
#开启远程执行命令功能
EnableRemoteCommands=1
#开启远程记录日志功能
LogRemoteCommands=1
重启zabbix-agent:systemctl restart zabbix-agent
增加zabbix权限
虽然我们可以修改/etc/sudoers文件,在里面添加权限,但破坏性比较大,建议将每个用户的权限分开放在/etc/sudoers.d目录下。
visudo -f /etc/sudoers.d/zabbix
zabbix是文件名,随便写,建议以用户名区分
增加如下
zabbix ALL=(ALL)NOPASSWD: ALL
语法是:who host=(runas) TAG:command
- who :运行者用户名
- host:主机
- runad:以那个身份运行
- TAG:标签
- command:命令
zabbix用户可以无密码方式运行任何命令,当然这种方式权限太大,上面可以修改为:
zabbix ALL=(ALL)NOPASSWD: /etc/zabbix/scripts/tomcat_status_monitor.sh
虽然我们可以使用vim直接来编辑sudo的配置文件,但sudo提供了更加智能的编辑命令visudo,它能在编辑配置文件的同时帮我们检查语法错误,并在错误时提供快捷的返回功能,相当nice。
注意在你使用visudo命令前,你有必要设置下EDITOR=vim来替换默认的vi,可以打开的时候语法高亮,看起来起来舒服多了。
[root@centos74 ~]$ vim ~/.bash_profile #编辑profile文件
# 添加如下行
export EDITOR=vim
[root@centos74 ~]$ source ~/.bash_profile # 让其立即生效
测试zabbix是否有权限执行脚本,使用sudo -u 用户名指定用户执行脚本功能
sudo -u zabbix /usr/local/tomcat/apache-tomcat-8.5.37/bin/startup.sh
配置zabbix-web界面
访问http://192.168.2.33/zabbix界面
增加主机192.168.1.239(忽略)
给主机增加一个监控项(item)
可参考官方文档创建监控项
用于监控tomcat的运行情况。选中一个主机
点击监控项->创建监控项,配置的值如下
名称:Tomcat-自启监控
类型:Zabbix客户端
键值: proc.num[,,all,tomcat]
,意思是在任何用户下运行的tomcat进程数。
这里的tomcat是文件名,比如我的tomcat目录名是apache-tomcat-8.5.37,也可以换成proc.num[,all,apache-tomcat-8.5.37]
键值的说明可参考官方文档Zabbix客户端键值。
语法是
proc.num[<name>,<user>,<state>,<cmdline>]
,返回整型
- name - 进程名称 (默认是 all processes)
- user - 用户名 (默认是 all users)
- state - 可选的值:
all
-所有状态 (默认),
disk
- 不间断休眠,
run
- 运行中,
sleep
- 间断休眠,
trace
- 停止的,
zomb
- 僵尸- cmdline - 按命令行过滤(它是一个正则表达式)
其它默认即可。
完整配置如下图
扩展知识:时间单位后缀学习
- s - 秒(一般来说来说不写s,就表示s了)
- m - 分
- h - 小时
- d - 天
- w - 周
监控8080端口的监控项是:net.tcp.listen[8080]
给主机增加一个触发器(triggers)
选中一个主机
点击触发器->创建触发器,配置的值如下
名称:AutoTomcatRunTrigger
严重性:选“严重”
表达式:{192.168.1.239:proc.num[,all,tomcat].last(#2)}=0,表示在主机192.168.1.239上,监控项proc.num[,all,tomcat]统计出的tomcat进程数倒数第二次等于0则触发。
完整配置如下
给主机增加一个动作
动作是与触发器绑定的,不是与主机绑定的。
配置->动作->创建动作。
动作页配置如下
在新的触发条件里,先将动作与触发器绑定得到B条件,再与触发器示警度绑定,得到A条件,当A和B条件都满足时,才会执行动作。
操作页配置如下:
主要配置在于定义操作:
这里主要注意一点,类型选择SSH,命令为:sudo /usr/local/tomcat/apache-tomcat-8.5.37/bin/./startup.sh
远程命令最大长度为255字符,同时支持多个远程命令,如需要执行多条命令,只需要另起一行写命令即可,还有,远程命令可以使用宏变量。
至些配置完毕,使用/usr/local/tomcat/apache-tomcat-8.5.37/bin/./shutdown.sh关闭tomcat,效果如下:
等一会效果如下
agent在windows上
由于在远程执行tomcat的startup.bat启动命令时不能成功打开tomcat(可能是不能成功打开dos命令窗口原因),所以,这里介绍将tomcat注册成服务的方式启动。在tomcat/bin目录下执行安装服务命令:service.bat install,我的tomcat服务是tomcat8-8089(可以修改的)。
添加监控项service.info
在主机上添加一个监控项,service.info[tomcat8-8089,state]。
顺便介绍service.info命令,可忽略
语法:service.info[service,],这个命令可以获得服务的运行状态,启动类型,描述等
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]选项。
测试:zabbix_get -s 192.168.1.243 -k service.info[tomcat8-8089,startup]
添加触发器
做法如上,触发器表达式为:{192.168.1.243:service.info[“tomcat8-8089”,state].last(#2)}=6
添加动作
新建一个zabbixRestart.bat脚本:
net stop tomcat8-8089
net start tomcat8-8089
将脚本拷贝到D:\soft\tomcat\apache-tomcat-8.5.37-8089\bin下
这里不使用SSH方式执行,(windows上PowerShellServer可以模拟ssh连接方式),通过自定义脚本反而可以执行,和上面的linux不同。自定义脚本可执行启动windows服务
动作执行自定义脚本内容如下:
概念
这里涉及触发器,邮件,动作,参考
zabbix从放弃到入门(3):在zabbix中添加主机~zabbix从放弃到入门(11):监控配置小结,触发警报系统文件
Zabbix设置触发器,远程执行命令,以及邮件报警