premier stade qui fonctionne
This commit is contained in:
parent
fd89a2e6b7
commit
278e3bb39d
88
bandwidth.sh
88
bandwidth.sh
@ -1,88 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Récupération des volumes de données passées par les interfaces
|
||||
|
||||
# Tableau associatif principal pour stocker uniquement les interfaces à monitorer de l'équipement :
|
||||
# interfaces[nom] = index incrémental applicatif
|
||||
# ex : interfaces["Gi1/0/1"] = 0
|
||||
# Cet index sert à identifier l'interface choisie dans les tableaux suivants.
|
||||
#
|
||||
# Un tableau indexé classique par attribut monitoré est ensuite créé :
|
||||
# index dans les OID de l'interface : ifOidIndexes[index] = ifOidIndex
|
||||
# description de l'interface : ifDescriptions[index] = ifDescr
|
||||
# vitesse de l'interface : ifSpeeds[index] = ifSpeed
|
||||
# compteur d'octets in : ifBytesIN[index] = ifBytesIN
|
||||
# compteur d'octets out : ifBytesOUT[index] = ifBytesOUT
|
||||
|
||||
# path de snmpwalk sur le système
|
||||
snmpwalkPath=/usr/bin/snmpwalk
|
||||
|
||||
# OID de base des noms d'interface
|
||||
oidIfnames=iso.3.6.1.2.1.31.1.1.1.1
|
||||
# OID de base des descriptions d'interface
|
||||
oidIfDescriptions=1.3.6.1.2.1.2.2.1.2
|
||||
# OID de base des vitesses d'interface
|
||||
oidIfSpeeds=1.3.6.1.2.1.2.2.1.5
|
||||
# OID de base des compteurs octets IN
|
||||
oidIfBytesIN=1.3.6.1.2.1.2.2.1.10
|
||||
# OID de base des compteurs octets OUT
|
||||
oidIfBytesOUT=1.3.6.1.2.1.2.2.1.16
|
||||
|
||||
|
||||
# Test arguments entrés
|
||||
if [[ $# -eq 0 ]]; then
|
||||
echo 'Erreur de paramètre : le fichier de configuration de bandwith doit être passé'
|
||||
echo 'Usage : bandwith.sh fichier_bandwith.conf'
|
||||
exit 1
|
||||
fi;
|
||||
# Source de la configuration et tests fichiers
|
||||
if [ ! -e $1 ]; then
|
||||
echo 'Erreur : fichier '$1' non trouvé.'
|
||||
exit 1
|
||||
fi;
|
||||
source $1;
|
||||
|
||||
|
||||
# Index des interfaces de l'équipement : tableau associatif, exemple : interfaces["Gi1/0/6"] = 3
|
||||
declare -A interfaces
|
||||
for i in ${!ifnames[@]}; do
|
||||
interfaces[${ifnames[$i]}]=$i
|
||||
done
|
||||
|
||||
# Recherche des noms d'interface de l'équipement.
|
||||
# Paramètres de snmpwalk
|
||||
walkParams=' -v '$version' -c '$community' -Oq '$ip' '
|
||||
# Récupération des interfaces de l'équipement avec leur nom
|
||||
walkIfname=$($snmpwalkPath $walkParams $oidIfnames)
|
||||
|
||||
# Recherche dans tous ces noms d'interfaces, ceux demandés par le monitoring.
|
||||
# Quand un nom est trouvé, on stocke son OID (index dans les OID) dans le tableau ifOidIndexes
|
||||
# https://www.tldp.org/LDP/abs/html/string-manipulation.html
|
||||
n=1 # compteur
|
||||
oidIdx= # valeur courante oid d'interface
|
||||
substringToRemove=$oidIfnames. # chaîne à retirer du résultat oidDeBase+'.'
|
||||
for w in $walkIfname; do
|
||||
# $walkInfame contient une suite de paires OID, nom. On ne retiendra donc que l'OID correspondant au nom, soit l'élément précédent
|
||||
# on ne traite donc qu'un élément sur deux.
|
||||
modulo=$(($n%2))
|
||||
if [ $modulo == 0 ]
|
||||
then
|
||||
# le résultat courant du walk fait-il partie des clés du tableau des interfaces à monitorer ?
|
||||
# si oui, on le stocke son indexOID dans le tableau ifOidIndexes
|
||||
for i in ${!interfaces[@]}; do
|
||||
nom=\"$i\"
|
||||
if [ $nom = $w ]; then
|
||||
index=${interfaces[$i]}
|
||||
ifOidIdx=${oidIdx#$substringToRemove} # retrait de la chaine OID de base+'.' pour ne conserver que l'indexOID final
|
||||
|
||||
echo $ifOidIdx
|
||||
# stocker cet oidIndex dans le tableau au bon index $index
|
||||
fi
|
||||
done
|
||||
else
|
||||
oidIdx=$w
|
||||
fi
|
||||
|
||||
n=$((n+1))
|
||||
done
|
||||
|
||||
|
164
bandwidth_d.sh
Executable file
164
bandwidth_d.sh
Executable file
@ -0,0 +1,164 @@
|
||||
#!/bin/bash
|
||||
# Récupération des volumes de données passées par les interfaces
|
||||
# dépendances : snmp, jq
|
||||
|
||||
# Tableau associatif principal pour stocker uniquement les interfaces à monitorer de l'équipement :
|
||||
# interfaces[nom] = index incrémental applicatif
|
||||
# ex : interfaces["Gi1/0/1"] = 0
|
||||
# Cet index sert à identifier l'interface choisie dans les tableaux suivants.
|
||||
# Il s'agît du tableau des équipements/interfaces demandés du fichier json. Ils ou elles peuvent ne pas être trouvé(e)s dans la réalité.
|
||||
#
|
||||
# Un tableau indexé classique par attribut monitoré est ensuite créé :
|
||||
# Id dans les OID de l'interface : ifIds[index] = ifId
|
||||
# nom de l'interface réellement monitorée ifMonitor[index] = nom (tableau inverse de interfaces, contenant seulement les monitorées)
|
||||
# description de l'interface : ifDescriptions[index] = ifDescr
|
||||
# vitesse de l'interface : ifSpeeds[index] = ifSpeed
|
||||
# compteur d'octets in : ifBytesIN[index] = ifBytesIN
|
||||
# compteur d'octets out : ifBytesOUT[index] = ifBytesOUT
|
||||
|
||||
# path de snmpwalk sur le système
|
||||
snmpwalkPath=/usr/bin/snmpwalk
|
||||
# path de snmpget sur le système
|
||||
snmpgetPath=/usr/bin/snmpget
|
||||
# fichier de log du script
|
||||
ficLog=bandwith.log
|
||||
# fichier des resultats des mesures
|
||||
ficMes=bandwith.json
|
||||
|
||||
# délai d'attente avant la prochaine mesure en secondes
|
||||
delay=1
|
||||
# nombre de mesures à conserver
|
||||
nbMesures=5
|
||||
|
||||
|
||||
# OID de base des noms d'interface
|
||||
oidIfnames=1.3.6.1.2.1.31.1.1.1.1
|
||||
# OID de base des descriptions d'interface
|
||||
oidIfDescriptions=1.3.6.1.2.1.2.2.1.2
|
||||
# OID de base des vitesses d'interface
|
||||
oidIfSpeeds=1.3.6.1.2.1.2.2.1.5
|
||||
# OID de base des compteurs octets IN
|
||||
oidIfBytesIN=1.3.6.1.2.1.2.2.1.10
|
||||
# OID de base des compteurs octets OUT
|
||||
oidIfBytesOUT=1.3.6.1.2.1.2.2.1.16
|
||||
|
||||
|
||||
# Test arguments entrés
|
||||
if [[ $# -eq 0 ]]; then
|
||||
echo 'Erreur de paramètre : le fichier de configuration de bandwith doit être passé'
|
||||
echo 'Usage : bandwith.sh fichier_bandwith.conf'
|
||||
exit 1
|
||||
fi;
|
||||
# Source de la configuration et tests fichiers
|
||||
if [ ! -e $1 ]; then
|
||||
echo 'Erreur : fichier '$1' non trouvé.'
|
||||
exit 1
|
||||
fi;
|
||||
source $1;
|
||||
|
||||
|
||||
# Index des interfaces de l'équipement : tableau associatif, exemple : interfaces["Gi1/0/6"] = 3
|
||||
declare -A interfaces
|
||||
for i in ${!ifnames[@]}; do
|
||||
interfaces[${ifnames[$i]}]=$i
|
||||
done
|
||||
|
||||
# Déclaration des tableaux
|
||||
ifMonitor=()
|
||||
ifIds=()
|
||||
ifDescriptions=()
|
||||
ifSpeeds=()
|
||||
ifBytesIN=()
|
||||
ifBytesOUT=()
|
||||
|
||||
|
||||
# Recherche des noms d'interface de l'équipement.
|
||||
# Paramètres de snmpwalk
|
||||
walkParams=' -v '$version' -c '$community' -Onq '$ip' '
|
||||
# Récupération des interfaces de l'équipement avec leur nom
|
||||
walkIfname=$($snmpwalkPath $walkParams $oidIfnames)
|
||||
|
||||
|
||||
# Recherche dans tous ces noms d'interfaces, ceux demandés par le monitoring.
|
||||
# Quand un nom est trouvé, on stocke son Id dans le tableau ifIds
|
||||
# https://www.tldp.org/LDP/abs/html/string-manipulation.html
|
||||
n=1 # compteur
|
||||
currentId= # valeur courante Id d'interface
|
||||
substringToRemove=.$oidIfnames. # chaîne à retirer du résultat '.'+oidDeBase+'.'
|
||||
for w in $walkIfname; do
|
||||
# $walkInfame contient une suite de paires OID, nom. On ne retiendra donc que l'OID correspondant au nom, soit l'élément précédent
|
||||
# on ne traite donc qu'un élément sur deux en calculant le modulo 2 du compteur incrémental.
|
||||
modulo=$(($n%2))
|
||||
if [ $modulo == 0 ]
|
||||
then
|
||||
# le résultat courant du walk fait-il partie des clés du tableau des interfaces à monitorer ?
|
||||
# si oui, on le stocke son Id dans le tableau idIds
|
||||
for i in ${!interfaces[@]}; do
|
||||
nom=\"$i\"
|
||||
if [ $nom = $w ]; then
|
||||
# récupération de l'index applicatif dans le tableau global des interfaces monitorées
|
||||
index=${interfaces[$i]}
|
||||
|
||||
# pour comprendre la valeur renvoyée ici par le walk : echo $oidIdCurrent
|
||||
|
||||
# retrait de la chaine OID de base entourée de '.' pour ne conserver que l'Id final de l'interface
|
||||
ifId=${currentId#$substringToRemove}
|
||||
|
||||
# stockage de l'Id de l'interface à l'index $index du tableau des Id
|
||||
ifIds[$index]=$ifId
|
||||
|
||||
# stockage du nom de l'interface monitorée
|
||||
ifMonitor[$index]=$i
|
||||
|
||||
# log de l'entrée monitorée
|
||||
echo $i monitorée >> $ficLog
|
||||
|
||||
# plus besoin de continuer la boucle si on a trouvé l'interface
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
currentId=$w
|
||||
fi
|
||||
|
||||
n=$((n+1))
|
||||
done
|
||||
|
||||
#######################################
|
||||
# #
|
||||
# Boucle de monitoring #
|
||||
# #
|
||||
#######################################
|
||||
|
||||
# nombre de lignes à conserver dans le fichier de mesure = nb interfaces * nbMesures
|
||||
nbLignes=$((${#ifMonitor[@]} * $nbMesures))
|
||||
|
||||
# Paramètres de snmpget
|
||||
getParams=' -v '$version' -c '$community' -Ovq '$ip' '
|
||||
|
||||
while :
|
||||
do
|
||||
# boucle sur les interfaces réellement monitorées
|
||||
for index in ${!ifMonitor[@]}; do
|
||||
# récupération de l'Id de l'interface
|
||||
ifId=${ifIds[$index]}
|
||||
# récupération du nom
|
||||
nom=${ifMonitor[$index]}
|
||||
# collecte de la description
|
||||
resDescription=$($snmpgetPath $getParams $oidIfDescriptions.$ifId)
|
||||
# collecte de la vitesse
|
||||
resSpeed=$($snmpgetPath $getParams $oidIfSpeeds.$ifId)
|
||||
# collecte des octets IN
|
||||
resIN=$($snmpgetPath $getParams $oidIfBytesIN.$ifId)
|
||||
# collecte des octets OUT
|
||||
resOUT=$($snmpgetPath $getParams $oidIfBytesOUT.$ifId)
|
||||
|
||||
echo $nom $resDescription $resSpeed $resIN $resOUT $(date +%s)>> $ficMes
|
||||
tail -n $nbLignes $ficMes > tmp
|
||||
cat tmp > $ficMes
|
||||
|
||||
done
|
||||
sleep $delay
|
||||
done
|
||||
|
||||
|
0
bandwidth_results.json
Normal file
0
bandwidth_results.json
Normal file
114
bandwith.log
Normal file
114
bandwith.log
Normal file
@ -0,0 +1,114 @@
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
||||
Gi1/0/1 monitorée
|
||||
Gi1/0/2 monitorée
|
||||
Gi1/0/22 monitorée
|
12
tmp
Normal file
12
tmp
Normal file
@ -0,0 +1,12 @@
|
||||
Gi1/0/22 "GigabitEthernet1/0/22" 1000000000 110319963 3543321846 1544784423
|
||||
Gi1/0/1 "GigabitEthernet1/0/1" 1000000000 3452311947 1423049065 1544784423
|
||||
Gi1/0/2 "GigabitEthernet1/0/2" 1000000000 1696879584 3526220312 1544784423
|
||||
Gi1/0/22 "GigabitEthernet1/0/22" 1000000000 110833877 3543421984 1544784424
|
||||
Gi1/0/1 "GigabitEthernet1/0/1" 1000000000 3457697917 1424615028 1544784424
|
||||
Gi1/0/2 "GigabitEthernet1/0/2" 1000000000 1696955769 3526300235 1544784424
|
||||
Gi1/0/22 "GigabitEthernet1/0/22" 1000000000 112145050 3543630120 1544784425
|
||||
Gi1/0/1 "GigabitEthernet1/0/1" 1000000000 3462709301 1426695350 1544784425
|
||||
Gi1/0/2 "GigabitEthernet1/0/2" 1000000000 1697075299 3526407181 1544784425
|
||||
Gi1/0/22 "GigabitEthernet1/0/22" 1000000000 118222037 3543870220 1544784426
|
||||
Gi1/0/1 "GigabitEthernet1/0/1" 1000000000 3464144821 1434382362 1544784426
|
||||
Gi1/0/2 "GigabitEthernet1/0/2" 1000000000 1697815798 3526778946 1544784426
|
Loading…
x
Reference in New Issue
Block a user