zoukankan      html  css  js  c++  java
  • Zabbix远程执行命令

    原文发表于cu:2016-06-14

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

    本文主要配置验证zabbix执行远程命令。

    一.环境

    Server:基于CentOS-7-x86_64-1511;

    Zabbix:zabbix-3.0.1server/agent。

    二.注意事项

    一些能想到的比较重要的注意事项:

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

    三.示例

    通过一个简单的示例验证:

    监控服务器实时在线的用户不超过2个,超过阀值时报警,并执行命令,强制使第3个登录用户下线,以使监控项在阀值以下。

    1. 设置Trigger

    Configuration-->Templates-->选择” Template OS Linux”模板的”Triggers”-->Create trigger

    #trigger name自定义,可使用宏

    Name:User login number gt 2 on {HOST.NAME}

    Expression:{Template OS Linux:system.users.num.last()}>2

    #可以点击"Expression"项后的"Add",使用zabbix自带的Item + Function设置阀值的表达式,如下:

    #自定义的级别

    Severity:Warning

    其余默认值即可,设置完成后点击"Add"即完成。

    2. 远程命令开关

    #agent默认不支持执行远程命令,需要在agent的配置文件中打开此参数;
    #agent.conf文件路径根据实际情况修改,这里是编译安装后自定义的路径,请见http://www.cnblogs.com/netonline/p/7406598.html
    #agent.conf文件修改后需要重启进程。
    [root@localhost ~]# sed -i 's|# EnableRemoteCommands=0|EnableRemoteCommands=1|g' /usr/local/zabbix/etc/zabbix_agentd.conf
    [root@localhost ~]# service zabbix_agentd restart 

    3. 设置Action

    Configuration-->Actions-->Create action

    Action

    在Action选项中,定义Name:Limit the number of online users no more than 2

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

    Conditions

    在Conditions选项中添加新的条件判断,以使判断更有针对性,如:

    New condition:Trigger severity = Warning

    New condition:Trigger name like User login number gt 2

    #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 /root/test.sh"

    #执行命令的账号是zabbix账号,非root账号,不采用sudo命令会导致命令执行后不生效,

    #另外需要说明是,这里尝试过使用具体的命令而非脚本,结果是命令执行了但不生效,因为没有具体的失败日志,也分析不出原因

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

    4. 远程命令脚本

    #根据步骤3中定义的命令脚本的路径,编辑命令脚本;
    [root@localhost ~]# vim test.sh
    
    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    
    #这里简单的认为第3个登录的tty为pts/2
    pkill -kill -t pts/2
    
    [root@localhost ~]# chmod 764 test.sh

    5. 配置sudo

    #授予zabbix账号sudo无密码执行命令的权限,如果为了安全性,可将最后一个"ALL"定义为具体的命令;
    #或在步骤4中将脚本owner修改为zabbix,并具有执行权限,但要注意脚本放置目录对zabbix账户开放可执行权限甚至可写权限,这样步骤3中脚本也不需要sudo赋予权限
    [root@localhost ~]# visudo
    
    zabbix ALL=NOPASSWD: ALL

    6. 验证

    远程登录主机第3个tty,不在CLI下做其他任何操作,触发trigger阀值,触发命令动作强制第3个登录用户下线。

    从截图可以看到,在线用户超过阀值,trigger为"PROBLEM"状态只持续了1分钟左右,即恢复到"OK"状态,表明强制第3个用户下线的脚本命令已执行,并且执行成功。

    从" Number of logged in users" Item的历史数据中也可看到trigger触发时,第3个登录用户即被下线。

    在登录的第3个tty下,可看到连接由主机自行中断(显示本地时间,与上图的主机时间有偏差)。

  • 相关阅读:
    leetcode701. Insert into a Binary Search Tree
    leetcode 958. Check Completeness of a Binary Tree 判断是否是完全二叉树 、222. Count Complete Tree Nodes
    leetcode 110. Balanced Binary Tree
    leetcode 104. Maximum Depth of Binary Tree 111. Minimum Depth of Binary Tree
    二叉树
    leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)
    5. Longest Palindromic Substring
    128. Longest Consecutive Sequence
    Mac OS下Android Studio的Java not found问题,androidfound
    安卓 AsyncHttpClient
  • 原文地址:https://www.cnblogs.com/netonline/p/7481933.html
Copyright © 2011-2022 走看看