Aller au contenu

Messages recommandés

Posté(e) (modifié)

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.jsonRecherche des informations
 Liste stations FreeBox-1585840845020.jsonRecherche des informations
 freebox_054.pyRecherche des informations
 freebox_058.pyRecherche des informations


Modifié par bruno78
edition 061 du script
Posté(e)

You're welcome !

Je suis ouvert aux remarques / commentaires ...  sur le fonds bien sĂ»r, mais Ă©galement sur la forme, c'est mon premier !

Posté(e) (modifié)

 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
Posté(e)

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'

Posté(e)

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" ...

 

Posté(e)

@bruno78

Oops, j'ai complĂštement zappĂ©, prĂ©sentation faite đŸ˜Š

J'ai ma Freebox Revolution en mode Bridge avec derriĂšre un routeur Asus RT-AC88U, aprĂšs avoir modifiĂ© la ligne 641 ca fonctionne ! 

Merci Ă  toi.

Posté(e)

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.
Posté(e)

 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

Posté(e) (modifié)

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
Posté(e) (modifié)
  Le 4/19/2020 Ă  2:00 PM, 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 ?

DĂ©velopper  

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
Posté(e)

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"
          ]
Posté(e) (modifié)

 

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
Posté(e)

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).

Posté(e)
  Le 4/22/2020 Ă  7:33 AM, 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).

DĂ©velopper  

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.

Posté(e)

@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.pyRecherche des informations


Ça devrait ĂȘtre meilleur !

Posté(e) (modifié)

 

@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
Posté(e) (modifié)

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
Posté(e)

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 ?

 

 

Posté(e)

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 ?

Posté(e)

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

 

 

 

Posté(e)

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.

Posté(e)

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.

 

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.