繁体   English   中英

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

[英]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'

运行甲板侧

  1. 要访问 Rundeck,请使用http://localhost:4440 web 地址在浏览器中打开一个新选项卡。 您可以使用用户: admin和密码: admin访问。

  2. 创建一个新项目并创建一个新作业,我创建了以下一个,您可以将其导入到您的实例中:

- 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
  1. 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.

  2. Go 到活动页面(左侧菜单)并单击“自动刷新”复选框。

Incinga2 面

  1. 您可以使用http://localhost URL 在浏览器中打开一个新选项卡来输入 Icinga 2,我在 ZBAEDB53E845AE71F13945FCC00572AE9 文件中定义了用户名: admin和密码: admin

  2. 将以下脚本作为命令添加到/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

  1. 在 Icinga2 浏览器选项卡中,go 到 Icinga Director(左侧菜单)> 命令。 在“命令类型”列表 select“事件插件命令”中,在“命令名称”文本框中输入“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" ]
}
  1. 现在,创建主机模板(在我的示例中,我使用 Nginx 容器进行监控),go 到 Icinga Director(左侧菜单)> 主机,以及 Z99938282F0407185941ECF18F“主机模板”。16 然后单击+ Add链接(向上)。 在名称中输入主机模板名称,我使用“nginxSERVICE”,在“检查命令”文本框中输入命令来检查主机是否存活(我使用“ping”)。 现在在事件命令文本框 select 中,上一步创建的命令。

检查外观

  1. 现在是创建主机的时候了(基于前面的步骤模板)。 Go 到 Icinga 董事(左侧菜单)> 主机和 select “主机”。 然后单击+ Add链接(向上)。 在主机名上键入服务器主机名( nginx ,在 docker-compose 文件中定义),在“导入”中 select 模板是在上一步中创建的“显示名称”文本框,并在“显示名称”文本框中输入“nginx”主机地址”添加 Nginx 容器 IP。 单击“存储”按钮”,然后单击顶部的“部署”链接。

检查外观

  1. 要在主机上启用事件处理程序,go 到“概述”(左侧菜单)> 主机,select“NGINX”,在右侧部分向下滚动并在“功能命令”部分启用“事件处理程序”。

检查外观

Nginx 端(是时候测试脚本了):

  1. 停止容器和 go 到 Rundeck Activity 页面浏览器选项卡,您将看到 Icinga2 监控工具启动的作业。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM