Auteur Sujet: Infpyng: Un outil pour remplacer SmokePing  (Lu 18475 fois)

0 Membres et 1 Invité sur ce sujet

oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #12 le: 26 mai 2020 à 14:02:14 »
Bonjour kgersen,

Merci pour ton retour, j'en prend bien note.
Infpyng est encore en phase de test d'où l'absence de release, dès que j'obtiendrais une version satisfaisante je ferais une release :)

N'étant pas forcément à l'aise avec toutes les mécaniques de Git, j'essaie de m'en sortir comme je peux ^^ à l'occasion pourrais-je te solliciter si besoin, stp ?

Il faut que je me renseigne comment faire un binaire du projet pour le rendre portable et facilement installable.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #13 le: 26 mai 2020 à 14:06:55 »
oui n’hésite pas a nous solliciter.


oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #14 le: 26 mai 2020 à 16:22:58 »
Suite aux indications de kgersen, quel(s) conseil(s) me donneriez-vous afin de rendre se projet "portable" ?

C'est à dire de pouvoir le déployer facilement et le rendre compatible avec les différents OS Linux (désolé pas de Windows à cause du fping).

Merci pour votre aide.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #15 le: 26 mai 2020 à 16:45:54 »
Faire un binaire de la partie Python a peu d’intérêt en pratique. Python est pre-installé ou facilement dispo sur quasi tous les OS et systemes, etc. En plus les "packagers" Python ne pas trop portables en général.

Le problème est plus du coté des 'requirements' et composants dépendants:

**Requirements**
- Python 3.6.x or newer
- fping 4.x
- Grafana 6.7.x
- Influxdb 1.8.x

fping n'est dispo qu'en code source ou en package pour distro Linux (avec version arm & mips pour certains).

Grafana & InfluxDB sont des services plus ou moins complexes, donc pour les gens qui connaissent déja ces produits ce n'est pas un souci. Pour les autres c'est plus délicat d'autant que le projet peux se déployer sur plusieurs machines (une machine pour Grafana, une pour InfluDB, une pour le script + fping, voir avoir plusieurs instances du script+fping).

Comme toujours il faut mieux adapter son effort en fonction de la "cible". Celle-ci a 2 volets: l’environnent (OS et cpu) et le public qui va installer/utiliser le produit.

Si tu vises 'mr tout le monde' sous Windows ce n'est pas la meme chose que cibler 'les barbus' sous Linux. Pour ces derniers ton script Python suffit il se débrouillerons pour le reste.

Pour "mr tout le monde" c'est plus délicat. Déja je ne suis pas certain qu'un PC sous Windows soit une bonne cible pour un produit censé tourné 24/7 (sinon va y avoir des 'trous' dans les graphes).
Du coup cibler un PC Windows ne vaut peut-être pas l'effort que cela va demander. Ca va peut-être amuser quelques personnes a essayer cela sur leur PC mais peu l'utiliseront sérieusement comme cela. Donc beaucoup de temps & d'effort pour a l'arriver peu d'utilisation.

Donc c'est a toi de voir jusqu’où tu veux aller. Tu peux commencer par fournir un 'script' d'installation qui va installer & configurer tous les composants sur la machine par exemple (y compris InfluxDB & Grafana).

Une autre approche c'est d'utiliser Docker (du moins les containers en général , pas forcement "Docker" ca peut être podman ou lxc ou autre). L'avantage est qu'un utilisateur non expérimenté peut déployer cela très facilement, même sur Windows (Docker for Windows permet de faire tourner des containers Linux sous Windows).
L'inconvénient est que cela exclus certains OS comme les variantes de BSD (FreeBSD, etc).

Perso je commencerais par un script d'installation type "shell script" pour installer fping+le code python associé a un tuto rapide pour installer InfluxDB & Grafana.

Egalement j'utiliserai YAML que TOML. Ce dernier n'apporte rien de plus dans le cas présent pour un syntaxe plus lourde pour l'utilisateur.
Et peu de gens le connaissent. YAML est quand le 'standard' pour ce genre de chose.

ps: j'était en train d'écrire quand t'as posté ton message du coup pour la partie Windows on oublie.

benoitm76

  • Abonné Orange Fibre
  • *
  • Messages: 134
  • Créteil (94)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #16 le: 26 mai 2020 à 17:43:55 »
+ 1 pour docker.

Tu peux même proposer un docker compose qui permettrait de tout déployer de façon très simplifié.

Par exemple: https://github.com/code4pi/HueTemperatureSensor/blob/master/docker-compose.yml

Bon c'est un truc que j'ai jamais réellement terminé, mais il suffit de modifier le fichier de conf et de faire un docker-compose up -d pour lancer Grafana, Influxdb ...

J'ai utilisé des images latest (ce n'est pas une bonne pratique), mais tu peux choisir des versions spécifiques, les mettre à jour très facilement. Tu limites aussi les effet de bords et les soucis, car tu peux supprimer tous tes déploiements avec une autre commande (et repartir de zéro si besoin).

oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #17 le: 27 mai 2020 à 19:52:57 »
Hello,

Aujourd'hui j'ai bien avancé et je pense pouvoir bientôt livrer un docker avec uniquement l'outil Infpyng. Les tests sont concluants 😊
« Modifié: 28 mai 2020 à 15:41:12 par oijkn »

oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #18 le: 28 mai 2020 à 15:42:02 »
Bonjour,

Juste pour vous informer que le docker est prêt, j'aimerais bien avoir vos retours pour ceux qui vont le tester, merci.

Bonne journée.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #19 le: 28 mai 2020 à 18:54:35 »
Bonjour,

Juste pour vous informer que le docker est prêt, j'aimerais bien avoir vos retours pour ceux qui vont le tester, merci.

Bonne journée.

l'output de log par défaut sur /var/log/infpyng.log n'est pas pratique pour les conteneurs. cela oblige a mapper ce ficher en dehors du conteneur ou de faire un "docker cp  nomducontainer:/var/log/infpyng.log -' pour voir ce qui se passe.

Généralement on prefere stdout/stdin car la commande "docker logs .." permet d'afficher directement stdin/stdout.
En plus on peut spécifier un 'driver' (voir https://docs.docker.com/config/containers/logging/configure/ ). par exemple je lance mes containers avec cet option:
(c'est un exemple avec Caddy)
docker run -d \
    --name caddy\
    --restart unless-stopped\
    --mount /www/Caddyfile:/etc/Caddyfile \
    --mount /www/www:/www \
    --mount /www/caddy-logs:/logs \
    -p 80:80 -p 443:443 \
    --log-driver=journald \
    --log-opt tag="{{.Name}}" \
    abiosoft/caddy -agree -conf /etc/Caddyfile

les options --log-driver=journald et -log-opt tag permettent de rediriger le 'docker logs' sur le journal systemd de l'hote (donc journalctl) ce qui est pratique et centralise les logs de plusieurs containers.

Pour ce faire ton app devrait donc utiliser stdout  (ou stderr) par défaut plutôt qu'un fichier de log (ou regarde le Dockerfile de nginx, par exemple, https://github.com/nginxinc/docker-nginx/blob/master/stable/alpine/Dockerfile#L104 ligne 104 ils font un ln -s mais je ne trouve pas cela clean si on le choix)
nb: on parle de logs systeme (erreur de config par exemple) pas des traces applicatives (style log apache) qui peuvent générer beaucoup de lignes et sont mieux dans leur propre fichier de log. Dans ton cas, si le serveur Influxdb ne répond ca va dans /var/log/infpyng.log ce qui n'est pas bon dans un environnent Docker, ni meme en bare métal d'ailleurs cette erreur devrait aller le stderr de l'application.

Apres un bon container doit être "jetable" donc rien garder dedans. ni input (config, parametres) ni output (logs, etc) importants. On peut laisser une config par défaut si on veut mais si l'application nécessite que l'utilisateur spécifie toujours une config autant mettre ca en dehors du conteneur et générer une erreur si on ne précise pas la config. Le fichier hosts par exemple n'a pas lieu d'être dans le container.
Il faut voir un container comme un executable c'est plus simple a aborder comme ca.

Pour un usage propre, il faut donc 'monter' les 2 fichiers de config (ou le dossier 'config') et par défaut avoir les logs sur stdout/stderr et le traces applicatives dans un autre fichier.

Pour éviter des montages complexe, je conseillerais aussi de mettre des chemins courts dans le containers ou des volumes nommés. la les 2 fichiers de conf sont  "/app/infpyng/config/config.toml" et "/app/infpyng/config/config.toml" ce qui est long pour rien.
utilise plutot /app/config.toml et /app/hosts.toml. bref met tout dans /app.

comme ca on peut lancer le conteneur ainsi:
docker run -d\
    --name infpyng\
    --restart unless-stopped\
    --mount /chemin/hote/infpyng/config/config.toml:/app/config.toml\
    --mount /chemin/hote/infpyng/config/hosts.toml:/app/hosts.toml\
    --mount /chemin/hote/infpyng/infpyng.log:/var/log/infpyng.log \
    --log-driver=journald \
    --log-opt tag="{{.Name}}" \
oijkn/infpyng

en pratique /chemin/hote est un serveur nfs par exemple ou un chemin local backupé et protégé. (c'est l'endroit de persistence, tout le reste étant jetable et pouvant changer de machine).

Apres vu ton app n'est pas autonome et dépend d'InfluxDB, il serait peut-etre mieux de mettre la config InfluxDB non pas dans config.toml mais en paramètre ou variable d'environnement. ca permet de passer cela lors du "docker run ..." ou dans un compose file.

Je vais faire un compose file pour tester ton container car je n'utilise pas influxdb sur mes serveurs. je le posterais ici.

edit: quelques typos

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #20 le: 28 mai 2020 à 22:44:55 »
j'ai fait la stack de test dans https://github.com/kgersen/infpyng-stack

c'est pour donc ceux qui n'ont pas influxdb & grafana et veulent tester Infpyng.

instruction:
-installer Docker
-installer docker-compose  ( https://docs.docker.com/compose/install/ )

puis:

git clone https://github.com/oijkn/infpyng.git
cd infpyng
git clone https://github.com/kgersen/infpyng-stack.git
cd infpyng-stack
sh run.sh

ensuite accéder a grafana via http://localhost:3001  (ou l'ip si sur une machine distante)

le login/mdp par défaut est admin/foobar (définit dans le fichier grafana/config.monitoring)

J'ai préconfiguré la source dans Grafana mais pas le plugin et le dashboard, n'étant pas familier avec ce plugin je laisse le soin a oijkn de rajouter cela. Il suffit d'utiliser le dossier grafana/provisioning



oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #21 le: 28 mai 2020 à 23:01:45 »
Citer
Pour ce faire ton app devrait donc utiliser stdout  (ou stderr) par défaut plutôt qu'un fichier de log (ou regarde le Dockerfile de nginx, par exemple, https://github.com/nginxinc/docker-nginx/blob/master/stable/alpine/Dockerfile#L104 ligne 104 ils font un ln -s mais je ne trouve pas cela clean si on le choix)
nb: on parle de logs systeme (erreur de config par exemple) pas des traces applicatives (style log apache) qui peuvent générer beaucoup de lignes et sont mieux dans leur propre fichier de log. Dans ton cas, si le serveur Influxdb ne répond ca va dans /var/log/infpyng.log ce qui n'est pas bon dans un environnent Docker, ni meme en bare métal d'ailleurs cette erreur devrait aller le stderr de l'application.

Suite à tes explications et conseils, j'ai donc également redirigé les erreurs vers la sortie STDERR. Ce qui permet effectivement de les voir passer dans le journal du systemd.

Citer
Pour un usage propre, il faut donc 'monter' les 2 fichiers de config (ou le dossier 'config') et par défaut avoir les logs sur stdout/stderr et le traces applicatives dans un autre fichier.

Pour éviter des montages complexe, je conseillerais aussi de mettre des chemins courts dans le containers ou des volumes nommés. la les 2 fichiers de conf sont  "/app/infpyng/config/config.toml" et "/app/infpyng/config/config.toml" ce qui est long pour rien.
utilise plutot /app/config.toml et /app/hosts.toml. bref met tout dans /app.

Très bon conseil, merci ! J'ai donc adapté le build de l'image pour raccourcir les chemins et j'en ai profité pour ajouter tzdata pour la timezone (c'est galère de debug avec un décalage d'heure entre le container et le host)

docker run -d \
    --name infpyng \
    --hostname docker-infpyng \
    --restart unless-stopped \
    --mount src=/etc/infpyng/config,target=/infpyng/config,type=bind \
    --mount src=/var/log/infpyng.log,target=/var/log/infpyng.log,type=bind \
    --log-driver=journald \
    --log-opt tag="{{.Name}}" \
    --env TZ=Europe/Paris \
oijkn/infpyng

Citer
Apres vu ton app n'est pas autonome et dépend d'InfluxDB, il serait peut-etre mieux de mettre la config InfluxDB non pas dans config.toml mais en paramètre ou variable d'environnement. ca permet de passer cela lors du "docker run ..." ou dans un compose file.

Dans le but de garder une compatibilité entre le mode docker et standalone (git) je préfère tout mettre dans un fichier de config.

Citer
j'ai fait la stack de test dans https://github.com/kgersen/infpyng-stack

c'est pour donc ceux qui n'ont pas influxdb & grafana et veulent tester Infpyng.

instruction:
-installer Docker
-installer docker-compose  ( https://docs.docker.com/compose/install/ )

puis:

git clone https://github.com/oijkn/infpyng.git
cd infpyng
git clone https://github.com/kgersen/infpyng-stack.git
cd infpyng-stack
sh run.sh

ensuite accéder a grafana via http://localhost:3001  (ou l'ip si sur une machine distante)

le login/mdp par défaut est admin/foobar (définit dans le fichier grafana/config.monitoring)

J'ai préconfiguré la source dans Grafana mais pas le plugin et le dashboard, n'étant pas familier avec ce plugin je laisse le soin a oijkn de rajouter cela. Il suffit d'utiliser le dossier grafana/provisioning

Super !! Merci pour ton aide et implication :) je regarde ça demain et je fini de le configurer.

Si tu as d'autres idées ou améliorations à proposer n'hésite surtout pas.

Bonne fin de soirée.

oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #22 le: 29 mai 2020 à 10:42:15 »
Citer
j'ai fait la stack de test dans https://github.com/kgersen/infpyng-stack

J'ai voulu tester ton stack et je rencontre des difficultés pour le faire fonctionner.
En premier lieux j'ai modifié le fichier "stack-compose.yml" car j'ai mis à jour mon docker suite à tes recommandations :

  infpyng:
    build:
      context: .
      dockerfile: ../Dockerfile
    image: oijkn/infpyng:latest
    container_name: infpyng_infpyng
    depends_on:
      - influxdb
    volumes:
      - ./data/infpyng/:/infpyng/config/
      - ./data/infpyng.log:/infpyng/infpyng.log
    restart: unless-stopped

Là ou je rencontre un problème c'est lors du build en exécutant la commande "sh run.sh", dans le processus de construction il ne parvient pas à copier le fichier "requirements.txt" qui se trouve un répertoire au dessus. J'ai tenté de le copier dans le dossier courant, c'est à dire au même niveau où se trouve le fichier "stack-compose.yml". De cette façon le build s'effectue correctement par contre dans le container de Infpyng, je ne retrouve plus l'app...

# docker logs d08edc58d4d4
python: can't open file 'infpyng.py': [Errno 2] No such file or directory
python: can't open file 'infpyng.py': [Errno 2] No such file or directory
python: can't open file 'infpyng.py': [Errno 2] No such file or directory
python: can't open file 'infpyng.py': [Errno 2] No such file or directory
python: can't open file 'infpyng.py': [Errno 2] No such file or directory
python: can't open file 'infpyng.py': [Errno 2] No such file or directory
python: can't open file 'infpyng.py': [Errno 2] No such file or directory
python: can't open file 'infpyng.py': [Errno 2] No such file or directory

# docker run --rm -it oijkn/infpyng sh
/infpyng # ls -sal
total 24
     0 drwxr-xr-x    5 root     root           158 May 29 08:43 .
     0 drwxr-xr-x    1 root     root            18 May 29 08:44 ..
     0 drwxr-xr-x    8 root     root           163 May 29 07:45 .git
     4 -rw-r--r--    1 root     root             5 May 29 07:45 .gitignore
     4 -rw-r--r--    1 root     root           433 May 29 07:45 README.md
     0 drwxr-xr-x    5 root     root            71 May 29 08:34 data
     0 drwxr-xr-x    3 root     root            51 May 29 07:45 grafana
     4 -rw-r--r--    1 root     root            46 May 29 08:19 requirements.txt
     4 -rw-r--r--    1 root     root           141 May 29 07:45 run.sh
     4 -rw-r--r--    1 root     root           869 May 29 08:37 stack-compose.yml
     4 -rw-r--r--    1 root     root            65 May 29 07:45 stop.sh

J'en est profité pour restructurer un peu le volume data en y mettant tout dedans ;)

Serais-tu m'aider stp ? Merci par avance :)

Edit : Juste après avoir posté mon message j'ai trouvé la solution (après 2h de recherche...)

  infpyng:
    build:
      context: $PWD/..
      dockerfile: $PWD/../Dockerfile
    image: oijkn/infpyng:latest
    container_name: infpyng_infpyng
    depends_on:
      - influxdb
    volumes:
      - ./data/infpyng/:/infpyng/config/
      - ./data/infpyng.log:/infpyng/infpyng.log
    restart: unless-stopped

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #23 le: 29 mai 2020 à 14:58:54 »
en prod on ne met pas le build et le dockfile dans le compose file, on référence juste l'image qui est téléchargée depuis un registre (hub.docker.com par exemple).

la c'est un compose file de développement qui permet de (re)build a la demande l'image oijkn/infpyng car elle n'est pas dispo dans un registre public sur Internet.

il suffit d'enlever la section 'build:' pour simplifier la chose mais ca imposera de faire le "docker build ..." a la main avant ou que oijkn/infpyng soit dispo dans un registre.

Idéalement tu devrais créer un compte sur hub.docker.com pour mettre ton image ( oijkn/infpyng ) comme ca tout le monde peut la récupérer sans besoin de récupérer tes sources.

Tu peux même lier ton compte github a ton compte Docker et automatiser le docker build chez Docker: a chaque changement de ton Dockerfile sur github le "docker build ..." sera automatiquement fait par les serveurs de hub.docker.com (d'ou l'importance des tags de version aussi).

Tu peux aussi utiliser un registre perso (serveur perso par exemple) ou un registre public autre que celui de Docker (github, gitlab, quay.io, Google (gcp), Amazon (aws), Nexus, etc) dans cas il faut préciser l'url en plus du nom de l'image.

L'important est de comprendre que faire un  'docker run grafana/grafana' ca va revient à faire un "docker run docker.io/library/grafana" si l'image n'est pas dispo localement.
Donc si tu veux que les autres profitent de ton image il faut la publier dans un registre sinon ils doivent la build localement avant.