zabbix实现自动触发远程脚本执行命令

Zabbix触发器(trigger)达到阀值后会有动作(action)执行:发送告警信息或执行远程命令

环境

Server:基于centos6.5 final x86_64
Zabbix:zabbix-3.0.4 server/agent

注意事项

1.远程执行命令是server端向agent端执行,不支持主动模式的agent;
2.不支持代理模式;
3.zabbix用户必须对命令具有执行权限,可以使用sudo赋予root权限(配置sudo无密码方式);
4.远程命令只是执行,执行成功与否并不检测并确认,可在” Monitoring-->Events”中查看action执行时,或在”Reports-->Action log”中查看远程命令是否执行成功(成功为” Executed”)。

zabbix-agent端的操作:

场景:监控某个服务器的web页面http相应码如果连续4次不为200则触发重启相关服务action

1.打开客户端远程执行命令的开关,记得重启zabbix-agent服务
vim /etc/zabbix/zabbix_agentd.conf 
EnableRemoteCommands = 1

2.visudo打开关于zabbix操作的命令

①添加如下内容
# allows 'zabbix' user to run all commands without password.
zabbix ALL=NOPASSWD: ALL
# allows 'zabbix' user to restart apache without password.
zabbix ALL=NOPASSWD: /bin/bash /usr/local/zabbix-agent/scripts/restart_ad_server.sh

②注释掉如下一行,否则命令无法执行:
# Default requiretty

添加相关的脚本:

vim /usr/local/zabbix-agent/scripts/restart_ad_server.sh

#!/bin/bash
# kill ad-server process
count_num=`ps -ef|grep ad-server-1.0.0.jar|grep -v grep|wc -l`

if [ $count_num -eq 1 ];then
ps -ef|grep ad-server-1.0.0.jar|grep -v grep|kill -9 `awk '{print $2}'`
sleep 2
fi

# start ad-server
cd /data/ad-push/ && /bin/bash /data/ad-push/start.sh start

添加执行权限
chmod +x /usr/local/zabbix-agent/scripts/restart_ad_server.sh

zabbix-server端操作

设置Action
Configuration-->Actions-->Create action

Action
在Action选项中,
定义Name:adpush_not_200_restart_ad_server
#action name自定义即可,action选项的其余部分可采用默认值,如下:


Conditions
在Conditions选项中添加新的条件判断,以使判断更有针对性,如
New condition:Trigger severity = Warning
New condition:Trigger name like ads_9010_status_not 200
#trigger name对应步骤1中定义的trigger name,如下:

Operations
在Operations选项中,添加新的”Action operation”,点击”New”,
Operation type:选择”Remote Command”
Target list:添加target为”Current host”
#agent在本机
Type:选择”Custom script”

Execute on:选择”Zabbix agent”,命令为 "sudo /bin/bash /usr/local/zabbix-agent/scripts/restart_ad_server.sh"

执行远程命令重新启动nginx服务举例:

#执行命令的账号是zabbix账号,非root账号,不采用sudo命令会导致命令执行后不生效
#另外需要说明是,尝试过使用具体的命令而非脚本,结果是命令执行了但不生效,因为没有具体的失败日志,也分析不出原因

#其余部分采用默认值,点击”Add”即可,如下:

问题:

但是执行命令失败,无法自动重启服务:于是授予zabbix所有用户权限
# allows 'zabbix' user to restart apache without password.
zabbix ALL=(ALL) NOPASSWD: ALL

修改restart_ad_server.sh
/usr/local/zabbix-agent/scripts/restart_ad_server.sh

#!/bin/bash
# kill ad-server process
ps -ef|grep ad-server-1.0.0.jar|/bin/kill `awk '{print $2}'`
sleep 2
# start ad-server

# start.sh使用绝对路径
cd /home/ad-push/ && /bin/bash /home/ad-push/start.sh start

#!/bin/bash
# kill ad-server process
ps -ef|grep ad-server-1.0.0.jar|/bin/kill `awk '{print $2}'`
sleep 2
ps -ef|grep ad-server-1.1.0.jar|/bin/kill `awk '{print $2}'`
sleep 2
# start ad-server
cd /data/ad-push/ && /bin/bash /data/ad-push/start.sh start
cd /data/ad-push2/ && /bin/bash /data/ad-push2/start.sh start

修改start.sh脚本如下:

java也使用绝对路径:

/home/java/jdk1.8.0_40/bin/java
#!/bin/bash
LANG="zh_CN.UTF-8" APP_HOME=$(echo `pwd` | sed 's/bin//')
APPPIDFILE=$APP_HOME/app.pid case $1 in
start)
echo "Starting server... " HEAP_MEMORY=1024m
PERM_MEMORY=64m
JMX_PORT=1111
JMX_HOST=1.1.1.1
JAVA_OPTS="-server -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=jvm.log -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dsun.net.inetaddr.ttl=15 " shift
ARGS=($*)
for ((i=0; i<${#ARGS[@]}; i++)); do
case "${ARGS[$i]}" in
-D*) JAVA_OPTS="${JAVA_OPTS} ${ARGS[$i]}" ;;
-Heap*) HEAP_MEMORY="${ARGS[$i+1]}" ;;
-Perm*) PERM_MEMORY="${ARGS[$i+1]}" ;;
-JmxPort*) JMX_PORT="${ARGS[$i+1]}" ;;
-JmxHost*) JMX_HOST = "${ARGS[$i+1]}" ;;
esac
done
JAVA_OPTS="${JAVA_OPTS} -Xms${HEAP_MEMORY} -Xmx${HEAP_MEMORY} -XX:PermSize=${PERM_MEMORY} -XX:MaxPermSize=${PERM_MEMORY} -XX:MaxDirectMemorySize=128m -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Djava.rmi.server.hostname=${JMX_HOST} -Dapp.home=${APP_HOME}"
echo "start jvm args ${JAVA_OPTS}"
nohup <span style="color:#ff0000;">/home/java/jdk1.8.0_40/bin/java</span> $JAVA_OPTS -cp .:./ad-server-1.0.0.jar org.springframework.boot.loader.JarLauncher > /dev/null &
echo $! > $APPPIDFILE
echo STARTED
;; stop)
echo "Stopping server ... "
if [ ! -f $APPPIDFILE ]
then
echo "error: count not find file $APPPIDFILE"
exit 1
else
kill -9 $(cat $APPPIDFILE)
rm $APPPIDFILE
echo STOPPED
fi
;; *)
echo "Please enter start|stop ... "
;; esac exit 0

zabbix系列(九)zabbix3.0实现自动触发zabbix-agent端shell脚本任务的更多相关文章

  1. zabbix系列(二)zabbix3.0.4添加对mysql数据库性能的监控

    zabbix3.0.4添加Mysql的监控 zabbix3.0 server已自带mysql的模板了,只需安装agent端,然后在web端给主机增加模板就行了. Agent端操纵 /etc/zabbi ...

  2. zabbix系列(七)zabbix3.0添加对tcp连接数及状态的监控

    原理: netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' TIME_WAIT 79 ESTABLISHED 6 LISTE ...

  3. zabbix系列(四)Zabbix3.0.4添加对Nginx服务的监控

    Zabbix3.0.4添加对Nginx服务的监控 通过Nginx的http_stub_status_module模块提供的状态信息来监控,所以在Agent端需要配置Nginx状态获取的脚本,和添加ke ...

  4. zabbix系列(三)zabbix3.0.4微信告警配置详解

    一.准备工作 申请微信公众号,并且是可以有发送消息的接口.添加有个脚本去调用微信的api. 之后可以参考下zabbix 的搭建,然后了解下脚本报警,之后再考虑报警方式的多样化. 个人微信一个 个人邮箱 ...

  5. zabbix系列(五)zabbix3.0.4 探索主机Discovery自动发现主机详细图文教程

    Zabbix 自动发现(Discovery)功能使用 随着监控主机不断增多,有的时候需要添加一批机器,特别是刚用zabbix的运维人员需要将公司的所有服务器添加到zabbix,如果使用传统办法去单个添 ...

  6. Zabbix系列之一——zabbix3.4部署

    Zabbix简介 zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活 ...

  7. linux - 怎么自动填写有交互的shell脚本 - SegmentFault

    linux - 怎么自动填写有交互的shell脚本 - SegmentFault TCL/Expect交互式自动化测试概要 - - ITeye技术网站 expect是一种基于TCL,能与交互式程序进行 ...

  8. Zabbix实战-简易教程(5)--Proxy和Agent端(源码和yum方式)

    3.3.1 zabbix proxy安装(源码方式) 1.创建目录 mkdir -p /usr/local/zabbix 2.安装必要软件 yum install -y fping(若安装不成功) 或 ...

  9. 一个自动安装LNMP的简洁Shell脚本

    此脚本在生产服务器上使用了一年多,本脚本崇尚简单唯美,只需要一个脚本就可以在任何一台有网络的服务器上自动配置LNMP.本脚本会在脚本执行目录下,建packages目录用于存放LNMP所需要的软件.大家 ...

随机推荐

  1. MQTT 及其 测试工具

    协议说明书:https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/04-OperationalBehavior.html 官网提供了很多的broker模拟 ...

  2. 让maven项目使用nexus作为远程仓库

    让maven项目使用nexus作为远程仓库有两种方式,第一种是在项目的pom.xml中进行更改,让单个项目使用nexus仓库:另一种是通过修改maven的配置文件settings.xml进行更改,让所 ...

  3. python os模块 常用命令

    python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令 1. os.name()——判断现在正在实用的平台,Window ...

  4. 聊一聊docker存储驱动

    目录 镜像的分层特性 容器读写层的工作原理 写时复制 用时配置 Docker存储驱动 AUFS OverlayFS Devicemapper 常用存储驱动对比 AUFS VS OverlayFS Ov ...

  5. logstash5.5 数据采入elasticsearch5.5(基于x-pack)

    logstash5.5 数据采入elasticsearch5.5(基于x-pack) 以采集redis日志信息为例 redis日志文件.MQ(redis).logstash主机:10.10.83.16 ...

  6. Hadoop基础-完全分布式模式部署yarn日志聚集功能

    Hadoop基础-完全分布式模式部署yarn日志聚集功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实我们不用配置也可以在服务器后台通过命令行的形式查看相应的日志,但为了更方 ...

  7. codeforces - 432D Prefixes and Suffixes (next数组)

    http://codeforces.com/problemset/problem/432/D 转自:https://blog.csdn.net/tc_to_top/article/details/38 ...

  8. git初学 常用命令

    初学备忘: MAC 下 clone 项目的时候  记得  sudo -s  输入密码 获得 管理员权限,普通权限看不到 .babelrc 等 点开头的文件 ____——____——____——____ ...

  9. Linux之Ubuntu下如何查看已安装的软件/库文件【摘抄】

    本文属于实用性质,且属于摘抄别处,出自:[Ubuntu 下如何查看已安装的软件](http://blog.csdn.net/m1205979825/article/details/40855583) ...

  10. 第14月第23天 uitextfield文字下移

    1. http://www.jianshu.com/p/641a0cbcabb0