Icinga2事件插件命令通过api启动rundeck作业
我用一台tomcat服务器在icinga2中为自己创建了一个测试环境。我想结合两个软件rundeck和icinga。我的想法是在icinga检测到问题时启动rundeck作业。在我的例子中,我有一个tomcat服务器,在那里我填充了交换内存,它应该启动rundeck作业来清除交换。 我使用Icinga2主管进行管理。我创建了一个事件插件命令,它应该以脚本的形式执行rundeckapi命令,名为“rundeckapi”。看起来是这样的: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
#/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'
跑道甲板侧:
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调用脚本非常有用
http://localhost
URL,我在docker compose文件中定义了用户名:admin
和密码:admin
/usr/lib/nagios/plugins
路径中添加以下脚本作为命令,其中包含以下内容(与您一样,这是一个curl api调用