Nagios3 — Мониторим Bandwidth в ESX 5.x через SNMP

Расскажу и покажу как мониторить загруженность сетевых интерфейсов (bandwidth) в ESX версии 5.x через SNMP. К слову сказать, с помощью SNMP в ESX можно мониторить загрузку CPU, памяти, винтов и прочие параметры … но главное понять принцип как это делается, а дальше — дело техники! Для начала на серваке с ESX нужно включить SNMP. Не вижу смысла повторять героический подвиг и ваять скриншотики, вот тут коллеги уже прекрасно справились — тыц!
Итак, далее предполагаю что Nagios3 у вас уже установлен и настроен. Поехали дельше …

Правилом хорошего тона настройки Nagios является создание шаблонов для каждого типа обьекта мониторинга. Проще говоря создадим темплейт хоста для ESX серверов:

root@nagios3:~# cat /etc/nagios3/templates/regions/01_esxi.cfg
# Generic host definition template - This is NOT a real host, just a template!

define host{
        name                    generic-esxi    ; The name of this host template
        notifications_enabled           1       ; Host notifications are enabled
        event_handler_enabled           1       ; Host event handler is enabled
        flap_detection_enabled          1       ; Flap detection is enabled
        failure_prediction_enabled      1       ; Failure prediction is enabled
        process_perf_data               1       ; Process performance data
        retain_status_information       1       ; Retain status information across program restarts
        retain_nonstatus_information    1       ; Retain non-status information across program restarts
                check_command                   check-host-alive
                max_check_attempts              10
                notification_interval           0
                notification_period             24x7
                notification_options            d,u,r
                contact_groups                  admins
        register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
        icon_image      cook/esxi.png
        statusmap_image cook/esxi.png
        }
root@nagios3:~#

Теперь создаем конфиг хоста и сервиса в Nagios3:

root@nagios3:~# cat /etc/nagios3/esx.cfg
###############################################################################
# SWITCH.CFG - SAMPLE CONFIG FILE FOR MONITORING A SWITCH
#
# Last Modified: 10-03-2007
#
# NOTES: This config file assumes that you are using the sample configuration
#        files that get installed with the Nagios quickstart guide.
#
###############################################################################

###############################################################################
###############################################################################
#
# HOST DEFINITIONS
#
###############################################################################
###############################################################################

# Define the switch that we'll be monitoring

define host{
        use             generic-esxi    ; Inherit default values from a template
        host_name       co_esx          ; The name we're giving to this switch
        alias           CO ESX Server   ; A longer name associated with the switch
        address         10.100.2.2      ; IP address of the switch
        hostgroups      ESXi            ; Host groups this switch is associated with
        }


###############################################################################
###############################################################################
#
# HOST GROUP DEFINITIONS
#
###############################################################################
###############################################################################

# Create a new hostgroup for switches

#define hostgroup{
#       hostgroup_name  Mikrotiks               ; The name of the hostgroup
#       alias           Region routers  ; Long name of the group
#       }


###############################################################################
###############################################################################
#
# SERVICE DEFINITIONS
#
###############################################################################
###############################################################################

# Create a service to PING to switch

define service{
        use                     generic-service ; Inherit values from a template
        host_name               co_esx          ; The name of the host the service is associated with
        service_description     PING            ; The service description
        check_command           check_ping!20.0,20%!100.0,60%   ; The command used to monitor the service
        normal_check_interval   5               ; Check the service every 5 minutes under normal conditions
        retry_check_interval    1               ; Re-check the service every minute until its final/hard state is determined
        }

define service{
        use                     generic-service ; Inherit values from a template
        host_name               co_esx          ; The name of the host the service is associated with
        service_description     LAN_Bandtwidth  ; The service description
        check_command           check_snmp_bw!--hostname=10.100.2.2 --community=ESX5x -2 --name=vmnic0 --perfparse -k --delta=60 --kbits --warning=10240,10240 --critical=20480,20480
        normal_check_interval   1m              ; Check the service every 5 minutes under normal conditions
        retry_check_interval    1m              ; Re-check the service every minute until its final/hard state is determined
        action_url              /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
        }

define service{
        use                     generic-service  ; Inherit values from a template
        host_name               co_esx           ; The name of the host the service is associated with
        service_description     WWW_Bandtwidth   ; The service description
        check_command           check_snmp_bw!--hostname=10.100.2.2 --community=ESX5x -2 --name=vmnic1 --perfparse -k --delta=60 --kbits --warning=10240,10240 --critical=20480,20480
        normal_check_interval   1m               ; Check the service every 5 minutes under normal conditions
        retry_check_interval    1m               ; Re-check the service every minute until its final/hard state is determined
        action_url              /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
        }

root@nagios3:~#

Как видите для сервиса используется команда check_snmp_bw , чтобы иметь возможность ее использования для других хостов я добавил эту команду глобально в конфиг /etc/nagios3/commands.cfg вот в таком виде:

define command{
       command_name    check_snmp_bw
       command_line    $USER1$/check_snmp_int.pl $ARG1$
}

Конечно же все вышеприведенные конфиги должны быть включены в основной конфиг нагиоса /etc/nagios3/nagios.cfg опциями cfg_file или cfg_dir.
Ну и для тех у кого к Nagios3 прикручен pnp4nagios для рисования глямурных графиков вот такой темплейт:

root@nagios3:~# cat /usr/share/pnp4nagios/html/templates/check_snmp_bw.php
<?php
#
# Copyright (c) 2006-2010 Joerg Linge (http://www.pnp4nagios.org)
# Plugin: check_snmp_int.pl (COUNTER)
#
$opt[1] = " --vertical-label \"Bits\" -b 1000 --title \"Interface Traffic for $hostname / $servicedesc\" ";
$def[1] = "DEF:var1=$RRDFILE[1]:$DS[1]:AVERAGE " ;
$def[1] .= "DEF:var2=$RRDFILE[2]:$DS[2]:AVERAGE " ;
$def[1] .= "LINE1:var1#4169E1:\"in  \" " ;
$def[1] .= "GPRINT:var1:LAST:\"%7.2lf %Sb/s last\" " ;
$def[1] .= "GPRINT:var1:AVERAGE:\"%7.2lf %Sb/s avg\" " ;
$def[1] .= "GPRINT:var1:MAX:\"%7.2lf %Sb/s max\\n\" " ;
$def[1] .= "LINE1:var2#32CD32:\"out \" " ;
$def[1] .= "GPRINT:var2:LAST:\"%7.2lf %Sb/s last\" " ;
$def[1] .= "GPRINT:var2:AVERAGE:\"%7.2lf %Sb/s avg\" " ;
$def[1] .= "GPRINT:var2:MAX:\"%7.2lf %Sb/s max\\n\" ";
if($this->MACRO['TIMET'] != ""){
    $def[1] .= "VRULE:".$this->MACRO['TIMET']."#000000:\"Last Service Check \\n\" ";
}
?>
root@nagios3:~#

Выглядит это безобразие вот так:
Nagios3 - Monitoring ESX Bandwidth

Enjoy!

  1. Комментов пока нет

  1. Трэкбэков пока нет.

Why ask?