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

    zabbix 远程执行命令 重启应用 服务器

    使用远程执行命令可以在某些时候帮我做一些事情,达到轻量级的自动化,比如当 nginx、mysql、php、redis、tomcat、等等应用挂掉时帮我们自动重启并告警。再比如当磁盘空间满了,自动帮我们清理垃圾日志文件等。看下官网的描述:

    使用远程命令,您可以定义在某些情况下,监视的主机上会自动执行某个预定义的命令。

    在功能最明显的用途中,您可以尝试:

    • 如果没有响应,则自动重新启动某些应用程序(Web服务器,中间件,CRM)
    • 如果不响应请求,请使用IPMI“reboot”命令重新启动一些远程服务器
    • 如果磁盘空间不足,可自动释放磁盘空间(删除较旧的文件,清理/tmp)
    • 根据CPU负载,将VM从一个物理机移植到另一个物理机
    • 在CPU(磁盘,内存,任何资源)不足的情况下,将新节点添加到云环境中

    远程命令限制为255个字符。可以通过将多个命令放置在新行上来执行多个命令。远程命令可能包含宏。

    • 如果没有响应,则自动重新启动某些应用程序(Web服务器,中间件,CRM)
    • 如果不响应请求,请使用IPMI“reboot”命令重新启动一些远程服务器
    • 如果磁盘空间不足,可自动释放磁盘空间(删除较旧的文件,清理/ tmp)
    • 根据CPU负载,将VM从一个物理盒移植到另一个物理盒
    • 在CPU(磁盘,内存,任何资源)不足的情况下,将新节点添加到云环境中

    参考官档:https://www.zabbix.com/documentation/4.0/zh/manual/config/notifications/action/operation/remote_command

    实战

    描述:该实战是完全创建一个新的模板,用于专们管理日常的一些服务等,在新建的模板上面创建对应服务的监控项、触发器、动作等。

    具体步骤:

    zabbix-agent端

    1)根据官网提示 首先打开zabbix-agent上的 EnableRemoteCommands 参数

    # vim /etc/zabbix/zabbix_agentd.conf
    EnableRemoteCommands=1

    2)创建一个脚本存放路径

    # mkdir /etc/zabbix/script

    3)创建一个新的脚本

    # vim /etc/zabbix/script/service_status.sh
    #!/bin/bash 
    #Desc:zabbix 远程执行命令、重启应用 nginx、mysql、php、等
    #Date:2019-5-8
    #by:Lee-YJ
    
    case $1 in
        Nginx)
            result=`pidof nginx  |wc -l`
            echo $result
            ;;
        Php)
            result=`pidof php-fpm  |wc -l`
            echo $result
            ;;
        Mysql)
            result=`pidof mysqld  |wc -l`
            echo $result
            ;;
        *)
            echo "Usage:$0(Nginx|Php|Mysql)"
            ;;
    esac
    "pidof nginx  |wc -l" 这条命令用于判断nginx进程是否存在,如果存在则返回1,不存在返回0
    脚本补充说明

    4)赋予脚本执行权限

    # chmod +x /etc/zabbix/script/service_status.sh

    5)创建一个新的专门用于服务监控的子配置文件

    # cd /etc/zabbix/zabbix_agentd.d
    # vim userparameter_service.conf
    # 获取服务运行状态
    UserParameter=service.status[*],/etc/zabbix/script/service_status.sh $1

    6)重启 zabbix-agent

    # service zabbix-agent restart

    7)在 zabbix-server 端用命令进行测试

    # zabbix_get -s 47.104.xx.xx -k "service.status[Nginx]"
    1
    # zabbix_get -s 47.104.xx.xx -k "service.status[Mysql]"
    1
    # zabbix_get -s 47.104.xx.xx -k "service.status[Php]"
    1
    当返回1时表示客户端服务正常,当返回0时表示客户端服务不正常(根据上面脚本内容所得)
    测试结果补充说明

    zabbix-server Web端

    1)创建一个模板 Check Service (自定义名字)

    创建完成后里面什么东西都没有(应用集、监控项、触发器、图形等)

    2)创建一个应用集 service (自定义名字)

    3)创建监控项(键值说明,这里我们得根据配置文件里面定义的来进行配置;service.status[Nginx])

    4)创建触发器(最新的t值说明:根据前面的命令结果判断,pidof vsftpd  |wc -l ,如果nginx处于运行状态该值为1,反正为0则为挂了,所以这里触发器判断是否为0)

    5)给监控的主机链接上 Check Service 模板

    6)测试;在配监控的主机上停掉nginx,后观察仪表盘

    从上面可以看到当nginx挂掉后会第一时间发送邮件告知相关人员;但是我们更多的是希望能够帮我们自动重启nginx;那么接下来配置自动重启

    7)配置动作(远程执行命令、恢复操作等)

    进入:配置 -> 动作 -> 创建动作

    配置操作:配置操作时执行重启命令,(注意:因为zabbix 进程是使用zabbix用户来维护的,所以它没有权限去执行重启nginx命令,这里需要先在 zabbix-agent 上授权)

    # chmod 640 /etc/sudoers
    # vim /etc/sudoers    //编辑sudo文件,添加如下两行
    # Allow 'zabbix' user to restart nginx without password
    zabbix  ALL=NOPASSWD: /etc/init.d/nginx restart

    添加恢复操作:

    到这里就配置完成了,当我在 zabbix-agent 上面停掉 nginx,便会自动帮我们重启并发送邮件

    至此,zabbix远程执行命令就配置完成了。

    附zabbix-agent端上的配置脚本(只针对当前配置里面的nginx、mysql、php)

    #!/bin/bash 
    #Desc:用于配置zabbix远程执行命令,zabbix-agent端上面的操作(包括nginx、mysql、php)
    #Date:2019-5-8
    #by:Lee-YJ
    
    mkdir /etc/zabbix/script -p
    
    cat >>/etc/zabbix/script/service_status.sh<<EOF
    #!/bin/bash 
    #Desc:zabbix 远程执行命令、重启应用 nginx、mysql、php、等
    #Date:2019-5-8
    #by:Lee-YJ
    
    case $1 in
        Nginx)
            result=\`pidof nginx  |wc -l\`
            echo $result
            ;;
        Php)
            result=\`pidof php-fpm  |wc -l\`
            echo $result
            ;;
        Mysql)
            result=\`pidof mysqld  |wc -l\`
            echo $result
            ;;
        *)
            echo "Usage:$0(Nginx|Php|Mysql)"
            ;;
    esac
    EOF
    
    chmod +x /etc/zabbix/script/service_status.sh
    
    sed -i 's/# EnableRemoteCommands=0/EnableRemoteCommands=1/' /etc/zabbix/zabbix_agentd.conf
    
    cat >/etc/zabbix/zabbix_agentd.d/userparameter_service.conf<<EOF
    # 获取服务运行状态
    UserParameter=service.status[*],/etc/zabbix/script/service_status.sh $1
    EOF
    
    service zabbix-agent restart
    
    chmod 640 /etc/sudoers
    echo "zabbix  ALL=NOPASSWD: /etc/init.d/nginx restart" >> /etc/sudoers
    echo "zabbix  ALL=NOPASSWD: /etc/init.d/mysqld restart" >> /etc/sudoers
    echo "zabbix  ALL=NOPASSWD: /etc/init.d/php-fpm restart" >> /etc/sudoers
    zabbix-agent_config.sh
  • 相关阅读:
    Hessian简要入门
    MapReduce启动的Map/Reduce子任务简要分析
    hive默认分隔符引起的日志分割问题
    Spring MVC中发布Restful Web服务
    JPA基本介绍以及使用
    hsqldb简单使用总结
    Vim编辑器基本操作学习(二)
    locale错误导致Java中文乱码错误的总结
    Vim编辑器基本操作学习(一)
    hadoop map任务Combiner被调用的源码逻辑简要分析
  • 原文地址:https://www.cnblogs.com/yanjieli/p/10833311.html
Copyright © 2011-2022 走看看