[英]Icinga2 event plugin command starting a rundeck job via api
我使用 tomcat 服务器在 icinga2 中为自己创建了一个测试环境。 我想将rundeck和icinga这两个软件结合起来。 我的想法是在 icinga 检测到问题时开始运行甲板工作。 在我的情况下,我有一个 tomcat 服务器,在那里我填充了交换 memory,它应该启动 rundeck 作业以清除交换。 我正在使用 Icinga2 Director 进行管理。 我创建了一个事件插件命令,它应该将 rundeck api 命令作为脚本执行,称为“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"
}
}'
(我也尝试将命令粘贴到director的命令字段中,但这也不起作用。)
我将它放在 /usr/lib64/nagios/plugins/ 目录中,并在 icinga 中为命令设置配置如下:
#zones.d/director-global/command.conf
object EventCommand "SWAP clear" {
import "plugin-event-command"
command = [ PluginDir + "/rundeckapi" ]
}
服务模板如下所示:
#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
}
然后我将服务添加到主机。
我启用了调试模式并开始填充 SWAP 并查看 debug.log,使用tail -f /var/log/icinga2/debug.log | grep 'event handler'
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 是测试主机。 IT 似乎事件处理程序正在执行脚本,但是当我查看 rundeck 服务器时,我找不到正在运行的作业。 当我手动启动 rundeckapi 脚本时,它可以工作,我可以在 rundeck 上看到该作业。
我已经阅读了icinga的文档,但我没有提供帮助。
如果有人可以帮助我,我将非常感激。 提前致谢。
将插件定义为事件处理程序并将其分配给主机。
我使用这个用 Rundeck官方镜像修改的 docker 环境 + 一个 NGINX 主机进行了测试:
version: '2'
services:
icinga2:
#image: jordan/icinga2
build:
context: ./
dockerfile: Dockerfile
restart: on-failure:5
# Set your hostname to the FQDN under which your
# sattelites will reach this container
hostname: icinga2
env_file:
- secrets_sql.env
environment:
- ICINGA2_FEATURE_GRAPHITE=1
# Important:
# keep the hostname graphite the same as
# the name of the graphite docker-container
- ICINGA2_FEATURE_GRAPHITE_HOST=graphite
- ICINGA2_FEATURE_GRAPHITE_PORT=2003
- ICINGA2_FEATURE_GRAPHITE_URL=http://graphite
# - ICINGA2_FEATURE_GRAPHITE_SEND_THRESHOLDS=true
# - ICINGA2_FEATURE_GRAPHITE_SEND_METADATA=false
- ICINGAWEB2_ADMIN_USER=admin
- ICINGAWEB2_ADMIN_PASS=admin
#- ICINGA2_USER_FULLNAME=Icinga2 Docker Monitoring Instance
- DEFAULT_MYSQL_HOST=mysql
volumes:
- ./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
# Sending e-mail
# See: https://github.com/jjethwa/icinga2#sending-notification-mails
# If you want to enable outbound e-mail, edit the file mstmp/msmtprc
# and configure to your corresponding mail setup. The default is a
# Gmail example but msmtp can be used for any MTA configuration.
# Change the aliases in msmtp/aliases to your recipients.
# Then uncomment the rows below
# - ./msmtp/msmtprc:/etc/msmtprc:ro
# - ./msmtp/aliases:/etc/aliases:ro
ports:
- "80:80"
- "443:443"
- "5665:5665"
graphite:
image: graphiteapp/graphite-statsd:latest
container_name: graphite
restart: on-failure:5
hostname: graphite
volumes:
- ./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:
image: mariadb
container_name: mysql
env_file:
- secrets_sql.env
volumes:
- ./data/mysql/data:/var/lib/mysql
# If you have previously used the container's internal DB use:
#- ./data/icinga/lib/mysql:/var/lib/mysql
rundeck:
image: rundeck/rundeck:3.3.12
hostname: rundeck
ports:
- '4440:4440'
nginx:
image: nginx:alpine
hostname: nginx
ports:
- '81:80'
运行甲板侧:
要访问 Rundeck,请使用http://localhost:4440
web 地址在浏览器中打开一个新选项卡。 您可以使用用户: admin
和密码: admin
访问。
- defaultTab: nodes
description: ''
executionEnabled: true
id: c3e0860c-8f69-42f9-94b9-197d0706a915
loglevel: INFO
name: RestoreNGINX
nodeFilterEditable: false
options:
- name: opt1
plugins:
ExecutionLifecycle: null
scheduleEnabled: true
sequence:
commands:
- exec: echo "hello ${option.opt1}"
keepgoing: false
strategy: node-first
uuid: c3e0860c-8f69-42f9-94b9-197d0706a915
Now go to the User Icon (up to right) > Profile, now click on the +
icon ("User API Tokens" section) and save the API key string, useful to create the API call script from the Icinga2 container.
Go 到活动页面(左侧菜单)并单击“自动刷新”复选框。
Incinga2 面:
您可以使用http://localhost
URL 在浏览器中打开一个新选项卡来输入 Icinga 2,我在 ZBAEDB53E845AE71F13945FCC00572AE9 文件中定义了用户名: admin
和密码: admin
。
将以下脚本作为命令添加到/usr/lib/nagios/plugins
路径,其中包含以下内容(它是 curl api 调用,就像您的场景一样,ZDB974238714CA8DE634A7CE1D083A14 的第三步中的关键部分是“RZundeck”一步步):
#!/bin/bash
curl --location --request POST 'rundeck:4440/api/38/job/c3e0860c-8f69-42f9-94b9-197d0706a915/run' --header 'X-Rundeck-Auth-Token: Zf41wIybwzYhbKD6PrXn01ZMsV2aT8BR' --header 'Content-Type: application/json' --data-raw '{ "options": { "opt1": "world" } }'
同时使脚本可执行: chmod +x /usr/lib/nagios/plugin/restorenginx
/usr/lib/nagios/plugins/restorenginx
)。 然后单击“存储”按钮(底部),现在单击部署(上)。检查外观。
这是配置预览(位于zones.d/director-global/commands.conf
):
object EventCommand "restorenginx" {
import "plugin-event-command"
command = [ "/usr/lib/nagios/plugins/restorenginx" ]
}
+ Add
链接(向上)。 在名称中输入主机模板名称,我使用“nginxSERVICE”,在“检查命令”文本框中输入命令来检查主机是否存活(我使用“ping”)。 现在在事件命令文本框 select 中,上一步创建的命令。检查外观。
+ Add
链接(向上)。 在主机名上键入服务器主机名( nginx
,在 docker-compose 文件中定义),在“导入”中 select 模板是在上一步中创建的“显示名称”文本框,并在“显示名称”文本框中输入“nginx”主机地址”添加 Nginx 容器 IP。 单击“存储”按钮”,然后单击顶部的“部署”链接。检查外观。
检查外观。
Nginx 端(是时候测试脚本了):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.