Мониторинг загрузки сетевого интерфейса на ESX сервере по SNMP

Сервис мониторинга Nagios3 у меня давно работает на сервере под Debian. Захотелось мне промониторить загрузку интерфейсов на серваке ESX 5. Оказалось это можно сделать по SNMP и довольно просто. Но всеже я это настраивал впервые, хочу поделиться с вами инфой и себе на заметку пригодится.
На сервер ESX зашел по SSH и подправил с помощью vi следующий файл до такого вида:

~ # cat /etc/vmware/snmp.xml
<?xml version="1.0"?>
<config><snmpSettings><enable>true</enable><port>161</port><EnvEventSource>indications</EnvEventSource><loglevel>info</loglevel><communities>SRV1-ESXi</communities><targets/><engineid>00000063000000a17f000001</engineid></snmpSettings></config>
~ #

С сервера мониторинга пробуем опросить snmp

snmpwalk -v2c -c SRV1-ESXi 192.168.2.22
SNMPv2-MIB::sysDescr.0 = STRING: VMware ESXi 5.1.0 build-799733 VMware, Inc. x86_64
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.6876.4.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (867213600) 100 days, 8:55:36.00
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING: localhost
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 72
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.2 = OID: IF-MIB::ifMIB
SNMPv2-MIB::sysORID.3 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.4 = OID: IP-FORWARD-MIB::ipForward
SNMPv2-MIB::sysORID.5 = OID: UDP-MIB::udp
SNMPv2-MIB::sysORID.6 = OID: TCP-MIB::tcp
SNMPv2-MIB::sysORID.7 = OID: SNMPv2-SMI::mib-2.47
SNMPv2-MIB::sysORID.8 = OID: SNMPv2-SMI::org.111.2.802.1.1.2
SNMPv2-MIB::sysORID.9 = OID: SNMPv2-SMI::org.111.2.802.1.1.4
SNMPv2-MIB::sysORID.10 = OID: iso.2.840.10006.300.43
SNMPv2-MIB::sysORID.11 = OID: SNMPv2-SMI::org.111.2.802.1.1.13
SNMPv2-MIB::sysORID.12 = OID: HOST-RESOURCES-MIB::hostResourcesMibModule
SNMPv2-MIB::sysORID.13 = OID: SNMPv2-SMI::enterprises.6876.1.10
SNMPv2-MIB::sysORID.14 = OID: SNMPv2-SMI::enterprises.6876.2.10
SNMPv2-MIB::sysORID.15 = OID: SNMPv2-SMI::enterprises.6876.3.10
SNMPv2-MIB::sysORID.16 = OID: SNMPv2-SMI::enterprises.6876.4.90.10
SNMPv2-MIB::sysORID.17 = OID: SNMPv2-SMI::enterprises.6876.4.20
SNMPv2-MIB::sysORDescr.1 = STRING: SNMPv2-MIB, RFC 3418
SNMPv2-MIB::sysORDescr.2 = STRING: IF-MIB, RFC 2863
SNMPv2-MIB::sysORDescr.3 = STRING: IP-MIB, RFC 4293
SNMPv2-MIB::sysORDescr.4 = STRING: IP-FORWARD-MIB, RFC 4292
SNMPv2-MIB::sysORDescr.5 = STRING: UDP-MIB, RFC 4113
SNMPv2-MIB::sysORDescr.6 = STRING: TCP-MIB, RFC 4022
SNMPv2-MIB::sysORDescr.7 = STRING: ENTITY-MIB, RFC 4133
SNMPv2-MIB::sysORDescr.8 = STRING: IEEE8021-BRIDGE-MIB, REVISION 200810150000Z
..............

Работает! Отлично.
Теперь в nagios добавляем в commands.cfg

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

Ну и создаем конфиг хоста для мониторинга:

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

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=192.168.2.22 --community=SRV1-ESXi -2 --name=vmnic0 --perfspeed --perfcheck --delta=60 -B --kbits --warning=600,600 --critical=900,900
        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$
        }

Настроим вид графика. Для этого чуток модифицируем стандартный темплейт pnp4nagios-а

root@deb1:~# cp /usr/share/pnp4nagios/html/templates.dist/check_snmp_int.php /usr/share/pnp4nagios/html/templates/check_snmp_bw.php
vim /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\" ";
}
?>

Наслаждаемся графиками 🙂

Monitoring by SNMP Bandwidth ESXi 5

Monitoring by SNMP Bandwidth ESXi 5


Enjoy!

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

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

Why ask?