Auteur Sujet: Infpyng: Un outil pour remplacer SmokePing  (Lu 18672 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 #24 le: 29 mai 2020 à 15:31:24 »
Hello,

Oui je suis tout à fait d'accord avec toi et je ne comprend pas trop ce qui se passe car j'ai déjà un compte sur hub.docker :

Docker Infpyng

Donc n'importe qui peut le pull :)

Actuellement je suis en train de batailler avec Grafana qui n'arrive pas à se connecté à InfluxDB...
Voilà la conf du docker-compose:

version: '3.8'
services:
  influxdb:
    image: influxdb:latest
    container_name: infpyng_influxdb
    ports:
      - '8086:8086'
    volumes:
      - ./data/influxdb:/var/lib/influxdb
    env_file:
      - .env

  chronograf:
    image: chronograf:latest
    container_name: infpyng_chronograf
    ports:
      - '127.0.0.1:8888:8888'
    volumes:
      - ./data/chronograf:/var/lib/chronograf
    depends_on:
      - influxdb
    environment:
      - INFLUXDB_URL=http://influxdb:8086

  grafana:
    image: grafana/grafana:6.7.3
    container_name: infpyng_grafana
    ports:
      - '3000:3000'
    volumes:
      - ./data/grafana:/var/lib/grafana
      - ./grafana-provisioning/:/etc/grafana/provisioning
    depends_on:
      - influxdb
    env_file:
      - .env

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

Lorsque je clique sur le bouton "Save & test" dans le menu "Data sources" de Grafana, un message d'erreur pop : "Network Error: Bad Gateway(502)"

Pourtant tout semble bien fonctionner et configurer car depuis mon PC (Windows) j'arrive à atteindre InfluxDB :

C:\Users\Oijkn>curl -i -XPOST http://127.0.0.1:8086/query --data-urlencode "q=SHOW DATABASES"
HTTP/1.1 200 OK
Content-Type: application/json
Request-Id: 0eb80091-a1b2-11ea-806b-0242c0a83002
X-Influxdb-Build: OSS
X-Influxdb-Version: 1.8.0
X-Request-Id: 0eb80091-a1b2-11ea-806b-0242c0a83002
Date: Fri, 29 May 2020 13:41:11 GMT
Transfer-Encoding: chunked

{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["infpyng"],["_internal"]]}]}]}

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #25 le: 29 mai 2020 à 17:22:55 »
ok pour docker hub, je n'avais pas vu que tu avais déjà mis ton image dessus.

Dans un même compose file , les services sont joignables entre eux par leur noms via un dns local.
Il y a un résolution dns automatique 'nom du service' -> adresse IP interne du conteneur.

du coup depuis le conteneur infpyng_grafana le containeur infpyng_influxdb est accessible via le nom 'influxdb' (car c'est le nom du service = la ligne  'influxdb:')

pour voir les IP des containers d'une stack (ici le réseau de la stack s’appelle infpyng_default) :

docker network inspect -f '{{range .Containers}}{{.Name}} = {{.IPv4Address}}{{println}}{{end}}' infpyng_default
("docker network ls" affiche les réseaux configurés)

Tu peux vérifier la réso dns entre containers fonctionne avec:

docker exec -it infpyng_grafana ping influxdb(tu aura une erreur de ping a cause des droits mais la réso dns devrait marcher, cela doit afficher l'ip du container infpyng_influxdb)

si l'ip ne s'affiche pas y'a un problème.
si elle s'affiche alors la source ' http://influxdb:8086 ' devrait fonctionner dans le container grafana. Tu peux tester en l'ajoutant a la main. Mais elle pré-configurée dans le fichier 'grafana/provisioning/datasources/influxdb.yaml' (il faut donc que l'url dans ce fichier soit toujours cohérente avec le nom du service influxdb dans le ficher compose).
tu peux aussi testé en mettant directement l'ip telle qu'affichée avec (docker network inspect ...) mais juste pour tester si le réseau fonctionne entre containers.




oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #26 le: 31 mai 2020 à 18:46:58 »
Bonjour à tous,

kgersen merci pour tes indications, d'après ce que j'ai pu lire sur internet effectivement je devrais pouvoir connecter Grafana avec InfluxDB via le nom DNS du container... la seule solution à mon problème a était d'utiliser le "network_mode: host" (peut être un soucis sur ma VM CentOS).

Bon quoiqu'il en soit grâce à ton aide et exemple, j'ai pu créer un docker-compose avec le stack Infpyng + Grafana + InfluxDB + Chronograf.
Tout ceci est dispo sur le Github.

Merci pour vos retours et enjoy it :)

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #27 le: 31 mai 2020 à 19:13:58 »
"network_mode: host " ca viole un peu le principe des containers, ca les expose directement sur le réseau local pour rien.

oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #28 le: 31 mai 2020 à 19:32:41 »
"network_mode: host " ca viole un peu le principe des containers, ca les expose directement sur le réseau local pour rien.

Oui je sais bien mais sur ma VM ça ne fonctionne pas normalement.

Tu peux essayer de ton côté sans le mode "host" et voir si Grafana communique avec InfluxDB via son nom DNS, stp ? Merci

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #29 le: 31 mai 2020 à 22:55:00 »
Oui je sais bien mais sur ma VM ça ne fonctionne pas normalement.

Tu peux essayer de ton côté sans le mode "host" et voir si Grafana communique avec InfluxDB via son nom DNS, stp ? Merci

oui ca marche si on corrige les références (influxdb au lieu de 127.0.0.1) et:

- il manque le .env pour définir le base influxdb (pourquoi un .env ?!)
- la datasource dans provisionning n'est pas correctement configuré dans échoue dans grafana quand on 'save & test' . il faut mettre 'proxy' comme access et pas 'access'

apiVersion: 1
datasources:
  - name: InfluxDB
    type: influxdb
    access: proxy
    database: infpyng
    url: http://influxdb:8086
    isDefault: true
    editable: true
    jsonData:   
      httpMode: GET
      timeInterval: 5m


pour finir 3 détails:
- enleve le dossier 'data' du git (via gitignore) ou idéalement positionne le en dehors de l'arborescence du git
- clear-all.sh est super dangereux et ne devrait pas être dans le git publié sur Internet. Des gens risquent de supprimer leur containers par mégarde. c'est l’équivalent de faire un script qui 'rm -rf /' ... tu peux faire un clean propre avec docker-compose que pour les containers concernant ta stack. il ne faut pas toucher aux  autres containers qu'il pourrait y avoir. cf la doc de docker-compose
- par habitude on expose pas les ports dehors si on en a pas l'usage. Influxdb par exemple n'a pas besoin d'être exposé dehors (sauf en phase de test éventuellement).

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #30 le: 31 mai 2020 à 23:12:20 »
dernier point, tu peux ajouter un "hostname" a ton container pour éviter dans influxdb/grafana de voir un nom aléatoire et différent a chaque fois que le container infpyng_infpyng  est recrée.

pour voir le nom actuel
docker exec infpyng_infpyng hostname
Ligne a rajouter dans le compose, section infpyng:

  infpyng:
    image: oijkn/infpyng:latest
    container_name: infpyng_infpyng
    hostname: infpyng
    depends_on:


Apres si y'a le hostname dans la base influxdb c'est peut-être ton code qui fait cela (je n'ai pas été voir).
En mode bare metal c'est peut-etre ok mais pas forcement non plus (si on déplace la sonde par exemple).
Du coup ajoute peut-etre un paramètre "hostname" (dans la config.toml par exemple) et utilise hostname que si le paramètre n'est pas présent.



oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #31 le: 01 juin 2020 à 00:15:55 »
J'ai beau essayer dans tous les sens grafana ne trouve pas influxdb... Après ma VM à une configuration un peu spéciale car elle par la pfs de mon taf et donc naté. Elation je remonte une VM propre pour refaire les tests et j'appliquerai tes recommandations 😊 merci

oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #32 le: 01 juin 2020 à 17:13:48 »
Tu peux vérifier la réso dns entre containers fonctionne avec:

docker exec -it infpyng_grafana ping influxdb(tu aura une erreur de ping a cause des droits mais la réso dns devrait marcher, cela doit afficher l'ip du container infpyng_influxdb)

Franchement je ne comprends pas ce qu'il se passe sur ma VM toute fraîche, tout fonctionne bien sauf la joignabilité entre Grafana et InfluxDB.
D'après les tests que j'ai pu effectuer, il semblerait que les containers se voient bien pourtant :

[root@PC-213 infpyng-stack]# docker exec -it $(docker ps -a | grep grafana | awk '{print $1}') nslookup influxdb
nslookup: can't resolve '(null)': Name does not resolve

Name:      influxdb
Address 1: 172.28.0.2 infpyng_influxdb.infpyng_default

[root@PC-213 infpyng-stack]# docker exec -it $(docker ps -a | grep grafana | awk '{print $1}') ping influxdb
PING influxdb (172.28.0.2): 56 data bytes
ping: permission denied (are you root?)

Config du network Infpyng_default :
[
    {
        "Name": "infpyng_default",
        "Id": "e0d764c05e6c35847dae3a0ed9727e2ad997f8ff0b403ff522a3b95bbe254fda",
        "Created": "2020-06-01T16:42:50.836242415+02:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.28.0.0/16",
                    "Gateway": "172.28.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "332d5106915fb45c8c2b1064c69fec286e24402143d9ccd4894be9c865dce2e8": {
                "Name": "infpyng_grafana",
                "EndpointID": "6487bc78307d127275df29b3308a745d00284d39309dc6a771f3ddd3a91fc9fe",
                "MacAddress": "02:42:ac:1c:00:04",
                "IPv4Address": "172.28.0.4/16",
                "IPv6Address": ""
            },
            "735e5d759e844aad945f5b714ac1c594baa882fe0a27b71d3f0380a198803899": {
                "Name": "infpyng_influxdb",
                "EndpointID": "5b49dd507fcb1f67daba7beab4ff986e90512da29384b46e09238e9bde95b375",
                "MacAddress": "02:42:ac:1c:00:02",
                "IPv4Address": "172.28.0.2/16",
                "IPv6Address": ""
            },
            "8e1689dd3df1efc55bfd605a589b3e7eeedaa060e39a06351c5ea765fb3a2ef1": {
                "Name": "infpyng_chronograf",
                "EndpointID": "bbbef889424498ea96f467feb31dec13c0805c554092628a6587e795cb119ca5",
                "MacAddress": "02:42:ac:1c:00:03",
                "IPv4Address": "172.28.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "infpyng",
            "com.docker.compose.version": "1.25.5"
        }
    }
]

J'ai beau essayer toutes les méthodes possible, je ne parviens pas à atteindre influx via l'url : http://influxdb:8086 (que j'expose ou pas le port en local)

- il manque le .env pour définir le base influxdb (pourquoi un .env ?!)

oui désolé, un erreur de ma part -> j'ai remis le fichier "config.monitoring"

Citer
- la datasource dans provisionning n'est pas correctement configuré dans échoue dans grafana quand on 'save & test' . il faut mettre 'proxy' comme access et pas 'access'

apiVersion: 1
datasources:
  - name: InfluxDB
    type: influxdb
    access: proxy
    database: infpyng
    url: http://influxdb:8086
    isDefault: true
    editable: true
    jsonData:   
      httpMode: GET
      timeInterval: 5m

encore un oubli de ma part suite à tous les tests... c'est corrigé :)

Citer
pour finir 3 détails:
- enleve le dossier 'data' du git (via gitignore) ou idéalement positionne le en dehors de l'arborescence du git
- clear-all.sh est super dangereux et ne devrait pas être dans le git publié sur Internet. Des gens risquent de supprimer leur containers par mégarde. c'est l’équivalent de faire un script qui 'rm -rf /' ... tu peux faire un clean propre avec docker-compose que pour les containers concernant ta stack. il ne faut pas toucher aux  autres containers qu'il pourrait y avoir. cf la doc de docker-compose
- par habitude on expose pas les ports dehors si on en a pas l'usage. Influxdb par exemple n'a pas besoin d'être exposé dehors (sauf en phase de test éventuellement).

Le répertoire data n'est pas poussé dans le git donc aucune inquiétude à ce sujet, le script clear a été adapté pour uniquement supprimer les images/containers créés par Infpyng.


Autre chose que je remarque, depuis le container Grafana je ne peux pas installer de plugin, comme si internet n'était pas présent alors que le fichier /etc/resolv.conf est bien configuré sur le host. Avec l'option dns dans le fichier docker-compose ça ne fonctionne pas mieux.
Donc temporairement (le temps de trouver la solution) le plugin est embarqué dans le répertoire de provisioning.

[root@PC-213 infpyng-stack]# docker logs 8af5c60a2a1e
installing multibar-graph-panel @
from: https://github.com/CorpGlory/grafana-multibar-graph-panel/archive/0.2.5.zip
into: /var/lib/grafana/plugins

Error: ✗ failed to download plugin archive: Failed to send request: Get https://github.com/CorpGlory/grafana-multibar-graph-panel/archive/0.2.5.zip: dial tcp: lookup github.com on 127.0.0.11:53: read udp 127.0.0.1:53587->127.0.0.11:53: i/o timeout

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #33 le: 01 juin 2020 à 20:33:36 »
si ping ou nslookup affiche bien l'ip c'est que le probleme est plus haut.

tout fonctionne bien sauf la joignabilité entre Grafana et InfluxDB.

comme tu test / détecte cela ?

essai avec wget ( le container grafana n'inclut pas curl mais il inclut wget qui permet a peu pres la meme chose)

docker exec -it infpyng_grafana wget -q -O - --post-data "q=SHOW DATABASES" http://influxdb:8086/querycela fonctionne chez moi.

cela fonctionne aussi:
docker exec -it infpyng_grafana wget -O /dev/null https://github.com/CorpGlory/grafana-multibar-graph-panel/archive/0.2.5.zip

Connecting to github.com (140.82.118.3:443)
Connecting to codeload.github.com (140.82.113.9:443)
null                 100% |*****************************************************************************************************|  293k  0:00:00 ETA


j'ai bien la meme config de Infpyng_default que toi.

depuis le container Grafana je ne peux pas installer de plugin

tu utilises quel manip pour cela ?

ps: je vois que tu utilises les id des containers pour faire tes manips, c'est plus simple d'utiliser les noms des containers d'autant que tu peux installer la complétion shell ( https://docs.docker.com/compose/completion/ pour docker-compose et pour docker tout court ca devrait être auto suivant ta distrib Linux).
ps: docker ps -a affiche aussi les containers arrêtés, t'as pas des doublons ou autre ?

oijkn

  • Professionnel des télécoms
  • *
  • Messages: 22
  • 127.0.0.1
    • Infpyng
Infpyng: Un outil pour remplacer SmokePing
« Réponse #34 le: 01 juin 2020 à 21:16:48 »
comme tu test / détecte cela ?

Depuis l'interface de Grafana, dans le menu Configuration->Data Sources->InfluxDB et bouton "Save & Test" (voir capture)

Citer
essai avec wget ( le container grafana n'inclut pas curl mais il inclut wget qui permet a peu pres la meme chose)

[root@PC-213 infpyng-stack]# docker exec -it infpyng_grafana wget -q -O - --post-data "q=SHOW DATABASES" http://influxdb:8086/query
wget: can't connect to remote host (172.31.0.2): Host is unreachable

[root@PC-213 infpyng-stack]# docker exec -it infpyng_grafana wget -O /dev/null https://github.com/CorpGlory/grafana-multibar-graph-panel/archive/0.2.5.zip
wget: bad address 'github.com'

Chez moi ça ne fonctionne pas...


Citer
ps: je vois que tu utilises les id des containers pour faire tes manips, c'est plus simple d'utiliser les noms des containers
ps: docker ps -a affiche aussi les containers arrêtés, t'as pas des doublons ou autre ?

merci pour cet indications, je viens de mettre à jour le script clear avec les noms des images. Et non aucun doublon car j'essaie de bosser sur des images/container "propre" :)

Je ne sais pas pourquoi ça fonctionne bien chez toi et pas ici...

Ci-dessous la conf du host (ma VM est en mode bridge avec VMware Workstation) :

[root@PC-213 infpyng-stack]# cat /etc/resolv.conf
nameserver 8.8.8.8
« Modifié: 01 juin 2020 à 21:52:45 par oijkn »

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Infpyng: Un outil pour remplacer SmokePing
« Réponse #35 le: 01 juin 2020 à 21:34:53 »
wget: can't connect to remote host (172.31.0.2): Host is unreachable
curieux.

c'est que depuis grafana ? influxdb fonctionne correctement ? chronograf est accessible ?

c'est quoi comme distrib linux dans ta vm ? comment docker est installé ? quelle version de docker ('docker version' ou 'docker system info')?

qu'affiche "docker ps" quand les 4 containers tournent ?