json in et out ok

This commit is contained in:
Jérôme Bousquié 2018-12-14 15:48:56 +01:00
parent 278e3bb39d
commit 87b52d81fa
4 changed files with 217 additions and 17 deletions

View File

@ -1,6 +1,12 @@
ip=192.168.0.100 {
community=comcacti "ip": "192.168.0.100",
version=2c "community": "comcacti",
ifnames=(Gi1/0/22 Gi1/0/25 Gi1/0/27 Gi1/0/1 Gi1/0/2) "version": "2c",
# refaire en JSON "interfaces": {
# parser avec jq : https://stedolan.github.io/jq/ "Gi1/0/22": "truc",
"Gi1/0/25": "bidule",
"Gi1/0/27": "machin",
"Gi1/0/1": null,
"Gi1/0/2": null
}
}

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Récupération des volumes de données passées par les interfaces # Récupération des volumes de données passées par les interfaces
# dépendances : snmp, jq # dépendances : bash4+, snmp, jq
# Tableau associatif principal pour stocker uniquement les interfaces à monitorer de l'équipement : # Tableau associatif principal pour stocker uniquement les interfaces à monitorer de l'équipement :
# interfaces[nom] = index incrémental applicatif # interfaces[nom] = index incrémental applicatif
@ -20,10 +20,13 @@
snmpwalkPath=/usr/bin/snmpwalk snmpwalkPath=/usr/bin/snmpwalk
# path de snmpget sur le système # path de snmpget sur le système
snmpgetPath=/usr/bin/snmpget snmpgetPath=/usr/bin/snmpget
# fichier de log du script # path de jq sur le système
ficLog=bandwith.log jqPath=/usr/bin/jq
# fichier de log du script (nom très différent pour ne pas écraser involontairement les autres fichiers)
ficLog=log_bw.log
# fichier des resultats des mesures # fichier des resultats des mesures
ficMes=bandwith.json ficMes=bandwidth_results.json
# délai d'attente avant la prochaine mesure en secondes # délai d'attente avant la prochaine mesure en secondes
delay=1 delay=1
@ -54,8 +57,16 @@ if [ ! -e $1 ]; then
echo 'Erreur : fichier '$1' non trouvé.' echo 'Erreur : fichier '$1' non trouvé.'
exit 1 exit 1
fi; fi;
source $1;
# recupération des variables de la configuration
ip=$($jqPath -r .ip $1)
community=$($jqPath -r .community $1)
version=$($jqPath -r .version $1)
listeNoms=$($jqPath -r '.interfaces | keys[]' $1)
ifnames=()
for n in $listeNoms; do
ifnames+=($n)
done
# Index des interfaces de l'équipement : tableau associatif, exemple : interfaces["Gi1/0/6"] = 3 # Index des interfaces de l'équipement : tableau associatif, exemple : interfaces["Gi1/0/6"] = 3
declare -A interfaces declare -A interfaces
@ -111,7 +122,7 @@ for w in $walkIfname; do
ifMonitor[$index]=$i ifMonitor[$index]=$i
# log de l'entrée monitorée # log de l'entrée monitorée
echo $i monitorée >> $ficLog echo $i monitorée : $(date '+%Y-%m-%d %H:%M:%S') >> $ficLog
# plus besoin de continuer la boucle si on a trouvé l'interface # plus besoin de continuer la boucle si on a trouvé l'interface
break break
@ -144,8 +155,10 @@ do
ifId=${ifIds[$index]} ifId=${ifIds[$index]}
# récupération du nom # récupération du nom
nom=${ifMonitor[$index]} nom=${ifMonitor[$index]}
# collecte de la description # collecte de la description et suppression des doubles quotes éventuelles
resDescription=$($snmpgetPath $getParams $oidIfDescriptions.$ifId) temp=$($snmpgetPath $getParams $oidIfDescriptions.$ifId)
temp="${temp%\"}"
resDescription="${temp#\"}"
# collecte de la vitesse # collecte de la vitesse
resSpeed=$($snmpgetPath $getParams $oidIfSpeeds.$ifId) resSpeed=$($snmpgetPath $getParams $oidIfSpeeds.$ifId)
# collecte des octets IN # collecte des octets IN
@ -153,11 +166,17 @@ do
# collecte des octets OUT # collecte des octets OUT
resOUT=$($snmpgetPath $getParams $oidIfBytesOUT.$ifId) resOUT=$($snmpgetPath $getParams $oidIfBytesOUT.$ifId)
echo $nom $resDescription $resSpeed $resIN $resOUT $(date +%s)>> $ficMes # écriture du résultat brut dans un fichier et taille du fichier à $nbLignes
tail -n $nbLignes $ficMes > tmp echo $nom $resDescription $resSpeed $resIN $resOUT $(date +%s)>> res.raw
cat tmp > $ficMes tail -n $nbLignes res.raw > tmp
cat tmp > res.raw
done done
# formatage du résultat JSON
# http://support.gnip.com/articles/data-and-rule-management-with-jq.html
jq '. | split("\n") | map( split(" ") | {ifname: .[0], description: .[1], speed: .[2], in: .[3], out: .[4], ts: .[5]} ) ' -R -s res.raw > $ficMes
# attente avant prochaine mesure
sleep $delay sleep $delay
done done

View File

@ -0,0 +1,130 @@
[
{
"ifname": "Gi1/0/1",
"description": "GigabitEthernet1/0/1",
"speed": "1000000000",
"in": "2067878572",
"out": "1222676877",
"ts": "1544798858"
},
{
"ifname": "Gi1/0/2",
"description": "GigabitEthernet1/0/2",
"speed": "1000000000",
"in": "3503039885",
"out": "2629740670",
"ts": "1544798858"
},
{
"ifname": "Gi1/0/22",
"description": "GigabitEthernet1/0/22",
"speed": "1000000000",
"in": "190148388",
"out": "1779481055",
"ts": "1544798858"
},
{
"ifname": "Gi1/0/1",
"description": "GigabitEthernet1/0/1",
"speed": "1000000000",
"in": "2068439056",
"out": "1223252707",
"ts": "1544798859"
},
{
"ifname": "Gi1/0/2",
"description": "GigabitEthernet1/0/2",
"speed": "1000000000",
"in": "3503118826",
"out": "2629820651",
"ts": "1544798859"
},
{
"ifname": "Gi1/0/22",
"description": "GigabitEthernet1/0/22",
"speed": "1000000000",
"in": "190811666",
"out": "1779647045",
"ts": "1544798859"
},
{
"ifname": "Gi1/0/1",
"description": "GigabitEthernet1/0/1",
"speed": "1000000000",
"in": "2068581445",
"out": "1223595489",
"ts": "1544798860"
},
{
"ifname": "Gi1/0/2",
"description": "GigabitEthernet1/0/2",
"speed": "1000000000",
"in": "3503251304",
"out": "2629921244",
"ts": "1544798860"
},
{
"ifname": "Gi1/0/22",
"description": "GigabitEthernet1/0/22",
"speed": "1000000000",
"in": "191509100",
"out": "1779780390",
"ts": "1544798860"
},
{
"ifname": "Gi1/0/1",
"description": "GigabitEthernet1/0/1",
"speed": "1000000000",
"in": "2068764940",
"out": "1223890938",
"ts": "1544798861"
},
{
"ifname": "Gi1/0/2",
"description": "GigabitEthernet1/0/2",
"speed": "1000000000",
"in": "3503381088",
"out": "2630045308",
"ts": "1544798861"
},
{
"ifname": "Gi1/0/22",
"description": "GigabitEthernet1/0/22",
"speed": "1000000000",
"in": "192447700",
"out": "1780077141",
"ts": "1544798861"
},
{
"ifname": "Gi1/0/1",
"description": "GigabitEthernet1/0/1",
"speed": "1000000000",
"in": "2068913083",
"out": "1224157082",
"ts": "1544798862"
},
{
"ifname": "Gi1/0/2",
"description": "GigabitEthernet1/0/2",
"speed": "1000000000",
"in": "3503459959",
"out": "2630139970",
"ts": "1544798862"
},
{
"ifname": "Gi1/0/22",
"description": "GigabitEthernet1/0/22",
"speed": "1000000000",
"in": "192913137",
"out": "1780181248",
"ts": "1544798862"
},
{
"ifname": null,
"description": null,
"speed": null,
"in": null,
"out": null,
"ts": null
}
]

45
log_bw.log Normal file
View File

@ -0,0 +1,45 @@
Gi1/0/1 monitorée : 2018-12-14 14:56:55
Gi1/0/2 monitorée : 2018-12-14 14:56:55
Gi1/0/22 monitorée : 2018-12-14 14:56:55
Gi1/0/1 monitorée : 2018-12-14 15:20:22
Gi1/0/2 monitorée : 2018-12-14 15:20:22
Gi1/0/22 monitorée : 2018-12-14 15:20:22
Gi1/0/1 monitorée : 2018-12-14 15:20:47
Gi1/0/2 monitorée : 2018-12-14 15:20:47
Gi1/0/22 monitorée : 2018-12-14 15:20:47
Gi1/0/1 monitorée : 2018-12-14 15:21:32
Gi1/0/2 monitorée : 2018-12-14 15:21:32
Gi1/0/22 monitorée : 2018-12-14 15:21:32
Gi1/0/1 monitorée : 2018-12-14 15:21:49
Gi1/0/2 monitorée : 2018-12-14 15:21:49
Gi1/0/22 monitorée : 2018-12-14 15:21:49
Gi1/0/1 monitorée : 2018-12-14 15:22:02
Gi1/0/2 monitorée : 2018-12-14 15:22:02
Gi1/0/22 monitorée : 2018-12-14 15:22:02
Gi1/0/1 monitorée : 2018-12-14 15:23:54
Gi1/0/2 monitorée : 2018-12-14 15:23:54
Gi1/0/22 monitorée : 2018-12-14 15:23:54
Gi1/0/1 monitorée : 2018-12-14 15:25:11
Gi1/0/2 monitorée : 2018-12-14 15:25:11
Gi1/0/22 monitorée : 2018-12-14 15:25:11
Gi1/0/1 monitorée : 2018-12-14 15:26:01
Gi1/0/2 monitorée : 2018-12-14 15:26:01
Gi1/0/22 monitorée : 2018-12-14 15:26:01
Gi1/0/1 monitorée : 2018-12-14 15:26:54
Gi1/0/2 monitorée : 2018-12-14 15:26:54
Gi1/0/22 monitorée : 2018-12-14 15:26:54
Gi1/0/1 monitorée : 2018-12-14 15:27:16
Gi1/0/2 monitorée : 2018-12-14 15:27:16
Gi1/0/22 monitorée : 2018-12-14 15:27:16
Gi1/0/1 monitorée : 2018-12-14 15:33:56
Gi1/0/2 monitorée : 2018-12-14 15:33:56
Gi1/0/22 monitorée : 2018-12-14 15:33:56
Gi1/0/1 monitorée : 2018-12-14 15:38:59
Gi1/0/2 monitorée : 2018-12-14 15:38:59
Gi1/0/22 monitorée : 2018-12-14 15:38:59
Gi1/0/1 monitorée : 2018-12-14 15:46:46
Gi1/0/2 monitorée : 2018-12-14 15:46:46
Gi1/0/22 monitorée : 2018-12-14 15:46:46
Gi1/0/1 monitorée : 2018-12-14 15:47:38
Gi1/0/2 monitorée : 2018-12-14 15:47:38
Gi1/0/22 monitorée : 2018-12-14 15:47:38