Aller au contenu

hpsmartyz2

Membres
  • Compteur de contenus

    20
  • Inscription

  • Dernière visite

Messages posté(e)s par hpsmartyz2

  1. Le 12/03/2022 à 16:53, hpsmartyz2 a dit :

    La mémoire disponible de la box diminue, c'est peut-être pas bon signe 🤨

    c'est bon c'est remonté.

    Voilà un plot de la qualité du signal d'un homepod connecté à mon répéteur.

    image.png.6defb14100f627931ad8efee66a1c8a1.png

    les données manquantes à la fin c'est simplement car j'ai réalisé que le lien box-switch était à 100Mb plutôt que les 1000Mb attendus et j'ai fait qques manips avec le switch, en vain.

    Pour la force du signal c'est juste la couleur qui compte (car elle est exprimée en dbm <0 normalement et je fais donc '+ 100' pour la ploter, mais donc c'est le delta à 100 qui s'affiche), le snr quant à lui reflète la valeur extraite.

    Si cela intéresse certains je peux partager les templates cacti qui servent à tout ça.

  2. Bonjour,

    bonne question. j'extraie l'info d'ici:

    OBJECT NAME: 'sysbus.DeviceInfo.MemoryStatus'  (name: MemoryStatus)
    parameter:  Total                : uint32     = '490944'
    parameter:  Free                 : uint32     = '184368'

    et je plote Free (en ayant pris l'hypothèse qu'il fallait multiplier par 1024.

    D'où viennent vos chiffres ? Merci.


     

     

  3. Bon, vu que je suis pas super doué en ash ça m'a pris un peu de temps, ainsi que farfouiller dans les recoins de la Livebox 5.
    Pour ceux que cela intéresse voilà mon script.
    Il extrait

    • les stats de trafic des interfaces wifi, lan, wan de la box
    • les stats de trafic des interfaces wifi du répéteur
    • la puissance du signal et le rapport signal sur bruit de chacun des terminaux connectés (à la box ou au répéteur)
    • la mémoire vive disponible sur la box

    je ne récupère que les port 1 (eth0) et 4 (eth3) du lan, mais ça se généralise aux deux autres très simplement.

    Je compléterai ce script au fur et à mesure avec d'autres paramètres.

    Pour l'instant je n'ai pas encore trouvé comment extraire les stats des terminaux filaires. Plus précisément j'ai trouvé un moyen (récupérer les flow stats) mais qui n'est pas le plus évident qui soit et donc il faut que j'y travaille encore.

    Le script inscrit les paramètres dans un fichier texte selon un format donné mais ce n'est pas la partie intéressante. Ce qui est susceptible de vous intéresser c'est l'ensemble des fonctions appelées.

     

    #!/bin/sh
    
    # credits to https://blog.tetsumaki.net/ for LB connection/authentication method
    
    lbDataDir=/var/services/web/cacti/scripts/livebox
    
    if [ -f $lbDataDir/lock ]; then
    	echo "lock file should not exist"
    else
    	touch $lbDataDir/lock
    	
    	myLivebox="ip-de-la-box"
    	myExtender="ip-du-repeteur"
    	passwd="mot-de-passe-de-la-box/du-repeteur"
    	
    	lbOutput=$lbDataDir/lbOutput.txt
    	lbCookies=$lbDataDir/lbCookies.txt
    	extOutput=$lbDataDir/extOutput.txt
    	extCookies=$lbDataDir/extCookies.txt
    	
    	rm $lbDataDir/livebox-infos.txt
    	touch $lbDataDir/livebox-infos.txt
    
    	#***********************************#
    	#              LIVEBOX              #
    	#***********************************#
    	#connect to livebox
    	curl -s -o "$lbOutput" -X POST -c "$lbCookies" -H 'Content-Type: application/x-sah-ws-4-call+json' -H 'Authorization: X-Sah-Login' -d "{\"service\":\"sah.Device.Information\",\"method\":\"createContext\",\"parameters\":{\"applicationName\":\"so_sdkut\",\"username\":\"admin\",\"password\":\"$passwd\"}}" http://$myLivebox/ws > /dev/null
    	lbContextID=$(tail -n1 "$lbOutput" | sed 's/{"status":0,"data":{"contextID":"//1'| sed 's/",//1' | sed 's/"groups":"http,admin//1' | sed 's/"}}//1')
    	
    	#Get traffic stats of interfaces
    	intfList="veip0 eth0 eth3 wl0 eth4"
    	prefix="NeMo.Intf."
    	for intf in $intfList; do
    		srv="${prefix}${intf}"
    		output=$(curl -s -b "$lbCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $lbContextID" -d "{\"service\":\"$srv\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws)
    		verif=$(echo "$output" | cut -d":" -f2 | cut -d"," -f1)
    		if [ "$verif" = "null" ]; then
    			echo "interface ${intf} does not exist or could not be retreived"
    		else
    			rx=$(echo "$output" | awk -F'RxBytes' '{print $2}' | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    			tx=$(echo "$output" | awk -F'TxBytes' '{print $2}' | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    			echo "lb_$intf>rx:$rx,tx:$tx" >> $lbDataDir/livebox-infos.txt
    		fi
    	done
    	
    	#Get traffic and signal stats of wireless terminals. Only Active Associated Devices are considered.
    	prefix="NeMo.Intf."
    	intfList="wl0 eth4"
    	for intf in $intfList; do
    		srv="${prefix}${intf}"
    		output=$(curl -s -b "$lbCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $lbContextID" -d "{\"service\":\"$srv\",\"method\":\"getStationStats\",\"parameters\":{}}" http://$myLivebox/ws)
    		verif=$(echo "$output" | cut -d":" -f2 | cut -d"," -f1)
    		if [ "$verif" = "null" ]; then
    			echo "error retreiving ${srv}:getStationStats"
    		else
    			n=1
    			nAD=$(echo "$output" | awk -F'MACAddress' '{print NF-1}')
    			while [ $n -le $nAD ]; do
    				isActive=$(echo "$output" | awk -F'Active' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    				mac=$(echo "$output" | awk -F'"MACAddress":' "{print \$$((n+1))}" | awk -F\, '{print $1}' | awk -F\" '{print $2}')
    				if [ "$isActive" = "true" ]; then
    					rx=$(echo "$output" | awk -F'RxBytes' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    					tx=$(echo "$output" | awk -F'TxBytes' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    					sst=$(echo "$output" | awk -F'"SignalStrength":' "{print \$$((n+1))}" | awk -F\, '{print $1}')
    					snr=$(echo "$output" | awk -F'SignalNoiseRatio' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    
    					sst=$((sst + 100))
    					if [ $sst -gt 70 ]; then
    						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:10,r7:20,r8:$((sst - 70)),snr:$snr"
    					elif [ $sst -gt 50 ]; then
    						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:10,r7:$((sst - 50)),r8:0,snr:$snr"
    					elif [ $sst -gt 40 ]; then
    						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:$((sst - 40)),r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 33 ]; then
    						sig="r1:10,r2:10,r3:10,r4:3,r5:$((sst - 33)),r6:0,r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 30 ]; then
    						sig="r1:10,r2:10,r3:10,r4:$((sst - 30)),r5:0,r6:0,r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 20 ]; then
    						sig="r1:10,r2:10,r3:$((sst - 20)),r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 10 ]; then
    						sig="r1:10,r2:$((sst - 10)),r3:0,r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 0 ]; then
    						sig="r1:$sst,r2:0,r3:0,r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
    					fi
    					echo "lb_$mac>rx:$rx,tx:$tx,$sig" >> $lbDataDir/livebox-infos.txt
    				else
    					echo "device ${mac} is Associated but inactive. It might be connected to an extender or could become out of range soon"
    				fi
    				n=$((n + 1))
    			done
    		fi
    	done
    
    	output=$(curl -s -b "$lbCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $lbContextID" -d "{\"service\":\"DeviceInfo.MemoryStatus\",\"method\":\"get\",\"parameters\":{}}" http://$myLivebox/ws)
    	verif=$(echo "$output" | cut -d"{" -f2 | cut -d":" -f2)
    	if [ "$verif" = "null" ]; then
    		echo "error retreiving DeviceInfo.MemoryStatus"
    	else
    		mf=$(echo "$output" | awk -F'Free' '{print $2}'| awk -F\: '{print $2}' | awk -F\, '{print $1}' | awk -F\} '{print $1}')
    		echo "$myLivebox>MemFree:$mf" >> $lbDataDir/livebox-infos.txt
    	fi
    	
    	#disconnect from livebox
    	curl -s -b "$lbCookies" -X POST http://$myLivebox/logout
    	rm "$lbCookies" "$lbOutput"
    	
    	
    	#***********************************#
    	#             REPETEUR              #
    	#***********************************#
    	#connect to extender
    	curl -s -o "$extOutput" -X POST -c "$extCookies" -H 'Content-Type: application/x-sah-ws-4-call+json' -H 'Authorization: X-Sah-Login' -d "{\"service\":\"sah.Device.Information\",\"method\":\"createContext\",\"parameters\":{\"applicationName\":\"so_sdkut\",\"username\":\"admin\",\"password\":\"$passwd\"}}" http://$myExtender/ws > /dev/null
    	extContextID=$(tail -n1 "$extOutput" | sed 's/{"status":0,"data":{"contextID":"//1'| sed 's/",//1' | sed 's/"groups":"http,admin//1' | sed 's/"}}//1')
    
    	#Get traffic stats of interfaces
    	intfList="wl0 vap5g0priv"
    	prefix="NeMo.Intf."
    	for intf in $intfList; do
    		srv="${prefix}${intf}"
    		output=$(curl -s -b "$extCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $extContextID" -d "{\"service\":\"$srv\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myExtender/ws)
    		verif=$(echo "$output" | cut -d":" -f2 | cut -d"," -f1)
    		if [ "$verif" = "null" ]; then
    			echo "interface ${intf} does not exist or could not be retreived"
    		else
    			rx=$(echo "$output" | awk -F'RxBytes' '{print $2}' | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    			tx=$(echo "$output" | awk -F'TxBytes' '{print $2}' | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    			#adding prefix to differenciate intf name between box and extender (only usefull for wl0)
    			echo "ext_$intf>rx:$rx,tx:$tx" >> $lbDataDir/livebox-infos.txt
    		fi
    	done
    
    	prefix="NeMo.Intf."
    	intfList="wl0 vap5g0priv"
    	for intf in $intfList; do
    		srv="${prefix}${intf}"
    		output=$(curl -s -b "$extCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $extContextID" -d "{\"service\":\"$srv\",\"method\":\"getStationStats\",\"parameters\":{}}" http://$myExtender/ws)
    		verif=$(echo "$output" | cut -d":" -f2 | cut -d"," -f1)
    		if [ "$verif" = "null" ]; then
    			echo "error retreiving ${srv}:getStationStats"
    		else
    			n=1
    			nAD=$(echo "$output" | awk -F'MACAddress' '{print NF-1}')
    			while [ $n -le $nAD ]; do
    				isActive=$(echo "$output" | awk -F'Active' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    				mac=$(echo "$output" | awk -F'"MACAddress":' "{print \$$((n+1))}" | awk -F\, '{print $1}' | awk -F\" '{print $2}')
    				if [ "$isActive" = "true" ]; then
    					rx=$(echo "$output" | awk -F'RxBytes' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    					tx=$(echo "$output" | awk -F'TxBytes' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    					sst=$(echo "$output" | awk -F'"SignalStrength":' "{print \$$((n+1))}" | awk -F\, '{print $1}')
    					snr=$(echo "$output" | awk -F'SignalNoiseRatio' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
    
    					sst=$((sst + 100))
    					if [ $sst -gt 70 ]; then
    						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:10,r7:20,r8:$((sst - 70)),snr:$snr"
    					elif [ $sst -gt 50 ]; then
    						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:10,r7:$((sst - 50)),r8:0,snr:$snr"
    					elif [ $sst -gt 40 ]; then
    						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:$((sst - 40)),r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 33 ]; then
    						sig="r1:10,r2:10,r3:10,r4:3,r5:$((sst - 33)),r6:0,r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 30 ]; then
    						sig="r1:10,r2:10,r3:10,r4:$((sst - 30)),r5:0,r6:0,r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 20 ]; then
    						sig="r1:10,r2:10,r3:$((sst - 20)),r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 10 ]; then
    						sig="r1:10,r2:$((sst - 10)),r3:0,r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
    					elif [ $sst -gt 0 ]; then
    						sig="r1:$sst,r2:0,r3:0,r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
    					fi
    					#adding prefix to differenciate terminal mac between box and extender
    					#traffic and signal data are specific to connection point
    					echo "ext_$mac>rx:$rx,tx:$tx,$sig" >> $lbDataDir/livebox-infos.txt
    				else
    					echo "device ${mac} is Associated but inactive. It might be connected to an extender or could become out of range soon"
    				fi
    				n=$((n + 1))
    			done
    		fi
    	done
    	
    	#disconnect from extender
    	curl -s -b "$extCookies" -X POST http://$myExtender/logout
    	rm "$extCookies" "$extOutput"
    	
    	rm $lbDataDir/lock
    fi

     

  4. le problème n'est pas tant le numéro de l'instance ni leur nombre mais plutôt de remarquer que sur la box4 l'interface Wifi 5GHz s'appelle eth6 alors qu'elle s'appelle eth4 sur la LB5. Néanmoins, dans les deux cas l'objet Interface reste le même donc le modèle générique est identique, au moins à ce sujet.

    ca ne sert pas à grand chose de récupérer les stats trop fréquemment. Sur des routeurs de coeur de réseau qui traitent des tera en transit le minimum théorique est de l'ordre de 10s et le cas le plus fréquent pratique c'est 1 à 5 min pour des stats de débit. ca dépend bien sûr de l'utilisation mais la surveillance du traffic n'est pas faite pour détecter des évènements nécessitant une réponse rapide, inutile donc d'avoir l'info très fréquemment et la LB n'est pas un routeur de coeur.

    avec mon script actuel et sa liaison à cacti je fais je lance le script autant de fois que j'ai de graphs et chaque appel au script génère une authentification et extrait le/les paramètre(s) necessaire(s) pour le graph ayant généré la requête.

    chaque graph est mis à jour toutes les 5 minutes.

    donc si je me retrouve avec +70 graphs ca va faire un burst de 70 requêtes auth+extraction toutes les 5 min

    pour optimiser un peu je vais faire 1 requête d'authentification + extraction des 70 paramètres toutes les 5min, tout stocker dans une base et faire cacti interroger cette base, indépendamment.

     

     

  5. Bonjour

    ah! je n'avais pas compris que tu étais sous LB4.

    l'instance du modèle doit être différente, mais pas le modèle en soit. Les commandes pour accès aux stats que j'ai postées hier soir je les ai trouvées dans le data model, tu dois pouvoir faire de même avec celui de ta lb.

    Je serais étonné qu'Orange ait des modèles par box. c'est ingérable. donc le modèle doit être unique et s'instancie de différentes manières dépendant de la box. Dans le cas des interfaces plus haut, ce sont des instances de l'objet générique interface et c'est donc normal que je n'aie rien relatif à l'A/V-DSL.

    je crois néanmoins que le nom de certaines interfaces pourrait avoir changé entre LB4 et LB5

    Ultimement tu passes des commandes curl avec les noms de fonctions récupérées dans le dm ou via chrome et tu vois ce que ça rend.

    Il y a 1 heure, oracle7 a dit :

    oui je serai curieux de voir.

    je suis en train de retravailler complètement le script car j'ai pas mal de devices. Tu m'as fait un peu peur et je ne voudrais pas qu'un burst d'une cinquantaine de requêtes simultanées pour récupérer la qualité du signal, les stats des devices et le traffic des interfaces plus qques autres trucs ne pourrissent ma box donc je vais tout faire en un appel et ferai Cacti traiter le résultat de manière indépendante. 

  6. @oracle7

    j'ai trouvé beaucoup mieux pour récupérer le traffic des interfaces:

    curl -s -o "$myBashDir/hl.txt" -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"HomeLan.Interface.wl0.Stats\",\"method\":\"get\",\"parameters\":{}}" http://$myLivebox/ws

    et changer le service par les noms suivants, selon l'interface voulue:

    instance 1: 'sysbus.HomeLan.Interface.wl0' (name: 1)
        parameter:  FriendlyName         : string     = '2.4GHz-Private_SSID'
        parameter:  Name                 : string     = 'wl0'
        parameter:  Alias                : string     = 'WiFi'
        parameter:  NumberOfStoredMeasures : uint32     = '2968'
    instance 2: 'sysbus.HomeLan.Interface.eth4' (name: 2)
        parameter:  FriendlyName         : string     = '5GHz-Private_SSID'
        parameter:  Name                 : string     = 'eth4'
        parameter:  Alias                : string     = 'WiFi'
        parameter:  NumberOfStoredMeasures : uint32     = '2968'
    instance 3: 'sysbus.HomeLan.Interface.eth0' (name: 3)
        parameter:  FriendlyName         : string     = 'eth1'
        parameter:  Name                 : string     = 'eth0'
        parameter:  Alias                : string     = 'Eth'
        parameter:  NumberOfStoredMeasures : uint32     = '2967'
    instance 4: 'sysbus.HomeLan.Interface.eth1' (name: 4)
        parameter:  FriendlyName         : string     = 'eth2'
        parameter:  Name                 : string     = 'eth1'
        parameter:  Alias                : string     = 'Eth'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 5: 'sysbus.HomeLan.Interface.eth2' (name: 5)
        parameter:  FriendlyName         : string     = 'eth3'
        parameter:  Name                 : string     = 'eth2'
        parameter:  Alias                : string     = 'Eth'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 6: 'sysbus.HomeLan.Interface.eth3' (name: 6)
        parameter:  FriendlyName         : string     = 'eth4'
        parameter:  Name                 : string     = 'eth3'
        parameter:  Alias                : string     = 'Eth'
        parameter:  NumberOfStoredMeasures : uint32     = '2968'
    instance 7: 'sysbus.HomeLan.Interface.eth3_wan' (name: 7)
        parameter:  FriendlyName         : string     = 'WAN_Ethernet'
        parameter:  Name                 : string     = 'eth3'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '2968'
    instance 8: 'sysbus.HomeLan.Interface.vlan_data' (name: 8)
        parameter:  FriendlyName         : string     = 'WAN_Ethernet-Internet'
        parameter:  Name                 : string     = 'vlan_data'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 9: 'sysbus.HomeLan.Interface.vlan_multi' (name: 9)
        parameter:  FriendlyName         : string     = 'WAN_Ethernet-MultiServices'
        parameter:  Name                 : string     = 'vlan_multi'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 10: 'sysbus.HomeLan.Interface.vlan_voip' (name: 10)
        parameter:  FriendlyName         : string     = 'WAN_Ethernet-VoIP'
        parameter:  Name                 : string     = 'vlan_voip'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 11: 'sysbus.HomeLan.Interface.vlan_iptv1' (name: 11)
        parameter:  FriendlyName         : string     = 'WAN_Ethernet-IPTV_VOD'
        parameter:  Name                 : string     = 'vlan_iptv1'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 12: 'sysbus.HomeLan.Interface.vlan_iptv2' (name: 12)
        parameter:  FriendlyName         : string     = 'WAN_Ethernet-IPTV_Live'
        parameter:  Name                 : string     = 'vlan_iptv2'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 13: 'sysbus.HomeLan.Interface.veip0' (name: 13)
        parameter:  FriendlyName         : string     = 'WAN_GPON'
        parameter:  Name                 : string     = 'veip0'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '2968'
    instance 14: 'sysbus.HomeLan.Interface.gvlan_data' (name: 14)
        parameter:  FriendlyName         : string     = 'WAN_GPON-Internet'
        parameter:  Name                 : string     = 'gvlan_data'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 15: 'sysbus.HomeLan.Interface.gvlan_multi' (name: 15)
        parameter:  FriendlyName         : string     = 'WAN_GPON-MultiServices'
        parameter:  Name                 : string     = 'gvlan_multi'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '2966'
    instance 16: 'sysbus.HomeLan.Interface.gvlan_voip' (name: 16)
        parameter:  FriendlyName         : string     = 'WAN_GPON-VoIP'
        parameter:  Name                 : string     = 'gvlan_voip'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 17: 'sysbus.HomeLan.Interface.gvlan_iptv1' (name: 17)
        parameter:  FriendlyName         : string     = 'WAN_GPON-IPTV_VOD'
        parameter:  Name                 : string     = 'gvlan_iptv1'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 18: 'sysbus.HomeLan.Interface.gvlan_iptv2' (name: 18)
        parameter:  FriendlyName         : string     = 'WAN_GPON-IPTV_Live'
        parameter:  Name                 : string     = 'gvlan_iptv2'
        parameter:  Alias                : string     = 'WAN_Virtual'
        parameter:  NumberOfStoredMeasures : uint32     = '2959'
    instance 19: 'sysbus.HomeLan.Interface.wlguest2' (name: 19)
        parameter:  FriendlyName         : string     = '2.4GHz-Guest_SSID'
        parameter:  Name                 : string     = 'wlguest2'
        parameter:  Alias                : string     = 'WiFi'
        parameter:  NumberOfStoredMeasures : uint32     = '0'
    instance 20: 'sysbus.HomeLan.Interface.wlguest5' (name: 20)
        parameter:  FriendlyName         : string     = '5GHz-Guest_SSID'
        parameter:  Name                 : string     = 'wlguest5'
        parameter:  Alias                : string     = 'WiFi'
        parameter:  NumberOfStoredMeasures : uint32     = '0'


     

    pour récupérer les stats du wan:

    curl -s -o "$myBashDir/hl.txt" -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"HomeLan\",\"method\":\"getWANCounters\",\"parameters\":{}}" http://$myLivebox/ws

  7. une commande pour récupérer l'état de la mémoire de la box:

    curl -s -o "$myBashDir/device.txt" -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"DeviceInfo.MemoryStatus\",\"method\":\"get\",\"parameters\":{}}" http://$myLivebox/ws
     

  8. je poste des requêtes que j'avais collectées au cas où certains y trouvent leur bonheur:

    Je n'ai cependant pas réussi à déterminer comment passer les paramètres dans les commandes curl ...

    {service: "DeviceInfo", method: "get", parameters: {}}
    {service: "NMC", method: "get", parameters: {}}
    {service: "UserInterface", method: "getLanguage", parameters: {}}
    {service: "UserInterface", method: "getState", parameters: {}}
    {service: "UserManagement", method: "getUser", parameters: {name: "admin"}}
    {service: "HTTPService", method: "getCurrentUser", parameters: {}}
    {service: "Manifests", method: "retrieve", parameters: {user: "admin", option: "wm_settings"}}
    {service: "IoTService", method: "getStatus", parameters: {}}
    {service: "NMC", method: "getWANStatus", parameters: {}}
    {service: "NMC.OrangeTV", method: "getIPTVStatus", parameters: {}}
    {service: "VoiceService.VoiceApplication", method: "listTrunks", parameters: {}}
    {service: "NMC", method: "getVoIPConfig", parameters: {}}
    {service: "NMC.Wifi", method: "get", parameters: {}}
    {service: "VoiceService.VoiceApplication", method: "getCallList", parameters: [{line: "1"}]}
    {service: "VoiceService.VoiceApplication", method: "listGroups", parameters: {}}
    {service: "NMC", method: "get", parameters: {}}
    {service: "NMC.OrangeTV", method: "getIPTVConfig", parameters: {}}
    {service: "Scheduler", method: "getCompleteSchedules", parameters: {type: "WLAN"}}
    {service: "Time", method: "getTime", parameters: {type: "WLAN"}}
    {service: "Devices", method: "get", parameters: {expression: "voice handset physical"}}
    {service: "NeMo.Intf.guest", method: "getMIBs", parameters: {mibs: "wlanvap"}}
    {service: "NeMo.Intf.lan", method: "getMIBs", parameters: {mibs: "base wlanradio"}}
    {service: "NeMo.Intf.data", method: "getMIBs", parameters: {mibs: "dhcp"}}
    {service: "NMC", method: "getLANIP", parameters: {}}
    {service: "DHCPv4.Server", method: "getDHCPServerPool", parameters: {id: "default"}}
    {service: "Scheduler", method: "getCompleteSchedules", parameters: {type: "ToD"}}
    {service: "DHCPv4.Server.Pool.default", method: "getStaticLeases", parameters: "default"}
    {service: "Devices", method: "get", parameters: {expression: ".Active==true"}}
    {service: "DHCPv4.Server.Pool.default", method: "getStaticLeases", parameters: "default"}
    {service: "TopologyDiagnostics", method: "buildTopology", parameters: {SendXmlFile: false}}
    

     

    ah bah si, je viens de trouver 😀

    pour passer 

    {service: "NeMo.Intf.wl0", method: "getMIBs", parameters: {mibs: "wlanvap"}}

    il faut écrire:

     

    {\"service\":\"NeMo.Intf.wl0\",\"method\":\"getMIBs\",\"parameters\":{\"mibs\": \"wlanvap\"}}

    dans la commande curl

  9. oui, ce sont des graphs Cacti, après tout on est dans le thread à ce sujet.

    les requêtes sont faites toutes les 5min.

    le code que je t'ai donné place les valeurs dans des variables, c'est indépendant de Cacti. A toi de voir comment tu utilises ces variables pour finalement injecter la valeur dans ton infrastructure de monitoring.

    pour ce qui est de sysbus, j'ai lu la doc, pas d'inquiétude 😉

    En fait je ne tirerai pas plus de l'uml ou de la topo que du modèle en texte que j'ai déjà. le problème est que le modèle ne donne pas les nom des fonctions intéressantes à appeler. J'esperais que tu puisses les avoir.

    La meilleure méthode, à ma connaissance, reste donc d'observer les requêtes dans un navigateur, même si c'est assez limité.

    Dans le jours prochains je tenterai de sortir les stats de traffic par device. je te posterai la requête

    attention, pour la requête de la qualité du wifi il faut créer une variable 'dev' qui contient:

    Devices.Devices.12:34:56:78:90:AB

    où '12:34:56:78:90:AB' est l'adresse MAC du Device en question

    dernière note il est possible de récupérer dans la même mib les stats de traffic et de qualité de signal:

    NeMo.Intf.eth4 / getMIBs

     

    NeMo.Intf.wl0 / getMIBs
  10. Il y a 1 heure, oracle7 a dit :

    @hpsmartyz2

    Bonjour,

    Le datamodel ne s'extrait pas dans sa globalité. il faut faire des requêtes ciblées. Je te laisse lire mon TUTO, tout est expliqué dans le préambule d'introduction et les liens sont fournis pour l'usage du script sysbus.py qui te permettra d'analyser le datamodel de la Livebox. Tu en sortiras les vues qui t’intéresse. Inspires-toi aussi des requêtes que j'ai faites dans le shell script du TUTO. Rien de bien compliqué, tout est commenté.

    Cordialement

    oracle7😉

    soit dit en passant, sauf erreur, le data model peut s'extraire dans sa globalité. ce que je cherchais c'était la version uml qui me semble plus exploitable, ainsi que le graph des interfaces.

  11. je fais ici.

    la base vient des scripts que l'on trouve sur le web (notamment ici) et les commandes spécifiques sont dérivées d'une analyse des requêtes faites lors de la navigation sur l'interface web et inspectées via les outils "développeur" intégrés dans chrome.
     

    myLivebox=#ip-de-la-box
    myPassword=#mdp-de-la-box
    
    myBashDir=#un-chemin-sur-le-syno
    
    myOutput=$myBashDir/myOutput.txt
    myCookies=$myBashDir/myCookies.txt
    
    curl -s -o "$myOutput" -X POST -c "$myCookies" -H 'Content-Type: application/x-sah-ws-4-call+json' -H 'Authorization: X-Sah-Login' -d "{\"service\":\"sah.Device.Information\",\"method\":\"createContext\",\"parameters\":{\"applicationName\":\"so_sdkut\",\"username\":\"admin\",\"password\":\"$myPassword\"}}" http://$myLivebox/ws > /dev/null
    
    myContextID=$(tail -n1 "$myOutput" | sed 's/{"status":0,"data":{"contextID":"//1'| sed 's/",//1' | sed 's/"groups":"http,admin//1' | sed 's/"}}//1')
    
    #traffic wifi
    #2.4GHz + 5GHz
    WifiStats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NMC.Wifi\",\"method\":\"getStats\",\"parameters\":{}}" http://$myLivebox/ws`
    WifiStatsRxBytes=`echo $WifiStats | cut -d"{" -f3 | cut -d"," -f1 | cut -d":" -f2`
    WifiStatsTxBytes=`echo $WifiStats | cut -d":" -f5 | cut -d"}" -f1`
    
    #2.4GHz
    wl0Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.wl0\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
    Wifi2StatsRxBytes=`echo $wl0Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
    Wifi2StatsTxBytes=`echo $wl0Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`
    
    #5GHz
    eth4Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth4\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
    Wifi5StatsRxBytes=`echo $eth4Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
    Wifi5StatsTxBytes=`echo $eth4Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`
    
    #port eth 1
    eth0Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth0\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
    Lan0StatsRxBytes=`echo $eth0Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
    Lan0StatsTxBytes=`echo $eth0Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`
    
    #port eth 2
    eth1Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth1\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
    Lan1StatsRxBytes=`echo $eth1Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
    Lan1StatsTxBytes=`echo $eth1Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`
    
    #port eth 3
    eth2Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth2\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
    Lan2StatsRxBytes=`echo $eth2Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
    Lan2StatsTxBytes=`echo $eth2Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`
    
    #port eth 4
    eth3Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth3\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
    Lan3StatsRxBytes=`echo $eth3Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
    Lan3StatsTxBytes=`echo $eth3Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`
    
    #Wan
    veip0Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.veip0\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
    WanStatsRxBytes=`echo $veip0Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
    WanStatsTxBytes=`echo $veip0Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`
    
    #Signal Strength per Device
    #dev de la forme: "Devices.Device.mac-adddress"
    devInfo=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"$dev\",\"method\":\"get\",\"parameters\":{}}" http://$myLivebox/ws`
    searchstring="SignalStrength"
    rest=${devInfo#*$searchstring}
    pos=$(( ${#devInfo} - ${#rest} - ${#searchstring} ))
    sub=${devInfo:$pos:44}
    
    signalStrength=`echo $sub | cut -d"," -f1 | cut -d":" -f2`
    snr=`echo $sub | cut -d"," -f2 | cut -d":" -f2`

    on peut aussi récupérer les stats de traffic par device via la "MIB" lan mais elle est assez lourde donc je cherche un autre moyen. Manifestement il y a un event listener qui se trimbale dans le code et qui push les stats de traffic de chacun des devices mais je n'ai pas réussit à me brancher dessus. si quelqu'un sait, je suis preneur

  12. @.Shad.

    oui, rrd permet ça nativement avec un COUNTER (là c'est du GAUGE, mais un peut modifié).
    Les compteurs de la livebox sont cumulatifs (et se reset à 2^32), mais en fait je calcule moi-même le delta entre deux valeurs successives et c'est ça que j'affiche. Avoir la notion de volume n'est pas inutile. Je ferai sûrement à terme les mêmes graphs en bytes/s par la suite.
    Dans tous les cas même si c'était exprimé en débit ca ne changerait rien au profil et à la quantité de données échangées.
    Je vais faire qquess test pour comprendre d'où viennent ces valeurs.

    il y a 55 minutes, oracle7 a dit :

    @hpsmartyz2

    Bonjour,

    Au passage, sacré déterrage de sujet vieux de plus de 14 ans !🤣

    Comme toi je fais du monitoring d'informations de ma Livebox (voir mon TUTO) et je suis intéressé par ton script car je constate que tu arrives à récupérer des informations dynamiques pour afficher de belles courbes de suivi. De mon coté, ce qui était possible avec une connexion ADSL ne l'est plus avec la Fibre. Plus moyen de suivre par exemple les flux entrants/sortants Rx/Tx.

    Aussi je serai bien volontiers preneur d'explications sur le processus que tu utilises pour obtenir ces infos dynamiques car je n'en ai pas trouvé dans le datamodel de la Livebox, non pas qu'elles existent pas mais les tables correspondantes ne sont pas accessibles via des requêtes externes (du moins celles que j'utilise avec sysbus) . D'où ma forte curiosité sur ta méthode.

    En attendant ta réponse.

    Cordialement

    oracle7😉

    @oracle7

    bonjour.

    oui sacré déterrage mais étant le posteur originel je me suis permis.

    Sacré boulot ton tuto!

    Je peux te donner les commandes (curl) sans soucis, mais suis pas sûr de comprendre ce que tu entends par dynamique.

  13. ca m'a couté qques apprentissages en shell, mais voilà la mesure du signal wifi du pc depuis lequel je rédige ce message. l'axe des ordonnées n'est que pour le snr car la puissance wifi se mesure en dbm < 0. j'ai pas trouvé mieux comme representation que de faire 100 - cette valeur et de le ploter ainsi donc ce sont les couleurs qui parlent.

    image.png.d479c09d50ac0d8feb6e4d26f2160164.png

    par contre je me demande si il n'y a pas un problème avec les stats de l'ONT:

    image.png.b7545ad38a9d4c853d4572d9b6ffe9d9.png

    c'est pas très parlant car ce n'est pas en bytes/s mais en bytes (en fait en bytes/5min) mais quand même à ce rythme là je suis en train de me faire siphonner tous mon réseau ! Les stats des interfaces internes sont presque plates. Donc, ou je les mesure mal et je suis vraiment en train de me faire aspirer tout, ou bien le compteur de l'ONT est en vrac, ou bien les valeurs sont en bits et non bytes (malgré les variables qui s'appellent RxBytes et TxBytes).

    si des personnes sont intéressées je peux partager le script pour la livebox 5.

     

  14. Quand je vois les tutos sur le monitoring qu'il est possible de mettre en place sur les versions plus récentes des NAS, je me dis que ce thread ne doit plus intéresser grand monde 😑

    Pas grave 😀

    Comme je suis passé sur une Livebox5 j'ai commencé à mettre en place les scripts adaptés. Voilà les premiers graphs des interfaces (wifi = 2.4+5, 2.4GHZ, 5GHz et les deux ports phy 0 et 3).

    Prochaine étape: sortir les stats (traffic et qualité signal) par device.
    Par la suite je regarderai ce que je peux extraire du pont Philipps Hue.

    wifi.jpg

    eth.jpg

  15.  

    14 ans depuis le premier message, pfiou ...
    Entre temps j'ai oublié mon mot de passe et ne sais même plus quelle adresse j'utilisais.
    Bon, j'ai redémarré un vieux DS107 et j'ai tenté d'y réinstaller cacti ...

    Long story short: cacti est à la version 1.2.19 et DSM 3.1-1639 (qui est le dernier DSM supporté sur une telle machine) ne permet d'installer que cacti 0.8.8h. Inutile de vous raconter mes déboires dans les détails. Pour faire court, la doc de cacti n'a pas été maintenue à jour et les "requirements" étaient donc trompeurs. A partir de la 1.0.0 il faut rrdtool >=1.3 et ipkg n'offre que 1.2.

    On peut quand même faire tourner cacti sur un tel système et je vous partage ici l'info même si je pense que ça ne servira pas à beaucoup de monde.

    Je pars d'un système vierge.

    DS107> cat /proc/version
    Linux version 2.4.22-uc0 (root@build1) (gcc version 3.3.4) #1639 Thu Sep 4 10:58:23 CST 2014
    DS107> busybox
    BusyBox v1.16.1 (2014-09-04 11:03:48 CST) multi-call binary.
    DS107> /usr/syno/apache/bin/httpd -v
    Server version: Apache/2.2.16 (Unix)
    DS107> php -v
    PHP 5.3.3 (cli) (built: Sep  4 2014 11:11:01)
    DS107> perl -v
    
    This is perl, v5.8.6 built for POWERPC
    DS107> /usr/syno/mysql/libexec/mysqld -V
    /usr/syno/mysql/libexec/mysqld  Ver 5.1.49 for unknown-linux-gnu on powerpc (Source distribution)

    Installation des programmes necessaires

    Avant toute chose il faut ipkg:

    DS107> cd /volume1/public/
    DS107> wget http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ds101-bootstrap_1.0-4_powerpc.xsh
    DS107> sh ds101-bootstrap_1.0-4_powerpc.xsh

    Une tentative de mise à jour des packages (ipkg update) risque de générer des erreurs, pour contrer cela, il faut instaler manuellement deux packages:

    DS107> wget http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/libidn_1.25-1_powerpc.ipk
    DS107> /opt/bin/ipkg install libidn_1.25-1_powerpc.ipk
    
    DS107> wget http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.12-2_powerpc.ipk
    DS107> /opt/bin/ipkg install wget-ssl_1.12-2_powerpc.ipk

    puis mettre à jour ipkg et installer les deux packages necessaires à Cacti qui ne sont pas sur le syno:

    DS107> ipkg update
    DS107> ipkg install rrdtool
    DS107> ipkg install net-snmp

    Petite note en passant, l'installation d'ipkg modifie le $PATH, en y rajoutant des sous-chemins de /opt.
    Personnellement je préfère mettre ce rajout à la fin plutôt qu'au début afin que le syno cherche préférentiellement dans son arborescence plutôt que dans /opt

    DS107> vi /etc/profile
    Citation

    PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin:/opt/sbin"

    Apache et PHP

    La configuration du serveur Apache (/usr/syno/apache/conf/httpd.conf-user) par défaut est la bonne.
    Il faut démarrer le serveur Apache dans l'interface d'administration du Syno et régler quelques paramètres de PHP.
    Notamment:
    - désactiver safe_mode_exec_dir
    - personnaliser open_basedir en y ajoutant "/opt/bin:/opt/share/rrdtool/fonts". Attention, ne pas oublier d'utiliser le séparateur ":" au début ou à la fin de cette chaine dépendant d'où vous l'inserez.
    - activer les extensions mysql et sockets. Il peut être necessaire aussi d'activer gd, ldap, pdo-mysql, mysqli, openssl, zlib. Ces extensions se sont avérées necessaires lors de ma tentative d'installation de Cacti 1.1.38 et je ne les ai pas désactivées lors de l'installation de Cacti 0.8.8h. Je ne sais donc pas dire si elles sont indispensables. Je ne sais pas non plus dire si certaines d'entre elles sont activées par défaut.

     Création d'un utilisateur et d'un groupe associés à Cacti

    Cette étape n'est pas requise, strictement. J'ai néanmoins créé un tel utilisateur pour cantonner le plus possible les choses. Si vous décidez de ne pas créer un tel utilisateur il faudra adapter les droits sur la base de donnée (voir plus loin) en fonction de vos choix.

    Via l'interface d'administration créer un groupe (à définir, ci-dessous référencé par nom-du-groupe-cacti) puis un utilisateur (à définir, ci-dessous référencé par nom-du-user-cacti) associés à Cacti. Définir cet utilisateur comme membre de ce groupe. Inutile de donner un quelconque droit à cet utilisateur sur les dossiers partagés ni sur les applications. Il faut ensuite affiner la création de ce nouveau compte.
    Note: je ne suis pas sûr de l'utilité absolue des actions décrites ci-après. 

    Pour cela il faut tout d'abord récupérer le numéro de groupe de nom-du-groupe-cacti

    DS107> more /etc/group | grep nom-du-groupe-cacti

    On obtient une ligne ayant le format suivant:

    Citation

    nom-du-groupe-cacti:x:numero-du-groupe:nom-du-user-cacti

    Ensuite, on va, d'un seul coup:
    * modifier le groupe par défaut de l'utilisateur 
    nom-du-user-cacti . Le groupe par défaut de nom-du-user-cacti est 100 (users), on va le changer en numero-du-groupe
    * modifier le home de l'utilisateur nom-du-user-cacti . Le home par défaut est /var/services/homes/nom-du-user-cacti, on va le changer en /var/services/web/cacti
    Pour ces deux points, il faut modifier le fichier /etc/passwd

    DS107> vi /etc/passwd

     et changer la ligne suivante:

    Citation

    nom-du-user-cacti:x:numero-utilisateur:100::/var/services/homes/nom-du-user-cacti:/sbin/nologin

    en:

    Citation

    nom-du-user-cacti:x:numero-utilisateur:numero-du-groupe::/var/services/web/cacti:/sbin/nologin

    Installation de Cacti

    Téléchargez le tar et placez le par exemple dans /volume1/public/
    https://files.cacti.net/cacti/linux/cacti-0.8.8h.tar.gz

    Exécutez les commandes suivantes pour installer Cacti et paramétrer les droits sur certains répertoires.

    DS107> cd /volume1/public/
    DS107> tar -zxvf cacti-0.8.8h.tar.gz
    DS107> mv cacti-0.8.8h cacti/
    DS107> mv cacti /var/services/web/
    DS107> cd /var/services/web
    DS107> chown root:root -R cacti
    DS107> chmod 755 cacti
    DS107> cd cacti
    DS107> find . -type f -exec chmod 644 '{}' \;
    DS107> find . -type d -exec chmod 755 '{}' \;
    DS107> chown -R nom-du-user-cacti:nom-du-groupe-cacti /var/services/web/cacti/rra /var/services/web/cacti/log
    DS107> chmod 666 /var/services/web/cacti/log/cacti.log

    Cette dernière commande permet une gestion (et notamment l'effacement) du fichier de log de Cacti, depuis l'interface de contrôle. Autrement l'utilisateur 'nobody' sous lequel tourne le serveur Apache ne dispose pas des droits pour effacer le fichier.

    MySQL

    Vérifiez que votre Syno a un nom d'hote défini:

    DS107> more /etc/hosts

    devrait indiquer un truc du genre:

    Citation

    127.0.0.1       localhost
    a.b.c.d         nom-hote

    Si ce n'est pas le cas rajoutez la seconde ligne avec le nom d'hote de votre choix et son IP à la place de a.b.c.d.

    Vérifiez l'existence du nom d'hote dans mysql:

    DS107> cd /usr/syno/mysql/bin
    DS107> ./mysql -u root
    mysql> SELECT Host, User FROM mysql.user;
    mysql> exit

    Recherchez une ligne qui contient root dans la colonne User et quelque chose d'autre que localhost dans la colonne Host.

    Si ce n'est pas déjà fait, définissez un mot de passe pour root dans mysql (en changeant password ci dessous):

    DS107> cd /usr/syno/mysql/bin
    DS107> ./mysql -u root
    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password');
    mysql> SET PASSWORD FOR 'root'@'nom-hote' = PASSWORD('password');
    mysql> FLUSH PRIVILEGES;
    mysql> exit

    Créez une base de données, importez-y les tables de Cacti, définissez les privilèges:
    Remplacez nom-de-la-base, nom-du-user-cacti, nom-hote, et mot-de-passe, par ce que vous aurez choisi pour votre installation. J'ai utilisé le même mot de passe dans la base que celui associé au compte nom-du-user-cacti.

    DS107> cd /usr/syno/mysql/bin
    DS107> ./mysqladmin --user=root -p create nom-de-la-base-cacti
    DS107> cd /usr/syno/mysql/bin
    DS107> ./mysql -u root -p nom-de-la-base < /var/services/web/cacti/cacti.sql
    DS107> ./mysql -u root -p
    mysql> GRANT ALL PRIVILEGES ON nom-de-la-base.* TO 'nom-du-user-cacti'@'localhost' IDENTIFIED BY 'mot-de-passe';
    mysql> GRANT ALL PRIVILEGES ON nom-de-la-base.* TO 'nom-du-user-cacti'@'nom-hote' IDENTIFIED BY 'mot-de-passe';
    mysql> GRANT ALL PRIVILEGES ON nom-de-la-base.* TO 'root'@'localhost';
    mysql> GRANT ALL PRIVILEGES ON nom-de-la-base.* TO 'root'@'nom-hote';
    mysql> FLUSH PRIVILEGES;
    mysql> exit

    Configuration de Cacti avant lancement 

    Editez le fichier de configuration de Cacti

    DS107> vi /var/services/web/cacti/include/config.php

    Il contient par défaut ces lignes:

    Citation

    $database_default = "cacti";
    $database_hostname = "localhost";
    $database_username = "cactiuser";
    $database_password = "cactiuser";

    Adaptez les en fonction de votre installation. Vous devriez pouvoir laisser localhost, mais il est possible de le remplacer par nom-hote.

    Editez le fichier d'installation pour indiquer à Cacti où aller cercher certains binaires (ceux installés avec ipkg).

    DS107> vi /var/services/web/cacti/install/index.php

    Trouvez la variable suivante:

    Citation

    $search_paths  = array("/bin", "/sbin", "/usr/bin", "/usr/sbin", "/usr/local/bin",  "/usr/local/sbin");

    et modifiez là en:

    Citation

    $search_paths = array("/opt/bin", "/bin", "/sbin", "/usr/bin", "/usr/sbin", "/usr/local/bin",  "/usr/local/sbin");

    Certains scripts de base sont sujets à poser quelques problèmes (php -q et grep -w ne seraient potentiellement pas supportés), il est donc conseillé de les éditer:

    DS107> cd /var/services/web/cacti/resource/script_queries
    DS107> cp host_cpu.xml host_cpu.xml.bck
    DS107> vi host_cpu.xml

    modifiez la ligne:

    Citation

    <script_path>|path_php_binary| -q |path_cacti|/scripts/query_host_cpu.php</script_path>

    en:

    Citation

    <script_path>|path_php_binary| |path_cacti|/scripts/query_host_cpu.php</script_path>

     

    DS107> cd /var/services/web/cacti/scripts
    DS107> cp linux_memory.pl linux_memory.pl.bck
    DS107> vi linux_memory.pl

    modifiez la ligne:

    Citation

    open(PROCESS, "cat /proc/meminfo | grep -w $ARGV[0] |");

    en:

    Citation

    open(PROCESS, "cat /proc/meminfo | grep $ARGV[0] |");

     

    Il y a aussi un script qui utilise l'option (ax) pas supportée sur BusyBox et le filtrage n'est pas non plus le bon :

    DS107> cd /var/services/web/cacti/scripts
    DS107> cp unix_processes.pl unix_processes.pl.bck
    DS107> vi unix_processes.pl

    modifier la ligne:

    Citation

    ps ax | grep -c :

    en:

    Citation

    ps | grep -c -e [a-z]

     

    Suite à cela, un test du poller ne devrait pas planter:

    DS107> /usr/bin/php /var/services/web/cacti/poller.php

    Pour finir, il faut que le poller tourne toutes les 5 minutes.

    DS107> cd /usr/syno/etc.defaults/rc.d
    DS107> ./S04crond.sh stop
    DS107> vi /etc/crontab

    rajoutez la ligne:

    Citation

    */5    *    *    *    *    root    /usr/bin/php /var/services/web/cacti/poller.php > /dev/null 2>&1

    redemarrez cron:

    DS107> ./S04crond.sh start

     

    C'est fini. Lancez un navigateur, allez à http://ip-du-syno/cacti/, suivez les étapes (pour se connecter la première fois il faut utiliser admin/admin, normalement).

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.