【问题标题】:Invoke a shell script execution using nagios使用 nagios 调用 shell 脚本执行
【发布时间】:2015-07-27 12:03:59
【问题描述】:

大家好,我有一个脚本可以重新启动服务器(/scripts/startAll.sh) 中存在的所有组件(.jar 文件)。因此,每当我的服务器出现故障时,我想使用运行在不同 linux 服务器上的 nagios 调用脚本的执行。可以这样做吗?请帮助如何使用 nagios 调用此脚本的执行?

【问题讨论】:

  • 你为什么要使用 Nagios 来启动你的服务?看看 upstart (upstart.ubuntu.com),它很容易配置并且完全符合您的要求。

标签: shell automation sh nagios


【解决方案1】:

事件处理程序

Nagios 和 Naemon 允许为主机和进入“问题状态”的服务执行自定义脚本。由于您的实现是用于重新启动特定应用程序,因此您很可能需要服务事件处理程序。

来自Nagios Documentation

事件处理程序可以通过以下方式在程序范围内启用或禁用 使用主配置文件中的 enable_event_handlers。

可以启用或禁用特定于主机和服务的事件处理程序 通过在主机和服务中使用 event_handler_enabled 指令 定义。主机和服务特定的事件处理程序不会 如果全局 enable_event_handlers 选项被禁用,则执行。


为服务或主机启用和创建事件处理程序命令

  1. 首先,通过在 Nagios 配置文件中修改或添加以下行来启用事件处理程序。

[IE:/usr/local/nagios/etc/nagios.cfg]:

enable_event_handlers=1

  1. 定义并启用将触发脚本的服务故障的事件处理程序。为此,请在您已定义的服务中添加两个 event_handler 指令。

[IE:/usr/local/nagios/etc/services.cfg]:

define service{
    host_name       my-server
    service_description my-check
    check_command       my-check-command!arg1!arg2!etc
    ....
    event_handler my-eventhandler
    event_handler_enabled   1
    }
  1. 最后一步是创建在第 2 步中命名的 event_handler 命令,并将其指向您已经创建的脚本。有几种方法(SSH、NRPE、本地托管、远程托管)。我将使用最简单的方法,在监控系统上托管一个 BASH 脚本,该脚本将通过 SSH 连接并执行:

[IE:/usr/local/nagios/etc/objects/commands.cfg]:

 define command{

        command_name    my-eventhandler

        command_line    /usr/local/nagios/libexec/eventhandlers/my-eventhandler.sh

        }

在本例中,脚本“my-eventhandler.sh”应使用 SSH 连接到远程系统,并执行您决定的命令。

注意:这只是作为您环境中一个盒子的快速、有效的解决方案。在实践中,最好远程创建一个事件处理程序脚本,并使用诸如 NRPE 之类的代理来执行命令,同时传递一个 $HOSTNAME$ 变量(从而允许解决方案跨多个系统进行扩展)。我找到的使用 NRPE 执行事件处理程序的最简单教程可以在 here 找到。

【讨论】:

  • 非常感谢您的回复。你的意思是说我应该在我的 Nagios 系统上本地创建另一个 shell 脚本。并使用该 (my-eventhandler.sh) 脚本,我应该调用远程 linux 服务器中的 shell 脚本(startAll.sh) 的执行。
  • 那行得通,是的。请注意,您将需要处理远程系统上的 sudo 访问,这有时需要在您的 sudoers 文件中禁用“requiretty”。 @ /etc/sudoers,您可以使用 Defaults:nagios !requirettyDefaults:nrpe !requiretty 安全地为 nagios + nrpe 禁用此功能(假设 nagios/nrpe 是用户)
  • 我在阅读您的帖子时尝试投票,但我没有投票的门槛声望。对不起..!!!票数=100000....
  • 我赞成您的评论,也许这会对您的代表有所帮助! :) 我认为接受答案也有帮助。 ;) 提示
【解决方案2】:

您可以通过 snmpd 使用 check_by_snmp.pl

在远程主机上运行 shell 脚本

查看https://exchange.nagios.org/directory/Plugins/*-Remote-Check-Tunneling/check_by_snmp--2F-check_snmp_extend--2F-check_snmp_exec/details

这是一个非常有用的nagios插件。我经常处理这个问题。

祝你好运!

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2019-12-02
    • 2017-01-13
    相关资源
    最近更新 更多