Aller au contenu

[TUTO] Monitorer sa Freebox Revolution


bruno78

Messages recommandés

Il s'agit ici de présenter un tuto pour monitorer sa Freebox, avec les outils telegraf / influxdb / grafana, en complément du [TUTO] Monitoring NAS et Réseau qui reste la référence.

 

En conséquence, je suppose déjà opérationnelle chez vous une chaine complète telegraf / influxdb / grafana pour la supervision de votre NAS
Il faudra bien entendu faire les adaptations spécifiques à votre environnement.

1034959895_dockertig1.PNG.031d35b98b65a28015551048d8766047.PNG

 

Principe : Le docker telegraf va utiliser un script python pour récupérer les infos de la Freebox.

Limites :

    je n'ai pu valider cette méthode que sur ma Freebox, et donc pour les autres modèles et/ou configuration ... ?

  •         Freebox Révolution au dernier Firmware (4.0.7) à ce jour.
  •         Accès réseau fibre ftth (et donc pas testé les compteurs xDSL)

Chaine existante (hypothèse) :

    je suppose donc que vous avez une chaine telegraf / influxdb / grafana opérationnelle pour votre NAS, en docker mode bridge.

Ajout Freebox :

    On va rajouter un second docker telegraf, qui portera le script Python. Ce docker telegraf dédié Freebox va transmettre ses données vers une seconde database que l'on va créer dans le docker Influx
    Sur grafana, on créera une nouvelle source de données (la nouvelle database d'influx) qui nous permettra d'afficher les données Freebox. Voir schéma de principe ci-dessous :
527946428_PresTutoFboxMonitoring.thumb.png.ffe0aae07ab50cadef80891167b0c582.png

Configuration des dockers existants :

    subnet: 172.20.0.0/29
    gateway: 172.20.0.1
    ip_range: 172.20.0.0/29
    Adressage existant
        grafana          d2:ca:ab:cd:00:02     172.20.0.2    
        influxdb         d2:ca:ab:cd:00:03     172.20.0.3
        nas_telegraf     d2:ca:ab:cd:00:04     172.20.0.4

Création du nouveau docker : fbx_telegraf

    Adressage sur le réseau bridge :        
         fbx_telegraf    d2:ca:ab:cd:00:05     172.20.0.5

Déclaration du service fbx_telegraf dans le docker-compose.yaml (extrait):

EDIT du 02/septembre 2020 : la dernière branche de developpement du docker telegraf, 1.15.x, semble poser problème avec Python. Il faut donc se limiter au max à la version 1.14.5. L'image à charger sera donc telegraf:1.14.5 au lieu de telegraf:latest

EDIT du 08/septembre 2020 : installation résolue pour python sur la branche telegraf 1.15.x (i.e. tag : latest). Voir détails plus bas.

services:
    fbx_telegraf:
        image: telegraf:latest
        container_name: fbx_telegraf
        hostname: fbx_telegraf

        mac_address: d2:ca:ab:cd:00:05
        networks:
           monitoring:
               ipv4_address: 172.20.0.5
        environment:
            - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin:/usr/local:/usr/src
            - TZ=CET
        mem_limit: 75M
        volumes:
            - "/volume1/docker/monitoring/fbx_telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro"
            # pour le fichier de commande python d'acces a la freebox,
            # pour le fichier de commande python,
            # pour le fichier get-pip.py (install module pip puis requests)
            - "/volume1/docker/monitoring/fbx_telegraf/py:/usr/local/py"  
            # pour le fichier log si on le met en place
            - "/volume1/docker/monitoring/fbx_telegraf/log:/usr/local/log"
        ports:
            - 9125:8125/udp
            - 9092:8092/udp
            - 9094:8094
        restart: unless-stopped

On notera la création et le mapping de 2 répertoires pour le docker fbx_telegraf:

  •     un répertoire pour le fichier Python et le fichier d'installation de l'utilitaire python "pip" : /usr/local/py
  •     un répertoire pour d’éventuels logs : /usr/local/log

Création et démarrage du docker fbx_telegraf:

    docker-compose pull fbx_telegraf
    docker-compose up -d fbx_telegraf

3402546_dockertigfbx1.PNG.500b35cfb8ec332ba7a5f953c403f5cd.PNG

 

488191898_dockertigfbx2.PNG.04eda4f49dc5c16f4961e7f45ca93674.PNG

Via un accès ssh sur le NAS : mise à jour du docker fbx_telegraf

    docker exec -it fbx_telegraf apt update
    docker exec -it fbx_telegraf apt upgrade
    docker exec -it fbx_telegraf apt install -y software-properties-common

Installation de python3 dans le docker telegraf

        docker exec -it fbx_telegraf wget https://bootstrap.pypa.io/get-pip.py
        docker exec -it fbx_telegraf python3 get-pip.py --prefix=/usr/local
        docker exec -it fbx_telegraf python3 -m pip install requests
        docker exec -it fbx_telegraf pip install unidecode

EDIT du 08/septembre 2020 : installation Python sur la branche telegraf:1.5.x (i.e. tag latest)

Au lieu des 7 commandes ci-dessus, on procèdera de la sorte :

        docker exec -it fbx_telegraf apt update
        docker exec -it fbx_telegraf apt upgrade
        docker exec -it fbx_telegraf dpkg --configure -a
        docker exec -it fbx_telegraf apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

        docker exec -it fbx_telegraf wget https://bootstrap.pypa.io/get-pip.py
        docker exec -it fbx_telegraf apt-get install python3-distutils
        docker exec -it fbx_telegraf python3 get-pip.py --prefix=/usr/local
        docker exec -it fbx_telegraf python3 -m pip install requests
        docker exec -it fbx_telegraf pip install unidecode

Il se peut que vous ayez une erreur du type :

E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem

Dans ce cas, .... suivre à la lettre la consigne et lancer donc la commande # dpkg --configure -a . Puis poursuivre normalement

Script Python :
    On place le script Python fbx_telegraf_059.py dans le répertoire /usr/local/py
    (ce script a été mis à jour pour mes propres besoins. N’hésitez pas à le reprendre, en particulier en fonction de l'API Freebox si il vous manque des éléments)

EDIT du 27/04/2021 : mise à jour du fichier python en version ed061.

 

 

Modification du fichier de configuration telegraf :


1) Dans la section "Input Plugin" :

        ###############################################################################
        #                            INPUT PLUGINS                                    #
        ###############################################################################
        
        ###############################################################################
        #                            INPUT PLUGINS FREEBOX                            #
        ###############################################################################
        
        # Read metrics from one or more commands that can output to stdout
        [[inputs.exec]]
          ## Commands array
          #
          commands = [
                         "python3 /usr/local/py/freebox_059.py -SPHDIWX"
          ]
        
          ## Timeout for each command to complete.
          timeout = "5s"
        
          ## Data format to consume.
          ## Each data format has it's own unique set of configuration options, read
          ## more about them here:
          ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
          # data_format = "graphite"
          data_format = "influx"

A noter : le script python "freebox_059.py" est lancé avec un certain nombre d'options, chacune correspondant à un groupe de données récupérées. Si on n'a pas besoin de toutes ces données, selon les besoins, il est tout à fait possible de supprimer les options que l'on ne souhaite pas grapher.

freebox_059.py -SPHDIWX

  • S : état du switch 4 ports
  • X : liste les hosts connectés
  • P : état des ports du switch
  • H : system status
  • D :  status disque interne
  • I : status des interfaces LAN
  • W : status du Wifi
  • 4 : status aggregation xdsl / 4g

2) modification de la base influxdb cible, section "Output Plugins" :

    On va envoyer nos données vers une base de données du nom de fbx_database, user fbx_databse, password fbx_database
    De plus, on va créer nous même cette database => skip_database_creation = true

        ###############################################################################
        #                            OUTPUT PLUGINS                                   #
        ###############################################################################
        
        
        # Configuration for sending metrics to InfluxDB
        [[outputs.influxdb]]
          ## The full HTTP or UDP URL for your InfluxDB instance.
          ##
          ## Multiple URLs can be specified for a single cluster, only ONE of the
          ## urls will be written to each interval.
          # urls = ["unix:///var/run/influxdb.sock"]
          # urls = ["udp://127.0.0.1:8089"]
        urls = ["http://influxdb:8086"]
        
          ## The target database for metrics; will be created as needed.
          ## For UDP url endpoint database needs to be configured on server side.
        database = "fbx_telegraf"
        
          ## The value of this tag will be used to determine the database.  If this
          ## tag is not set the 'database' option is used as the default.
        database_tag = ""
        
          ## If true, the database tag will not be added to the metric.
          # exclude_database_tag = false
        
          ## If true, no CREATE DATABASE queries will be sent.  Set to true when using
          ## Telegraf with a user without permissions to create databases or when the
          ## database already exists.
        skip_database_creation = true
        
          ## Name of existing retention policy to write to.  Empty string writes to
          ## the default retention policy.  Only takes effect when using HTTP.
        retention_policy = ""
        
          ## Write consistency (clusters only), can be: "any", "one", "quorum", "all".
          ## Only takes effect when using HTTP.
        write_consistency = "any"
        
          ## Timeout for HTTP messages.
        timeout = "30s"
        
          ## HTTP Basic Auth
        username = "fbx_telegraf"
        password = "fbx_telegraf"
        
          ## HTTP User-Agent
          # user_agent = "telegraf"

    On redémarre le docker fbx_telegraf pour prise en compte

Création de la database fbx_telegraf sur influxdb

    Se connecter en console sur le docker influxdb, puis créer la database :      

 root@influxdb:/# influx -username admin -password admin                                                                                        
            Connected to http://localhost:8086 version 1.7.9                                                                                               
            InfluxDB shell version: 1.7.9
            > show databases                                                                                                                               
            name: databases                                                                                                                                
            name                                                                                                                                           
            ----                                                                                                                                           
            _internal                                                                                                                                      
            nas_telegraf                                                                                                                                   
            > create database fbx_telegraf                                                                                                                 
            > use fbx_telegraf                                                                                                                             
            Using database fbx_telegraf                                                                                                                    
            > create user fbx_telegraf with password 'fbx_telegraf'                                                                                        
            > grant all on fbx_telegraf to fbx_telegraf                                                                                                    
            >
            > show databases                                                                                                                               
            name: databases                                                                                                                                
            name                                                                                                                                           
            ----                                                                                                                                           
            _internal                                                                                                                                      
            nas_telegraf                                                                                                                                   
            fbx_telegraf                                                                                                                                   
            > show users                                                                                                                                   
            user         admin                                                                                                                             
            ----         -----                                                                                                                             
            admin        true                                                                                                                              
            nas_telegraf false                                                                                                                             
            fbx_telegraf false                                                                                                                             
            >

    On redémarre le docker influxdb pour prise en compte.

Autorisation de l'application sur le Freebox.

    il faut autoriser l'application sur la Freebox. Pour cela se placer dans une console fbx_telegraf et aller dans le dossier /usr/local/py

 

            root@fbx_telegraf:/usr/local/py# python3 freebox_059.py -h  
            usage: freebox_050.py [-h] [-s] [-r] [-n app_name] [-i app_id]
                                  [-d device_name] [-f format] [-e endpoint] [-S] [-P]
                                  [-H] [-D] [-L] [-W] [-I] [-X]  
                                                                                                                                                                        
            optional arguments:  
              -h, --help            show this help message and exit
              -s, --register-status  
                                    Get register status
              -r, --register        Register app with Freebox API
              -n app_name, --appname app_name
                                    Register with app_name  
              -i app_id, --appid app_id   
                                    Register with app_id
              -d device_name, --devicename device_name  
                                    Register with device_name
              -f format, --format format  
                                    Specify output format between graphite and influxdb
              -e endpoint, --endpoint endpoint  
                                    Specify endpoint name or address  
              -S, --status-switch   Get and show switch status
              -P, --status-ports    Get and show switch ports stats
              -H, --status-sys      Get and show system status
              -D, --internal-disk-usage                  
                                    Get and show internal disk usage
              -L, --lan-config      Get and show LAN config
              -W, --wifi-usage      Get and show wifi usage
              -I, --lan-interfaces  Get and show lan interfaces
              -X, --interfaces-hosts     
                                    Get and show interfaces hosts

    On va demander d'enregistrer notre application sur la Freebox:

            root@fbx_telegraf:/usr/local/py# python3 freebox_059.py -r

            => il faut valider sur l'ecran LCD de la Freebox.
            => le nom de l'application codée dans le fichier fbx_telegraf_059.py est : grafanamonitor.
            => controler sur la Freebox que l'application a bien été acceptée :   Paramètres / Gestion des Accès / Applications

114941454_fbxgestionacces.PNG.f8d6142d121b0ee7bf497cc7c1eec0d3.PNG

            on peut aussi vérifier sur la console fbx_telegraf :

                root@fbx_telegraf:/usr/local/py# python3 freebox_059.py -s                                                                                                  
                  Status: auth already done    
                root@fbx_telegraf:/usr/local/py#
                root@fbx_telegraf:/usr/local/py# python3 freebox_059.py -r
                  Already registered, exiting        
                root@fbx_telegraf:/usr/local/py#

            Vous trouverez alors un fichiers .credentials dans le répertoire /usr/local/py .

    A partir de là, fbx_telegraf est en mesure de collecter les données sur la Freebox, et de les envoyer sur la base de données fbx_telegraf du docker influxdb.

            on peut contrôler à la main que les valeurs sont bien accessibles, par exemple :

root@fbx_telegraf:/usr/local/py# python3 freebox_059.py -H | grep System
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL sys_uptime_val=2787529
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL uptime="32 jours 6 heures 18 minutes 49 secondes"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL firmware_version="4.2.5"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL board_name="fbxgw2r"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL disk_status="active"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL user_main_storage="Disque dur"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL has_ext_telephony=True
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL has_speakers_jack=True
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL wifi_type="2d4_5g"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL pretty_name="Freebox Server (r2)"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL customer_hdd_slots=0
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL name="fbxgw-r2/full"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL has_speakers=True
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL internal_hdd_size=250
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL has_femtocell_exp=True
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL has_internal_hdd=True
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL has_dect=True
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Fan,tag3=NULL id="fan0_speed"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Fan,tag3=NULL name="Ventilateur 1"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Fan,tag3=NULL value=2436
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_hdd id="temp_hdd"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_hdd name="Disque dur"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_hdd value=36
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_sw id="temp_sw"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_sw name="Temperature Switch"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_sw value=48
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_cpum id="temp_cpum"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_cpum name="Temperature CPU M"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_cpum value=58
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_cpub id="temp_cpub"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_cpub name="Temperature CPU B"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=Sensor,tag3=temp_cpub value=53
root@fbx_telegraf:/usr/local/py#

    Dans la console du docker influxdb, on verifie que l'on recoit bien les données de nas_telegraf et fbx_telegraf

1631812142_consoleinfluxdb.JPG.5f2a30ed06ac1b1a0f29eaa2e48d9111.JPG

Grafana :

        sur grafana, definir une nouvelle source de données :

            Name : InfluxDB-1 Freebox   (example)
            URL : http://@NAS:8086        (comme pour le nas_telegraf,car c'est le même docker influxdb)
            Access : serveur
            Basic auth : yes
            Basic auth details :
                user : fbx_telegraf
                password : fbx_telegraf
            Database : fbx_telegraf
            User : fbx_telegraf
            password : fbx_telegraf
            http method : GET

            On valide (SAVE & TEST) et ce doit être OK.

    Il ne reste plus qu'à créer le ou les Dashboard souhaités !
    => Ne pas oublier de préciser l'origine des données : InfluxDB-1 Freebox

    Pour ma part, j'ai réalisé:

  •         un Dashboard général (trafic, CPU, status des ports du switch, températures ....)
  •         un Dashboard listant les stations actives (globales et Wifi)        

1279323612_fboxgrafana.thumb.PNG.4f8ad21e4ccfa9f4f162ed0517ab353e.PNG

1182319941_stationsfbx.PNG.86c92d74ea4268554b520d44e6c29319.PNG


 

Resterait à faire :

  • l'API de la Freebox est accessible ici en http. Je n'ai pas réussi par manque de connaissances à passer en https
  • je n'ai pas regardé du tout le cas d'un accès xDSL ....          
  • le script python s'appuie sur l'API V8 de la Freebox, et est donc compatible avec les Freebox Revolution  et POP. La description de cet API peut se trouver ici : https://dev.freebox.fr/sdk/os/#
  • Enfin, tous les paramètres disponibles n'ont pas forcement été implémentés dans le script. Mais les principaux sont là. SI il y avait un besoin particulier, faites le moi savoir.

      

 

 

Freebox-1585840825569.json Liste stations FreeBox-1585840845020.json freebox_054.py freebox_058.py

Modifié par bruno78
edition 061 du script
Lien vers le commentaire
Partager sur d’autres sites

 re 🙂
Je viens de me lancer sur ton tuto.
Je ne passe pas par docker mais je ne suis pas certain que le problème que je rencontre aie quelque chose avoir avec les dockers.
Je suis donc sous Ubuntu 18.04 LTS.
J'ai du créer un dossier py dans /user/local car il n'existait pas.
J'ai installé python3 avec la commande  : sudo apt-get install python3
Puis j'ai lancé l' éxecution du fichier python  :sudo python3 get-pip.py --prefix=/usr/local
L'erreur que je rencontre est : 

sudo python3 get-pip.py --prefix=/usr/local
Traceback (most recent call last):
  File "get-pip.py", line 22711, in <module>
    main()
  File "get-pip.py", line 198, in main
    bootstrap(tmpdir=tmpdir)
  File "get-pip.py", line 82, in bootstrap
    from pip._internal.cli.main import main as pip_entry_point
  File "/tmp/tmpxqqhkzt4/pip.zip/pip/_internal/cli/main.py", line 10, in <module>
  File "/tmp/tmpxqqhkzt4/pip.zip/pip/_internal/cli/autocompletion.py", line 9, in <module>
  File "/tmp/tmpxqqhkzt4/pip.zip/pip/_internal/cli/main_parser.py", line 7, in <module>
  File "/tmp/tmpxqqhkzt4/pip.zip/pip/_internal/cli/cmdoptions.py", line 19, in <module>
ModuleNotFoundError: No module named 'distutils.util'

Je n'y connais rien du tout en python 😞
Pourriez-vous me donner un coup de main?

Merci
 

 

 

Modifié par kestouf
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Merci pour ce tuto, j'ai bien suivi la procédure mais j'ai une erreur au moment de l'enregistrement de l'appli sur la Fbx :

root@telegraf_fbx:/usr/local/py# python3 freebox_050.py -r                                                                                                                                             
Doing registration                                                                                                                                                                                     
Traceback (most recent call last):                                                                                                                                                                     
  File "freebox_050.py", line 784, in <module>                                                                                                                                                         
    do_register(auth)                                                                                                                                                                                  
  File "freebox_050.py", line 670, in do_register                                                                                                                                                      
    write_auth(register_infos['result'])                                                                                                                                                               
  File "freebox_050.py", line 642, in write_auth                                                                                                                                                       
    f.write(authFile)                                                                                                                                                                                  
  File "/usr/lib/python3.5/configparser.py", line 916, in write                                                                                                                                        
    self._sections[section].items(), d)                                                                                                                                                                
  File "/usr/lib/python3.5/configparser.py", line 920, in _write_section                                                                                                                               
    fp.write("[{}]\n".format(section_name))                                                                                                                                                            
TypeError: a bytes-like object is required, not 'str'

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

@kestouf, je ne "connais" Python que depuis que je me suis intéressé au sujet du monitoring de le Freebox ! Le docker telegraf est basé sur une Debian 9. Je n'ai pas regardé les autres cas. Pour installer Python sur Ubuntu, je suppose qu'il y a une manière spécifique .... Je n'ai pas d'autre choix que de te proposer notre moteur de recherche préféré. Cela semble largement documenté. Par exemple https://linuxize.com/post/how-to-install-pip-on-ubuntu-18.04/

Mais je n'ai pas essayé cette configuration.

@eirock67

bonjour,

il sera apprécié de passer par la case présentation afin de mieux te connaitre, et ainsi mieux connaitre ta configuration, ce qui nous aidera à mieux répondre.

Là c'est un peu compliqué de répondre sans savoir quelle est ta configuration, et les actions que tu as menées précédemment à ce message d'erreur. Ceci dit, en reprenant mes notes, j'avais eu des soucis sur cette partie. Ma Freebox n'étant pas opérationnelle pour le moment, je ne vais pas trop pouvoir regarder ni tester. En plus, c'est une manip que je n'ai fait qu'une fois. Une fois la Freebox enregistrée, on passe à autre chose et on ne se soucie plus trop de cet aspect. C'est un point qu'il faut sécuriser, si il y a un problème, tu ne seras pas le seul à tomber dessus.

Une piste néanmoins pour le moment : ligne 641 du fichier freebox_050.py : remplace open(cfg_file, "ab") par open(cfg_file, "a")  "a" était la valeur initiale du script lorsque je l'ai repris. Pour le faire marcher , j'ai dû mettre "ab" ...

 

Lien vers le commentaire
Partager sur d’autres sites

Pour info, j'ai rajouté dans le TUTO :

  • le script Python ed 051 : corrections pour les accès xDSL (ajout de tags, pour ceux qui ont été voir dans le python lui même). /!\ je n'ai pas pu le tester /!\
  • 2 fichiers .json pour exemple qui correspondent aux graphes grafana que je montre.
Lien vers le commentaire
Partager sur d’autres sites

 Re bonjour

Je suis navré de revenir vers vous, mais je rencontre un problème avec soit avec le scripte freebox_05X.py soit avec telegraf.

Quand le lance le  telegraf je rencontre une erreur :

telegraf  --config /etc/telegraf/telegraf.conf
2020-04-19T10:52:46Z I! Starting Telegraf 1.14.1
2020-04-19T10:52:46Z I! Loaded inputs: cpu exec
2020-04-19T10:52:46Z I! Loaded aggregators:
2020-04-19T10:52:46Z I! Loaded processors:
2020-04-19T10:52:46Z I! Loaded outputs: influxdb
2020-04-19T10:52:46Z I! Tags enabled: host=odroid
2020-04-19T10:52:46Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"odroid", Flush Interval:10s
2020-04-19T10:52:53Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...
2020-04-19T10:53:01Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...
2020-04-19T10:53:11Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...
2020-04-19T10:53:21Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...
2020-04-19T10:53:31Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...
2020-04-19T10:53:42Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...
2020-04-19T10:53:51Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...
2020-04-19T10:54:01Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...
2020-04-19T10:54:11Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...
2020-04-19T10:54:21Z E! [inputs.exec] Error in plugin: exec: exit status 1 for command 'python3 /usr/local/py/freebox_050.py -SPHDIWX': Traceback (most recent call last):...

Quand je lance le scripte manuellement :

python3 /usr/local/py/freebox_050.py -SPHDIWX

Traceback (most recent call last):

  File "/usr/local/py/freebox_050.py", line 788, in <module>

    get_and_print_metrics(auth, args.status_switch, args.status_ports, args.status_sys, args.disk_usage, args.lan_config, args.wifi_usage, args.lan_interfaces, args.interfaces_hosts)

  File "/usr/local/py/freebox_050.py", line 502, in get_and_print_metrics

    l=len(sys_json_raw['result'])

KeyError: 'result'

 

Mais quand je lance le test que tu donne dans ton tuto, le script récupère bien les infos :
 

python3 freebox_050.py -H | grep System
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL sys_fan_rpm=2036
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL sys_temp_sw=52
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL sys_uptime_val=1094728
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL uptime="12 jours 16 heures 5 minutes 28 secondes"
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL sys_temp_cpub=72
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL sys_temp_cpum=62
freebox,endpoint=mafreebox.freebox.fr,tag1=System,tag2=NULL,tag3=NULL firmware_version="4.0.7"

Aurais tu une idée?

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

que se passe t'il si tu lances la commande suivante depuis la console python3 freebox_050.py -W  ??

Et par curiosité, as-tu le Wifi configuré sur la box ?

Modifié par bruno78
Lien vers le commentaire
Partager sur d’autres sites

Le 19/04/2020 à 16:00, bruno78 a dit :

Bonjour,

que se passe t'il si tu lances la commande suivante depuis la console python3 freebox_050.py -W  ??

Et par curiosité, as-tu le Wifi configuré sur la box ?

Bonjour,
Je viens d'essayer et j'ai le même message d'erreur:
 

root@odroid:/usr/local/py# python3 freebox_050.py -W
Traceback (most recent call last):
  File "freebox_050.py", line 788, in <module>
    get_and_print_metrics(auth, args.status_switch, args.status_ports, args.status_sys, args.disk_usage, args.lan_config, args.wifi_usage, args.lan_interfaces, args.interfaces_hosts)
  File "freebox_050.py", line 502, in get_and_print_metrics
    l=len(sys_json_raw['result'])
KeyError: 'result'

Mon Wifi est désactivé car j'utilise un point d’accès plus évolué.

Merci pour ton aide.
 

Modifié par kestouf
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

dans ce cas, dans le fichier telegraf.conf,  il faut supprimer l'appel aux information Wifi. Il faudrait simplement rajouter dans le script python un test préalable de présence du Wifi.

Sinon, la solution immédiate, c'est de supprimer le -W dans les options de lancement du script python, càd :

  • remplacer
commands = [
                         "python3 /usr/local/py/freebox_050.py -SPHDIWX"
          ]
  • par
commands = [
                         "python3 /usr/local/py/freebox_050.py -SPHDIX"
          ]
Lien vers le commentaire
Partager sur d’autres sites

 

Bonjour
Effectivement en retirant le W cela marche mieux, mais j'ai une nouvelle erreur avec telegraf. Je pense que cela a un lien direct avec le fait que je sois en VDSL:

[inputs.exec] Error in plugin: metric parse error: expected tag at 10:44: "freebox,endpoint=mafreebox.freebox.fr,tag1=,tag2=,tag3= dsl_modulation=\"vdsl (vdsl2_17a)\""

Le vdsl2_17a est se qui est affiché sur l’affichage de ma freebox dans protocole (je crois)

Aurais tu une idée?

Merci

Modifié par kestouf
Lien vers le commentaire
Partager sur d’autres sites

Bonjour @kestouf,

je vais regarder cela dans la journée. Cela fait partie des points que je n'ai pas pu tester, et que j'ai modifiés le plus récemment. Je n'ai pas de VDSL, et pour le moment le DD de ma Fbox est cramé, donc il se peut que je te demande, si tu veux bien, de tester lorsque j'aurai une correction à proposer (dans la journée j'espère).

Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, bruno78 a dit :

Bonjour @kestouf,

je vais regarder cela dans la journée. Cela fait partie des points que je n'ai pas pu tester, et que j'ai modifiés le plus récemment. Je n'ai pas de VDSL, et pour le moment le DD de ma Fbox est cramé, donc il se peut que je te demande, si tu veux bien, de tester lorsque j'aurai une correction à proposer (dans la journée j'espère).

Bonjour @bruno78
Afin de faciliter tes tests, je peux te faire un accès ssh sur un rasp vierge pour que tu puisse tester ton script python sur une freebox en VDSL.

Lien vers le commentaire
Partager sur d’autres sites

@kestouf,

effectivement il y avait une erreur (un oubli).

Remplacer

if 'result' in json_raw:
            my_data['xdsl_modulation'] = json_raw['result']['status']['modulation'] + " ("+json_raw['result']['status']['protocol']+")"  # in seconds


par

if 'result' in json_raw:
            my_data[tag1+"."+tag2+"."+tag3+"."+'xdsl_modulation'] = json_raw['result']['status']['modulation'] + " ("+json_raw['result']['status']['protocol']+")"  # in seconds

freebox_052_draft.py

Ça devrait être meilleur !

Lien vers le commentaire
Partager sur d’autres sites

 

@bruno78  : Merci beaucoup Bruno. Çà marche ! Les données sont bien récupéré.
Maintenant il faut que j'adapte des valeur qui ne me corresponde pas, le 
Thresholds par exemple ou faut que je regarde commande ca marche le systeme de couleur.

A la différence de ta solution,  j'ai un seul agent telegraf qui récupère les infos de mon ODROID XQ4 (influxdb+telegraf+grafa), de mon  DS918+ et de ma Freebox. 

Merci encore
A bientôt !
 

Modifié par kestouf
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je suis tombé par hasard sur ce tuto, et je trouve l'interface graphique de monitoring de la freebox génial!! 🙂

Je n'ai pas de NAS, je n'ai qu'une tour de disques branchée sur mon mac Mini. J'ai une Freebox Mini 4K et la ftth.

Dans le tuto tu mentionnes qu'il faut une chaine existante de telegraf/innodb/grafana. Puisque je n'ai pas de NAS je ne peux suivre le tuto pour installer cette chaine. Je suis un peu perdu sur comment installer dans un contexte hors NAS, pour le monitoring freebox exclusivement. J'ai de l'expérience avec docker, boulot oblige, et énormément d'expérience Linux, de même que réseau, alors pas un soucis de compréhension technique...  a priori ça devrait être plus simple.

Si jamais tu avais des conseils, même rapides, ce serait bien apprécié!

Merci!

Modifié par pagecp
Lien vers le commentaire
Partager sur d’autres sites

Bonjour @bruno78

J'ai suivi le tuto de @.Shad. sans trop de difficulté et j'avais décidé de m'arrêter là.

Mais finalement j'y ai pris goût et, laissant l'optimisation du Dashboard obtenu pour plus tard, je me suis décidé à tenter ton tuto pour ma freebox,

Je pensais bien qu'il était de difficulté supérieure et je ne suis pas déçu. Dès la première commande sur putty ça plante 😟

Je te pose quelques questions si tu veux bien répondre :

1/Mon réseau créé dans docker s'appelle data_export et son IP est 172.18.0.0/10. Je suppose que je dois remplacer 172.20.0.0 par 172.18.0.0  et  monitoring par data_export (dans les captures d'écran du tuto le réseau s'appelle control_monitoring ???). 

La première fois cela a fonctionné mais à la commande suivante il manquait la création des répertoires log et py. Je les ai créé mais c'est à partir de là que la déroute a commencé.

J'ai tenté de repartir du début et j'ai supprimé les répertoires log et py créés manuellement. Est-ce qu'il pourrait y avoir autre chose à supprimer/corriger ?

2/ J'ai alors essayé, sans succès, plusieurs adaptations de l'extrait de fichier yaml que tu donnes pour le docker-compose pour créer le conteneur fbx_telegraf.
Voilà la réponse :
 Service "fbx_telegraf" uses an undefined network "data_export". Si je garde monitoring j'ai la même réponse avec "monitoring".

3/Tu parles d'extrait de fichier pour créer le docker-compose. Faut-il le compléter par autre chose ?

Peux-tu me donner quelques conseils ?

 

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Jeff777,

je me rends compte que le tuto n'est pas forcement hyper clair. Je vais regarder tes questions dans la journée. (là je taffe, c'est un peu compliqué de se concentrer 🙂 ). Si je comprends bien, ton soucis tourne principalement autour de l'utilisation du docker-compose.yaml ?

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ta réponse. Y'a pas urgence...je suis retraité.

Oui c'est la création du conteneur fbx_telegraf avec le docker-compose qui me pose problème. Mais en relisant les tutos, de Shad et le tien,  je viens de trouver quelque chose que j'avais bien fait lors de mon premier essai et que j'avais omis par la suite.

Comme quoi l'informatique c'est comme la musique il faut avoir suivi la partition plusieurs fois avant de pouvoir s'en passer.

Je continue et te tiens au courant.

Bon courage à ceux qui bossent

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

OK.

Juste une remarque en passant : ne prends pas un réseau en /10 (172.18.0.0/10), c'est beaucoup trop large ! Un /10 te donne plus de 4.000.000 d'adresses IP possibles dans ton réseau.  En /29 te donne 6 adresses utilisables pour les hosts sur ce sous réseau. Ca doit suffire ici dans notre example.

Lien vers le commentaire
Partager sur d’autres sites

Hello @Jeff777

  • peux-tu stp me montrer quel est ton docker-compose pour nas_telegraf/grafana/influxdb (donc fonctionnel avant de rajouter le docker fbx_telegraf)? ce sera plus facile pour voir comment rajouter la partie fbx_telegraf.
  • les dossiers ./py et ./log sont à créer avant de lancer le docker-compose (sinon il va planter en disant que le répertoire est inexistant)
    • le dossier ./py va contenir
      • le script Python freebox_050.py (ou fichier plus récent; J'en suis à la version 052 DRAFT pour corriger le pb avec le xDSL, et le pb lorsque le Wifi est disable. Je mettrai le 052 en ligne une fois sûr qu'il soit bon)
      • le fichier .credentials créé suit à l'association avec la Freebox. Ce fichier peut être sauvegardé ailleurs puis remis dans ce dossier si on repart de zéro, ca évitera de refaire l'association entre notre docker telegraf et la Freebox.
    • le dossier ./log va contenir .... les logs si on s'en sert.

 

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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.