Avr 10 2009

Monitorer les ressources AS400 avec MRTG

Publié par à 4:29 sous AS400,Supervision

Les ressources CPU et memoire des AS400 peuvent être récupérées avec le protocole SNMP si le service a été activé. Les valeurs ne sont pas directement exploitable et doivent être retravaillées avant d’être affichées. Toutes ces commandes sont exécutées depuis un serveur Linux. Vérifiez sur votre distribution Linux pour installer snmpwalk qui doit très certainement fournir un package.


Données CPU

Il est préconisé d’extraire le CPU d’un IBM i avec l’OID SNMP .1.3.6.1.4.1.2.6.4.5.1.0 qui retourne une valeur sur 10000. Il faut donc la diviser par 100 pour l’obtenir en pourcentage.
Le 2me inconvénient est que seule la valeur entière est retournée. Elle est de ce fait erronée, puisqu’arrondie à la valeur inférieure.
L’OID HOST-RESOURCES-MIB::hrProcessorLoad.2 sur un i5 520 retourne directement cette valeur en pourcentage.

Pour l’exemple:

mrtg@serveur:~> snmpwalk -c $COMMUNITY -v1 $I5IP .1.3.6.1.4.1.2.6.4.5.1.0;
SNMPv2-SMI::enterprises.2.6.4.5.1.0 = Gauge32: 2380
mrtg@serveur:~> snmpwalk -c $COMMUNITY -v1 $I5IP .1.3.6.1.2.1.25.3.3.1.2.2
HOST-RESOURCES-MIB::hrProcessorLoad.2 = INTEGER: 24


Données Mémoire

 
Premièrement, MaxBytes, représentant la quantité max de mémoire, peut s’obtenir via snmpwalk (en KB) auquel on applique quelques changements:
expr `snmpwalk -v1 -c $COMMUNITY $IP hrMemorySize.0 | awk ‘{ print $(NF-1) }’` \* 1024

Graphique de consommation de mémoire AS400


Et voici un script shell qui calcule la RAM utilisée à partir des valeurs SNMP. On ne peut pas l’obtenir directement comme vous pouvez le constater:

#!/bin/sh
IP=$1
COMMUNITY=$2
SNMP_VERSION=$3
# RAM used
NB_ELEMENTS=`snmpwalk -v $SNMP_VERSION -c $COMMUNITY $IP hrStorageIndex \
| awk '{ print $NF }' | tail -n 1`

RAM_USED=0

for i in `seq 1 $NB_ELEMENTS`; do
  TYPE_ELEMENT=`snmpget -v $SNMP_VERSION -c $COMMUNITY $IP hrStorageDescr.$i \
  | awk '{ print $NF }'`
  if [ "$TYPE_ELEMENT" != "RAM" ]; then
    continue
  fi

  BLOCK_SIZE=`snmpget -v $SNMP_VERSION -c $COMMUNITY $IP hrStorageAllocationUnits.$i \
  | awk '{ print $(NF-1) }'`
  NB_BLOCKS_USED=`snmpget -v $SNMP_VERSION -c $COMMUNITY $IP hrStorageUsed.$i \
  | awk '{ print $NF }'`
  RAM_USED=`expr $NB_BLOCKS_USED \* $BLOCK_SIZE`
  TOTAL_RAM_USED=`expr $TOTAL_RAM_USED + $RAM_USED`
done

TOTAL_RAM_USED=`expr $TOTAL_RAM_USED`

echo $TOTAL_RAM_USED
echo $TOTAL_RAM_USED


Configuration MRTG

 
La configuration MRTG exploitant ces valeurs ressemble à ceci. Elle permet de générer le graphique ci-dessus. Ces valeurs peuvent bien sûr être utilisées par tout autre outil de surveillance comme Zabbix ou Cacti par exemple.

# La méthode classique affichant 2 fois la même valeur
# Target[AS400.cpu]:.1.3.6.1.2.1.25.3.3.1.2.2&.1.3.6.1.2.1.25.3.3.1.2.2:COMMUNITY@IP
# Ou via le script comme décrit ici
Target[AS400.cpu]:`/home/mrtg/get-as400-cpu.sh IP COMMUNITY 1`
RouterUptime[AS400.cpu]: COMMUNITY@IP
MaxBytes[AS400.cpu]: 100
Title[AS400.cpu]: Charge CPU AS400
PageTop[AS400.cpu]: <H1>Charge CPU AS400</H1>
Unscaled[AS400.cpu]: ymwd
ShortLegend[AS400.cpu]: %
YLegend[AS400.cpu]: Utilisation CPU
Legend1[AS400.cpu]: Charge CPU active
LegendI[AS400.cpu]: CPU
Options[AS400.cpu]: growright,nopercent,gauge
Colours[AS400.cpu]: RED#e13c13,RED#e13c13,RED#e13c13,RED#e13c13

# De même pour l'utilisation mémoire
Target[AS400.mem]:`/home/mrtg/get-as400-memory.sh IP COMMUNITY 1`
RouterUptime[AS400.mem]: COMMUNITY@IP
MaxBytes[AS400.mem]: 12129927168
Title[AS400.mem]: Utilisation mémoire AS400
PageTop[AS400.mem]: <H1>Utilisation mémoire AS400</H1>
Unscaled[AS400.mem]: ymwd
YLegend[AS400.mem]: Utilisation mémoire
Legend1[AS400.mem]: Utilisation mémoire
LegendI[AS400.mem]: mémoire
Options[AS400.mem]: growright,nopercent,gauge
Colours[AS400.mem]: ORANGE#F88017,ORANGE#F88017,ORANGE#F88017,ORANGE#F88017

No responses yet

Comments RSS

Leave a Reply