Перейти к основному содержимому
Версия: 8.4

Nagios Core

В интерфейсе Monq создайте поток данных и скопируйте его API-ключ.

Nagios Core не имеет нативной поддержки HTTP API интерфейса. Интеграция с системой мониторинга настраивается путем добавления кастомного скрипта оповещения.

⚠️ Данная модель использует следующие статические поля, так как их значения невозможно получить в notification: INSTANCE_ID="1" OBJECT_ID="1" LAST_HARD_STATE=0

Для конфигурации потока со стороны Nagios:

  1. Включите enviroment_macros:

    enable_environment_macros=1
  2. Добавьте comands:

    define command {
    command_name send-service-event-to-sm
    command_line /usr/local/bin/send_sm 2 > /tmp/sm.log 2>&1
    }

    define command {
    command_name send-host-event-to-sm
    command_line /usr/local/bin/send_sm 1 > /tmp/sm.log 2>&1
    }
  3. Добавьте contact:

    define contact {
    use generic-contact
    contact_name sm
    alias Service Monitor
    service_notification_period 24x7
    host_notification_period 24x7
    host_notifications_enabled 1
    service_notifications_enabled 1
    service_notification_options w,u,c,r,f
    host_notification_options d,u,r,f
    service_notification_commands send-service-event-to-sm
    host_notification_commands send-host-event-to-sm
    register 1
    }
  4. Измените текущую contactgroup, добавив в нее созданный contact:

    define contactgroup{
    contactgroup_name admins
    alias Nagios Administrators
    members nagiosadmin,sm
    }
  5. Создайте скрипт:

    cat > /usr/local/bin/send_sm <<EOF
    #!/bin/bash
    #############################
    ##### Define constants ######
    #############################
    SM_URI="<sm uri with proto>"
    CONNECTOR_KEY="<key>"
    INSTANCE_ID="1"
    OBJECT_ID="1"
    LAST_HARD_STATE=0
    #################################
    ##### Define dynamic fields #####
    #################################
    STATE_TIME=`date '+%F %T'`
    OBJECTTYPE_ID=$1
    HOST_NAME=$NAGIOS_HOSTNAME
    SERVICE_DESCRIPTION=$NAGIOS_SERVICEDESC
    if [[ "$1" == "1" ]];then
    STATE=$NAGIOS_HOSTSTATEID
    LAST_STATE=$NAGIOS_LASTHOSTSTATEID
    STATE_TYPE_NAME=$NAGIOS_HOSTSTATETYPE
    ATTEMPT=$NAGIOS_HOSTATTEMPT
    MAX_ATTEMPTS=$NAGIOS_MAXHOSTATTEMPTS
    OUTPUT=$NAGIOS_HOSTOUTPUT
    else
    STATE=$NAGIOS_SERVICESTATEID
    LAST_STATE=$NAGIOS_LASTSERVICESTATEID
    STATE_TYPE_NAME=$NAGIOS_SERVICESTATETYPE
    ATTEMPT=$NAGIOS_SERVICEATTEMPT
    MAX_ATTEMPTS=$NAGIOS_MAXSERVICEATTEMPTS
    OUTPUT=$NAGIOS_SERVICEOUTPUT
    fi
    if [[ "$STATE" != "LAST_STATE" ]];then
    STATE_CHANGE=1
    else
    STATE_CHANGE=0
    fi
    if [[ "$STATE_TYPE_NAME" == "HARD" ]];then
    STATE_TYPE=1
    else
    STATE_TYPE=0
    fi
    #############################
    ##### Send http request #####
    #############################
    curl -X POST -H "Content-Type: application/json" $SM_URI/api/public/sm/v1/events-aggregator?connectorKey=$CONNECTOR_KEY \
    -d "{
    \"recordcount\": \"1\",
    \"stateentry\": [
    {
    \"instance_id\": \"$INSTANCE_ID\",
    \"state_time\": \"$STATE_TIME\",
    \"object_id\": \"$OBJECT_ID\",
    \"objecttype_id\": \"$1\",
    \"host_name\": \"$HOST_NAME\",
    \"service_description\": \"$SERVICE_DESCRIPTION\",
    \"state_change\": \"$STATE_CHANGE\",
    \"state\": \"$STATE\",
    \"state_type\": \"$STATE_TYPE\",
    \"current_check_attempt\": \"$ATTEMPT\",
    \"max_check_attempts\": \"$MAX_ATTEMPTS\",
    \"last_state\": \"$LAST_STATE\",
    \"last_hard_state\": \"$LAST_HARD_STATE\",
    \"output\": \"$OUTPUT\"
    }
    ]
    }"
    EOF
    chmod +x /usr/local/bin/send_sm

    обратите внимание на строки:

    • SM_URI="<sm uri with proto>" - укажите адрес вашего пространства Monq
    • CONNECTOR_KEY="<key>" - укажите API-ключ потока данных
  6. Перезапустите Nagios Core для применения конфига.