Icinga2事件插件命令通过api启动rundeck作业

Icinga2事件插件命令通过api启动rundeck作业,api,event-handling,rundeck,icinga,Api,Event Handling,Rundeck,Icinga,我用一台tomcat服务器在icinga2中为自己创建了一个测试环境。我想结合两个软件rundeck和icinga。我的想法是在icinga检测到问题时启动rundeck作业。在我的例子中,我有一个tomcat服务器,在那里我填充了交换内存,它应该启动rundeck作业来清除交换。 我使用Icinga2主管进行管理。我创建了一个事件插件命令,它应该以脚本的形式执行rundeckapi命令,名为“rundeckapi”。看起来是这样的: #/usr/lib64/nagios/plugins/run

我用一台tomcat服务器在icinga2中为自己创建了一个测试环境。我想结合两个软件rundeck和icinga。我的想法是在icinga检测到问题时启动rundeck作业。在我的例子中,我有一个tomcat服务器,在那里我填充了交换内存,它应该启动rundeck作业来清除交换。 我使用Icinga2主管进行管理。我创建了一个事件插件命令,它应该以脚本的形式执行rundeckapi命令,名为“rundeckapi”。看起来是这样的:

#/usr/lib64/nagios/plugins/rundeckapi
#!/bin/bash 
    curl --location --request POST 'rundeck-server:4440/api/38/job/9f04657a-eaab-4e79-a5f3-00d3053f6cb0/run' \
    --header 'X-Rundeck-Auth-Token: GuaoD6PtH5BhobhE3bAPo4mGyfByjNya' \
    --header 'Content-Type: application/json' \
    --header 'Cookie: JSESSIONID=node01tz8yvp4gjkly8kpj18h8u5x42.node0' \
    --data-raw '{
        "options": {
            "IP":"192.168.4.13"
        }
    }'
#zones.d/master/service_templates.conf

        template Service "SWAP" {
        check_command = "swap"
        max_check_attempts= "5"
        check_interval = 1m
        retry_interval = 15s
        check_timeout = 10s
        enable_notifications = true
        enable_active_checks = true
        enable_passive_checks = true
        enable_event_handler = true
        enable_flapping = true
        enable_perfdata = true
        event_command = "SWAP clear"
        command_endpoint = host_name
    }
(我还尝试将命令粘贴到director的command字段中,但也没有成功。)

我将它放在/usr/lib64/nagios/plugins/目录中,并在icinga中为该命令设置如下配置:

#zones.d/director-global/command.conf

    object EventCommand "SWAP clear" {
        import "plugin-event-command"
        command = [ PluginDir + "/rundeckapi" ]
    }
服务模板如下所示:

#/usr/lib64/nagios/plugins/rundeckapi
#!/bin/bash 
    curl --location --request POST 'rundeck-server:4440/api/38/job/9f04657a-eaab-4e79-a5f3-00d3053f6cb0/run' \
    --header 'X-Rundeck-Auth-Token: GuaoD6PtH5BhobhE3bAPo4mGyfByjNya' \
    --header 'Content-Type: application/json' \
    --header 'Cookie: JSESSIONID=node01tz8yvp4gjkly8kpj18h8u5x42.node0' \
    --data-raw '{
        "options": {
            "IP":"192.168.4.13"
        }
    }'
#zones.d/master/service_templates.conf

        template Service "SWAP" {
        check_command = "swap"
        max_check_attempts= "5"
        check_interval = 1m
        retry_interval = 15s
        check_timeout = 10s
        enable_notifications = true
        enable_active_checks = true
        enable_passive_checks = true
        enable_event_handler = true
        enable_flapping = true
        enable_perfdata = true
        event_command = "SWAP clear"
        command_endpoint = host_name
    }
然后我将服务添加到主机

我启用了调试模式,开始填充交换,并在debug.log上查看
tail-f/var/log/icinga2/debug.log | grep“event handler”
,发现:

notice/Checkable: Executing event handler 'SWAP clear' for checkable 'centos_tomcat_3!SWAP'
centos_tomcat_3是测试主机。看起来事件处理程序正在执行脚本,但是当我查看rundeck服务器时,我找不到正在运行的作业。当我手动启动rundeckapi脚本时,它可以工作,我可以在rundeck上看到作业

我已经从中阅读了文档,但我没有提供帮助

如果有人能帮助我,我将非常感激。
提前感谢。

将插件定义为事件处理程序并将其分配给主机

我使用Rundeck+NGINX主机修改的docker环境进行了测试:

版本:“2”
服务:
icinga2:
#图片:约旦/icinga2
建造:
上下文:/
dockerfile:dockerfile
故障时重新启动:5
#将主机名设置为您的
#卫星将到达这个容器
主机名:icinga2
环境文件:
-机密\u sql.env
环境:
-ICINGA2_特征_石墨=1
#重要:
#保持主机名与相同
#graphite docker容器的名称
-ICINGA2\u功能\u石墨\u主机=石墨
-ICINGA2功能石墨端口=2003
-ICINGA2\u功能\u石墨\u URL=http://graphite
#-ICINGA2功能\u石墨\u发送\u阈值=真
#-ICINGA2\u功能\u石墨\u发送\u元数据=false
-ICINGAWEB2\u ADMIN\u USER=ADMIN
-ICINGAWEB2\u ADMIN\u PASS=ADMIN
#-ICINGA2_USER_FULLNAME=ICINGA2 Docker监控实例
-默认\u MYSQL\u主机=MYSQL
卷数:
-./data/icinga/cache:/var/cache/icinga2
-./data/icinga/certs:/etc/apache2/ssl
-./data/icinga/etc/icinga2:/etc/icinga2
-./data/icinga/etc/icingaweb2:/etc/icingaweb2
-./data/icinga/lib/icinga:/var/lib/icinga2
-./data/icinga/lib/php/sessions:/var/lib/php/sessions
-./data/icinga/log/apache2:/var/log/apache2
-./data/icinga/log/icinga2:/var/log/icinga2
-./data/icinga/log/icingaweb2:/var/log/icingaweb2
-./data/icinga/log/mysql:/var/log/mysql
-./data/icinga/spool:/var/spool/icinga2
#发送电子邮件
#见:https://github.com/jjethwa/icinga2#sending-通知邮件
#如果要启用出站电子邮件,请编辑文件mstmp/msmtpc
#并配置相应的邮件设置。默认值是
#Gmail示例,但msmtp可用于任何MTA配置。
#将msmtp/别名中的别名更改为收件人。
#然后取消注释下面的行
#-./msmtp/msmtprc:/etc/msmtprc:ro
#-./msmtp/别名:/etc/别名:ro
端口:
- "80:80"
- "443:443"
- "5665:5665"
石墨:
图片:graphiteapp/石墨statsd:最新
容器名称:石墨
故障时重新启动:5
主机名:graphite
卷数:
-./data/graphite/conf:/opt/graphite/conf
-./data/graphite/storage:/opt/graphite/storage
-./data/graphite/log/graphite:/var/log/graphite
-./data/graphite/log/carbon:/var/log/carbon
mysql:
图片:mariadb
容器名称:mysql
环境文件:
-机密\u sql.env
卷数:
-./data/mysql/data:/var/lib/mysql
#如果以前使用过容器的内部数据库使用:
#-./data/icinga/lib/mysql:/var/lib/mysql
跑道甲板:
图:跑道甲板/跑道甲板:3.3.12
主机名:rundeck
端口:
- '4440:4440'
nginx:
图片:nginx:alpine
主机名:nginx
端口:
- '81:80'
跑道甲板侧

  • 要访问Rundeck,请使用
    http://localhost:4440
    网址。您可以使用用户:
    admin
    和密码:
    admin
    进行访问

  • 创建一个新的和创建一个新的,我创建了以下一个,您可以到您的实例:

  • -默认选项卡:节点
    说明:“”
    executionEnabled:true
    id:c3e0860c-8f69-42f9-94b9-197d0706a915
    日志级别:信息
    名称:RestoreNGINX
    nodeFilterEditable:false
    选项:
    -姓名:opt1
    插件:
    ExecutionLifecycle:null
    scheduleEnabled:true
    顺序:
    命令:
    -exec:echo“hello${option.opt1}”
    继续:错误
    策略:节点优先
    uuid:c3e0860c-8f69-42f9-94b9-197d0706a915
    
  • 现在转到用户图标(右上)>配置文件,现在单击
    +
    图标(“用户API令牌”部分)并保存API密钥字符串,这对于从Icinga2容器创建API调用脚本非常有用

  • 转到“活动”页面(左菜单)并单击“自动刷新”复选框

  • 插入2侧

  • 使用
    http://localhost
    URL,我在docker compose文件中定义了用户名:
    admin
    和密码:
    admin

  • /usr/lib/nagios/plugins
    路径中添加以下脚本作为命令,其中包含以下内容(与您一样,这是一个curl api调用