Zabbix---Action

动作(action)

 
动作(action):指对于特定事件事先定义的处理方法,如发送通知,执行脚本等
一旦某触发器状态发生改变,通常需采取一定的动作,如告警或执行远程命令等。
 
“操作”包括 发送通知 和 执行远程命令 两大类
 
告警升级的机制
当发现问题的时候,我们一般是先执行一个远程操作命令,如果能够解决问题,就会发一个恢复的讯息给接收人;
如果问题依然存在,执行发警报的操作。 
 
执行远程命令
因为agent是以zabbix用户的身份运行的, 所以在执行时需要让zabbix用户拥有sudo权限
另外, 为了系统安全, zabbix agent 默认关闭了接收远程命令
所以, 如果希望能够执行远程命令, 需要配置以上2步
 
发送通知
发送通知可以通过SMS, Email, 微信, 钉钉等, 这些媒介类型必须事先定义好, 这是发送端
发送端定义好后还要定义接收端, 也就是用户
再就是定义具体的发送动作了, 包括主题, 发送内容, 发给谁, 采用什么媒介等等
 
例如: 要监控apache的运行状态, 当发现apache运行不正常时先重启, 如果不成功的话再发邮件通知
后面的以此为例来说明
 
 
我们希望服务不正常时先执行远程命令来重启apache, 配置过程
1.修改 agent 配置文件
# vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1 #允许远程命令 
AllowKey=system.run[*]       #5.0版本
LogRemoteCommands=1 #将远程命令记录到日志
# systemctl restart zabbix-agent
 
2.给zabbix用户提权
# echo "zabbix ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/zabbix
 
3.配置监控项, 触发器, 动作
监控项和触发器直接关联HTTP模板就可以了
配置动作: 配置 --> 动作 --> 创建动作
默认操作步骤持续时间: 一个操作步骤默认持续时间(最少60秒). 例如,一小时的持续时间意味着如果执行操作,则在下一步之前将经过一小时.
暂停操作以制止问题: 延长维护期间操作. 如果不选, 维护期间也立即执行.
 
点击"添加"
 
如果启动成功了呢? 发一封恢复邮件吧
到此, 我们第一步就配置完成
将 host2 上的 apache 关闭测试一下
在"问题"中可以看到
 
 
邮件报警
接上面, 如果重启失败呢? 我们继续添加下一步, 发送通知
 
 
更新一下, 将apache配置文件作一些修改,让它重启失败
 
可以在仪表板上看到
 
 
微信报警
一.企业微信部分
1. 注册企业微信
2. 通讯录---->添加子部门---->往子部门添加成员
3. 点开添加的成员,记下帐号
4. 应用管理---->创建应用 (一定要对创建的子部门可见) 
5. 点开创建的应用,记下AgentId及Secret
6. 点我的企业,记下CorpID

 

 

 
二.zabbix服务器部分
1.要求zabbix服务器能够上互联网
2.测试微信报警脚本-要求脚本有可执行权限
*手机打开企业微信看能否收到测试信息
3.测试通过后配置zabbix服务器
3-1.将脚本放到指定脚本位置
3-2.配置报警媒介类型
3-3.配置用户
3-4.在动作中使用微信报警(涉及到item,trigger,action配置略)
 
可修改默认发送的信息内容,如:
{HOST.NAME} 主机名
{EVENT.DATE} 事件发生的日期
{EVENT.TIME} 事件发生的时间
{TRIGGER.SEVERITY} 问题的等级
{TRIGGER.NAME} 触发器名称
{ITEM.NAME} 监控项名称
{ITEM.KEY} 监控项的键名
{ITEM.VALUE} 监控项的值

 
附wechat.sh
#!/bin/bash
#Wechat alert script for zabbix
if [ $# -eq 0 ] || [[ "$1" == "-h" || "$1" == "--help" ]];then
        echo "Usage of $0:"
        echo -e " --CorpID=string"
        echo -e " --Secret=string"
        echo -e " --AgentID=string"
        echo -e " --UserID=string"
        echo -e " --Msg=string"
        exit
fi
 
 
#ops=(-c -s -a -u)
#args=(CorpID Secret AgentID UserID)
#while [ $# -gt 0 ];do
#    [ "$1" == "-m" ] && Msg="$2" && shift 2
#    for i in {0..3};do
#        [ "$1" == "${ops[i]}" ] &&  eval ${args[i]}="$2"
#    done
#    shift 2
#done
for i in "$@";do
        echo $i|grep Msg &> /dev/null && msg=$(echo $i|sed 's/.*=//') && Msg="$msg" && continue
        eval "$(echo $i|sed 's/--//')"
done
#echo $CorpID
#echo $Secret
#echo $UserID
#echo $AgentID
#echo $Msg
#
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CorpID&corpsecret=$Secret"
Token=$(/usr/bin/curl -s -G $GURL |awk -F \" '{print $10}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Token"
Info(){
        printf '{\n'
        printf '\t"touser": "'"$UserID"\"",\n"
        printf '\t"msgtype": "text",\n'
        printf '\t"agentid": "'"$AgentID"\"",\n"
        printf '\t"text": {\n'
        printf '\t\t"content": "'"$Msg"\""\n"
        printf '\t},\n'
        printf '\t"safe":"0"\n'
        printf '}\n'
}
 
 
/usr/bin/curl --data-ascii "$(Info)" $PURL
echo
 
 
posted @ 2020-10-20 20:00  梦里花落知多少sl  阅读(274)  评论(0)    收藏  举报