This site uses cookies! Learn More

Ce site utilise des cookies !

En continuant à utiliser ce site, vous vous engagez à nous permettre de stocker des cookies sur votre ordinateur.

 

Si nous utilisons des cookies et retenons des données anonymes, c’est pour nous aider à mieux gérer notre mesure d’audience, aider nos partenaires commerciaux à nous rémunérer et nos partenaires publicitaires à proposer des annonces qui vous correspondent.

 

Grâce à ces cookies, le forum est en mesure de savoir qui écrit un message et utile pour le système d'authentification.

 

En cliquant sur « J'accepte », vous acceptez l'utilisation par NAS-Forum de cookies publicitaires et de mesure d'audience fine.

shadowking

[TUTO] Monitoring NAS et réseau

Messages recommandés

Ce tutoriel est dédié à la mise en service d'applications qui vous permettront d'extraire des métriques de votre NAS, de les stocker dans une base de données et de les mettre en forme de la manière qui vous intéresse.
Vous pourrez par la suite monitorer vos autres équipements réseau disposant du protocole SNMP.

Voici un exemple de tableau de bord en temps réel qu'il est possible d'obtenir, ici pour votre NAS :

8U5VwNX.thumb.png.685aeeb4ee912aace8e110da44cd1c61.png

Informations préliminaires :
Docker-compose

Pour créer mes containers, j'utilise docker-compose, car d'une part ça permet de conserver les paramètres de création des containers, et d'autre part ça représente un gain de temps conséquent.
Pour les besoins du tutoriel, voici une brève explication de son fonctionnement :

Si vous êtes sous windows, je vous conseille d'utiliser Notepad++ :

- Créer un nouveau document
- Entrer le code lié au container concerné
- Menu Encodage -> Vérifier que "Encoder en UTF-8" est choisi
- Enregistrer sous ->
Nom : docker-compose (à respecter!)
Type : YAML Ain't Makeup Language (fin de la liste déroulante).

Le fichier docker-compose.yml qui en résulte est à copier dans le dossier dédié au container sur votre NAS (voir point suivant).

Ensuite, s'y connecter en SSH :

cd /chemin/vers/le/container
docker-compose up -d

Note : penser à précéder la commande docker-compose de sudo si vous n'êtes pas connecté en root.

Dossier de container

Afin que les données d'un container soient facilement accessibles, il n'est pas rare de monter des volumes à la création d'un container.
Dans mon cas, j'ai un dossier partagé docker, dans lequel on trouve un dossier pour chaque container dont je souhaite pouvoir changer la configuration ou accéder aux données.
Par exemple, pour telegraf, le chemin absolu de son dossier sera /volume1/docker/telegraf
Ceci est donc à adapter à vos habitudes et à votre guise.

Protocole SNMP

Aucune connaissance réellement nécessaire pour la stricte application du tutoriel, mais si vous comptez faire de la surveillance d'autres équipements réseaux, ce sera incontournable d'en comprendre le fonctionnement global.
On trouve la plupart des informations sur la page wikipédia (notamment les deux premiers paragraphes).

Fichiers MIB

Les fichiers MIB sont une sorte de base de données arborescente dans laquelle sont classées des informations liées au comportement en cours d'un système.

Matériel nécessaire :

La seule limitation de ce tutoriel est d'avoir un NAS disposant du paquet Docker.
De manière générale, ce tutoriel devrait vous permettre de reproduire dans les grandes lignes la mise en service du système de gestion de réseau sur d'autres équipements, typiquement un raspberry par exemple.
En effet peu de choses sont spécifiquement liées à DSM.

Connaissances préalables :

  • Savoir se connecter en SSH (voir tutoriel de Zeus)
  • Avoir quelques notions du fonctionnement de Docker

I/ Activation du protocole SNMP

Par défaut, le protocole n'est pas activé.
Pour y remédier, on va dans Panneau de configuration -> Terminal & SNMP -> Onglet "SNMP" pour arriver à l'écran suivant :

tempsnip.png.270c7fadb59b88cb37cfa3b9c024fd7c.png

Cocher les cases comme ci-avant, les données dans "Informations du périphérique SNMP" sont facultatives.
J'ai laissé public, le choix par défaut pour le nom de communauté.
Il se peut que le pare-feu Synology demande une ouverture de port. Si vous avez suivi les recommandations du tutoriel de sécurisation de votre NAS, vous avez sûrement autorisé toutes les requêtes émanant d'une source locale, dans ce cas pas besoin d'ajouter d'exception. Ça ne se justifie que si vous souhaitez monitorer un serveur distant.

II/ Le principe
On utilise la combinaison de trois applications exécutées en containers docker pour exploiter les données de notre NAS :

- Telegraf
C'est un agent de récupération de métriques (entendez des données relatives au fonctionnement du système que vous souhaitez surveiller).
- InfluxDB
InfluxDB est une base de données qui va stocker les métriques recueillies par Telegraf.
- Grafana
C'est un outil de supervision et d'aggrégation de métriques, ce qui va nous permettre de manipuler les données stockées dans InfluxDB.

III/ Installation :

1/ Les images

On télécharge les trois images docker suivantes :

telegraf
influxdb
grafana/grafana

2/ Création d'un réseau bridge défini par l'utilisateur

Pour que nos containers puissent communiquer entre eux, il existe principalement deux méthodes :
- par lien : on utilise la fonction de lien présente dans l'interface de création d'un container sur DSM qui pointe vers le container vers lequel on souhaite établir un pont.
Cette méthode fonctionne encore, mais n'est plus recommandée par Docker.
- par réseau l'utilisateur définit un réseau de type bridge ; lorsqu'on ne précise rien concernant le réseau dans lequel le container doit se situer, docker l'isole dans un sous-réseau à part (172.17.0.0, 172.18.0.0, etc...).
Si par contre on crée son propre réseau, le fonctionnement n'est pas le même : tous les containers dans ce même réseau verront les ports sur lesquels ils tournent exposés les uns envers les autres, c'est exactement ce qu'on recherche ici. L'ensemble sera isolé des autres containers.

Pour créer notre bridge personnalisé, il suffit d'aller dans Docker sur DSM -> Réseau -> Ajouter ->

 reseau_docker.PNG.c34dcc0d74f3cb3c7121b282946bffd3.PNG

On valide, le réseau est maintenant créé, nos containers pourront y être intégrés à leur création.

3/ Création du container InfluxDB

On commence par InfluxDB, car sans lui Telegraf ne saura pas exporter ses métriques, et Grafana n'aura pas de source de métrique.
On crée d'abord un dossier data dans le dossier du container.
On crée ensuite le fichier docker-compose.yml, ou on le télécharge (et on le renomme docker-compose.yml)  influxdb_docker-compose.yml

version: "2"
services:

    influxdb:
        image: influxdb
        container_name: influxdb
        hostname: influxdb
        environment:
            - INFLUXDB_DB=nas_telegraf
            - INFLUXDB_ADMIN_USER=admin
            - INFLUXDB_ADMIN_PASSWORD=admin
            - INFLUXDB_USER=nas_telegraf
            - INFLUXDB_USER_PASSWORD=nas_telegraf
            - INFLUXDB_HTTP_AUTH_ENABLED=true
        volumes:
            - "/volume1/docker/influxdb/data:/var/lib/influxdb"
        ports:
            - 8086:8086
        restart: unless-stopped
        
networks:
    default:
        external:
            name: data_export

Notes : (important pour la compréhension)

- On a créé une DB par défaut => nas_telegraf
- On a créé un utilisateur administrateur pour gérer l'ensemble des DB dans InfluxDB => admin / admin
- On a créé un utilisateur avec les droits de lecture et écriture sur la DB nas_telegraf => nas_telegraf / nas_telegraf
- On a activé l'authentification HTTP (nécessaires pour que les autres variables d'environnement soient prises en compte).
- Le dossier data créé ci-avant sert de volume de stockage des données.
- InfluxDB reçoit et envoie les données sur le port 8086.

4/ Création du container telegraf

Telegraf utilise un fichier de configuration .conf, qu'on va générer en amont de la création du container.
Pour se faire on se connecte en SSH :

cd /volume1/docker/telegraf
docker run --rm telegraf telegraf config > telegraf.conf

Un fichier telegraf.conf va apparaître dans le dossier, avant de l'éditer je vous conseille d'en faire une copie, en SSH il suffit de taper la commande suivante (merci @Zeus pour la suggestion) :

cp /volume1/docker/telegraf/telegraf.conf /volume1/docker/telegraf/telegraf.conf.back

Une fois cette précaution prise, vous pouvez directement éditer le fichier sur le NAS avec le paquet Éditeur de texte.

Le fichier est touffu, il est construit de la sorte :
a) La première partie reprend la configuration de telegraf, je n'ai pas eu à y toucher dans mon cas. A noter, la variable flush_interval qui permet de définir à quelle fréquence les données sont récoltées.
b) Dans la partie "output plugins" c'est la section relative à InfluxDB qui nous intéresse, assurez-vous que les lignes non commentées correspondent à l'impression d'écran ci-après.

###############################################################################
#                            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://127.0.0.1:8086"]
    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 = "nas_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, 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 = "nas_telegraf"
    password = "nas_telegraf"

Notes :
- urls = ["http://influxdb:8086"] -> ici influxdb est le nom du container qu'on a créé (à adapter donc si vous l'avez nommé autrement), du fait que les containers seront dans le même réseau ils pourront se trouver par leur nom directement.
- database = "nas_telegraf" -> c'est le nom qu'on a donné à notre base de données lors de la création du container influxdb (variable d'environnement INFLUXDB_DB).
- skip_database_creation = true -> créée en même temps que le container influxdb, on peut régler cette option sur "true".
- Dans HTTP Basic Auth on entre le nom d'utilisateur et le mot de passe (respectivement les variables d'environnement INFLUXDB_USER et INFLUXDB_USER_PASSWORD), dans notre exemple : nas_telegraf / nas_telegraf

c) Il va falloir ajouter les infos relatives aux fichiers MIB de Synology, il suffit de copier ce qui est repris dans ce lien et le coller par exemple au début de la section "Input plugins"
Il faut cependant personnaliser les infos relatives à l'adresse IP du NAS et le nom de la communauté SNMP :

config_syno_telegraf.png.35f8440818017cea6269128e555a2ab9.png

Notes :
- On remplace agents = [  "xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx" ] par agents = [  "IP_LOCALE_DU_NAS" ]
- community = "public" à adapter suivant le nom de communauté choisi dans la partie I/ du tutoriel

Voilà, le fichier telegraf.conf est configuré, on télécharge (ou on écrit soi-même, au choix) le docker-compose (qu'on renomme, comme précédemment, et qu'on adapte au besoin) telegraf_docker-compose.yml

version: "2"
services:

    telegraf:
        image: telegraf
        container_name: telegraf
        hostname: telegraf
        volumes:
            - "/volume1/docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro"
            - "/proc:/host/proc:ro"
            - "/usr/share/snmp/mibs:/usr/share/snmp/mibs:ro"
        ports:
            - 8125:8125/udp
            - 8092:8092/udp
            - 8094:8094
        restart: unless-stopped
        
networks:
    default:
        external:
            name: data_export

Notes :
- Ne pas oublier d'adapter le chemin du fichier telegraf.conf à votre installation.
- Le suffixe ":ro" à la fin du montage de volume signifie read-only (lecture seule), pour éviter toute modification indésirable des fichiers.
- Les fichiers MIB de Synology sont déjà présents sur le NAS, on va donc monter le dossier pour que telegraf y ait accès.

Remarque :
Si vous surveillez votre infrastructure réseau depuis un serveur autre que votre NAS, vous aurez besoin des fichiers MIB de Synology, téléchargeables à cette adresse.

Telegraf va dorénavant envoyer périodiquement les métriques à InfluxDB, ce qu'on peut constater dans les logs de ce dernier :

image.thumb.png.aa1f59bd112f1148be0dfe5a35872b11.png

5/ Création du container grafana

Il ne reste plus qu'à configurer Grafana pour pouvoir représenter les données stockées dans InfluxDB.
Comme pour ce dernier, on crée un dossier data dans le dossier du container grafana.
Téléchargement du docker-compose :grafana_docker-compose.yml

version: "2"
services:

    grafana:
        image: grafana/grafana
        container_name: grafana
        hostname: grafana
        volumes:
            - "/volume1/docker/grafana/data:/var/lib/grafana"
        user: "1026"
        ports:
            - 3000:3000
        restart: unless-stopped
        
networks:
    default:
        external:
            name: data_export

Notes :
- Grafana est exposé sur le port 3000 du container, j'ai choisi ce même port pour mon NAS, dans le cas où vous souhaitez accéder de l'extérieur à votre instance Grafana, pensez à soit ouvrir le port dans le pare-feu, soit créer une entrée dans le proxy inversé.
- le "1026" représente l'UID de l'utilisateur qui exécute le container, ça correspond ici à mon compte admin, il est possible de choisir un autre utilisateur, attention toutefois au propriétaire du dossier grafana et grafana/data, il peut y avoir des problèmes de droits s'ils ne correspondent pas. Pour connaître l'id d'un utilisateur on se connecte en SSH et on tape :

id nom_utilisateur

C'est la valeur "uid" qui nous intéresse.

IV/ Configuration de Grafana

On se rend sur la page http://IP_DU_NAS:3000 (ou le port qu'on a choisi) pour accéder à Grafana :

image.png.febf11578ea71e9b2d10768053ce3ced.png

Les accès par défaut sont admin/admin, la première fois qu'on se connecte on nous invite à changer le mot de passe du compte admin.

image.thumb.png.8109c326f1fcb0417a08585bb9aa9f2e.png

On suit les indications de Grafana et on commence par ajouter la source de données, ici notre container InfluxDB. On clique sur Add data source. On choisit InfluxDB.

On remplit ensuite l'écran suivant de la sorte :

grafana_nas_datasource.thumb.PNG.d5b1b8f4c4b6cc7a261dbb3f74748bfd.PNG

Notes :
- On donne un nom à notre datasource, ici j'ai choisi NAS_InfluxDB.
- influxdb dans http://influxdb:8086 représente le nom que vous avez donné au container.
- On coche Basic Auth car on a activé l'authentification http à la création du container influxdb.
- Les informations à entrer dans "InfluxDB Details" correspondent aux paramètres d'environnement du container influxdb :

* Database : INFLUXDB_DB
* User : INFLUXDB_USER
* Password : INFLUXDB_USER_PASSWORD

- Basic Auth Details :
* User INFLUXDB_USER
* Password : INFLUXDB_USER_PASSWORD

On clique sur Save & Test, on obtient un message écrit en vert Datasource is working si tout est bien paramétré.

V/ Création d'une dashboard

On peut soit créer sa propre dashboard, soit en importer une, pour cela il suffit d'aller sur le site de Grafana, plus précisément sur cette page.
En tapant Synology dans le cadre de recherche, on peut par exemple choisir la dashboard de Yann Bizeul.

image.thumb.png.47050d1a31da57f74ca3d1f232b5224b.png

On clique sur "Copy ID to Clipboard", on retourne sur notre instance de Grafana et on clique sur import dans le menu rapide à la gauche de l'écran :

dashboard.png.ba03b088507db5351bd19b81660554a4.png

Dans l'écran suivant on colle dans "Grafana.com dashboard" le numéro de la dashboard qu'on a choisie.
On valide en cliquant sur "Load" et on arrive sur l'écran suivant :

import_synology_dashboard.thumb.PNG.cce9b6f701e0ef93a6c64b95ebd99edb.PNG

Dans InfluxDB on choisit la datasource définie ci-avant, on valide en cliquant sur "Import".

Si tout est opérationnel on a normalement une dashboard qui devrait afficher les données textes, et avoir déjà tracé des débuts de courbe. Suivant si vous avez changé l'intervalle de collecte de Telegraf, vous disposez déjà de plus ou moins de points.

VI/ Monitorer Docker

La manipulation est très simple, dans le fichier telegraf.conf, il suffit de décommenter les options qui nous intéressent.
Dans mon cas j'ai utilisé le socket unix, car je vise l'instance docker du NAS tournant sur la machine hôte.
Si vous avez d'autres machines faisant tourner Docker, vous pouvez les monitorer en exposant un endpoint sur le réseau via un port TCP depuis la machine hôte.
Il y a possibilité de trier les containers sont on souhaite réaliser la surveillance suivant différents critères : nom, état, label...
Egalement, la possibilité de définir des variables d'environnement communes à différents containers comme tag pour Grafana.

# # Read metrics about docker containers
  [[inputs.docker]]
#   ## Docker Endpoint
#   ##   To use TCP, set endpoint = "tcp://[ip]:[port]"
#   ##   To use environment variables (ie, docker-machine), set endpoint = "ENV"
    endpoint = "unix:///var/run/docker.sock"
#
#   ## Set to true to collect Swarm metrics(desired_replicas, running_replicas)
#   gather_services = false
#
#   ## Only collect metrics for these containers, collect all if empty
    container_names = []
#
#   ## Containers to include and exclude. Globs accepted.
#   ## Note that an empty array for both will include all containers
#   container_name_include = []
#   container_name_exclude = []
#
#   ## Container states to include and exclude. Globs accepted.
#   ## When empty only containers in the "running" state will be captured.
#   # container_state_include = []
#   # container_state_exclude = []
#
#   ## Timeout for docker list, info, and stats commands
    timeout = "5s"
#
#   ## Whether to report for each container per-device blkio (8:0, 8:1...) and
#   ## network (eth0, eth1, ...) stats or not
    perdevice = true
#   ## Whether to report for each container total blkio and network stats or not
    total = false
#   ## Which environment variables should we use as a tag
#   ##tag_env = ["JAVA_HOME", "HEAP_SIZE"]
#
#   ## docker labels to include and exclude as tags.  Globs accepted.
#   ## Note that an empty array for both will include all labels as tags
#   docker_label_include = []
#   docker_label_exclude = []
#
#   ## Optional TLS Config
#   # tls_ca = "/etc/telegraf/ca.pem"
#   # tls_cert = "/etc/telegraf/cert.pem"
#   # tls_key = "/etc/telegraf/key.pem"
#   ## Use TLS but skip chain & host verification
#   # insecure_skip_verify = false

Pour que cela fonctionne, il faut qu'on donne accès au fichier docker.sock à telegraf, il suffit de rajouter dans le docker-compose de telegraf le volume suivant :

- "/var/run/docker.sock:/var/run/docker.sock:ro"

On relance  le container, en SSH via la commande suivante :

docker restart telegraf

Ou directement par l'UI de Docker dans Synology.

VI/ Monitorer un Raspberry

Le même schéma doit être respecté : telegraf va agréger les données, influxdb les stocker, grafana les exploiter.
Dans mon cas, j'ai choisi de continuer à utiliser l'instance influxdb sur le NAS et avoir une instance de telegraf sur le raspberry, pourquoi ? Pour ceux qui ont mis en place le monitoring, vous aurez pu remarquer qu'influxdb est friand de mémoire vive.
Donc autant limiter la charge sur le raspberry, dont les performances ne sont pas le premier atout.
J'utilise Raspbian Stretch comme distribution, mais le tutoriel doit être valable a minima pour toute distribution basée sur Debian.

1/ Installation de telegraf

Pour l'installation j'ai choisi de passer par Docker, mais il est tout à fait possible de passer par une installation directe (via apt), si l'idée est très similaire les chemins de fichier et commande ne seront en revanche pas les mêmes.
Si Docker n'est pas installé sur le raspberry pi, voici un tutoriel permettant de le faire https://iotbytes.wordpress.com/setting-up-docker-on-raspberry-pi-and-running-hello-world-container/
(NOTE : si vous n'avez pas activé l'accès SSH sur votre raspberry, c'est une option à cocher sur le bureau, le service SSH est désactivé par défaut à l'installation depuis 2016, voir guide ici.)
Une fois Docker installé on se connecte en SSH sur son raspberry sur l'utilisateur qu'on a ajouté au groupe docker (voir tuto ci-dessus).

On télécharge l'image de telegraf :

docker pull telegraf

Comme précédemment on va créer un dossier dans lequel stocker notre fichier telegraf.conf, pour le tuto j'ai choisi d'utiliser le dossier personnel de mon utilisateur "pi" :

cd
mkdir docker
cd docker
mkdir telegraf

Pour générer le fichier telegraf.conf, on peut soit utiliser la commande qu'on avait utilisé sur le NAS :

cd /home/pi/docker/telegraf
docker run --rm telegraf telegraf config > telegraf.conf

Ou on le télécharge ici telegraf.conf

Une fois le fichier de configuration généré, on va créer le container, si vous avez également installer docker-compose sur votre raspberry, on peut utiliser le fichier suivant telegraf_raspi_docker-compose.yml

version: "2"
services:

    telegraf:
        image: telegraf
        container_name: telegraf
        hostname: raspberrypi
        volumes:
            - "/home/pi/docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro"
            - "/proc:/host/proc:ro"
        ports:
            - 8125:8125/udp
            - 8092:8092/udp
            - 8094:8094
        restart: unless-stopped

Plus que probablement docker-compose n'est pas installé, ce n'est pas inclus de base dans la distribution, il suffit dans ce cas-là de taper la commande suivante en SSH :

docker create --name telegraf --restart=unless-stopped --hostname=raspberrypi -p 8125:8125/udp -p 8092:8092/udp -p 8094:8094 -v /home/pi/docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf -v /proc:/host/proc:ro telegraf:latest

Si le container s'est créé sans erreur, vous devriez voir un code à rallonge, c'est son ID.

Pour l'instant on ne démarre pas le container, il va falloir créer la base de données dans laquelle stocker nos informations.

2/ Création de la base de données

Rappelez-vous, sur le NAS nous avions précisé dans le fichier telegraf.conf un nom de bdd à utiliser, ainsi que les données d'identification pour les droits d'écriture.
Cette base de données avait été créée à la création du container influxdb, donc il n'y avait rien eu à configurer manuellement. Ici on va stocker les données dans une bdd séparée, donc il va falloir créer un nouvel utilisateur, et une nouvelle bdd.
Pour cela il faut se connecter directement dans le container influxdb du NAS. Donc retour en SSH sur celui-ci.

On se connecte en root et on entre la commande suivante :

docker exec -it influxdb influx -username admin -password admin

Notes :

docker exec -it influxdb permet la connexion au container influxdb, influx c'est la commande ouvrant la base de données, si on avait écrit bash à la place on serait arrivé sur l'invite de commande propre au container et on aurait pu écrire influx pour faire la même chose, mais en plus long. 😛 
Vu qu'on a activé l'authentification HTTP dans notre container, si on ne précise rien à la connexion, toute tentative de modification se soldera pas un échec dû à un défaut de permission. De plus, vu qu'on souhaite créer de nouveaux éléments, il faut que le compte utilisé ait les pouvoirs d'administration. Il faut donc préciser les données d'authentification au lancement de la commande influx. Ces données sont celles que l'on avait renseignées à la création du container InfluxDB, dans le tutoriel on a choisi admin/admin comme username/password.

image.png.7967b8c2f3037bf4e615fae925621b51.png

Première étape : on crée la base de données, il suffit de taper la commande suivante :

CREATE DATABASE raspi_telegraf

puis on sélectionne la base de données qu'on vient juste de créer :

USE raspi_telegraf

On crée maintenant l'utilisateur dédié au raspberry :

CREATE USER raspi_telegraf WITH PASSWORD 'raspi_telegraf'

Notes :
Ne pas oublier les guillemets autour du mot de passe.
- Si on s'est trompé dans l'écriture, il est toujours possible de supprimer un utilisateur ou une base de données avec les commandes DROP USER nom_utilisateur et DROP DATABASE nom_bdd.

On peut vérifier à ce stade que tout se passe bien, il suffit de taper les commandes SHOW DATABASES et SHOW USERS :

users_databases_ssh.PNG.09216c770f02df03f41169a4d1230e17.PNG

La dernière étape consiste à donner des droits à notre utilisateur raspi_telegraf sur la bdd du même nom, ce qui se fait par la commande :

GRANT ALL ON raspi_telegraf TO raspi_telegraf

On relance le container pour s'assurer que les modifications ont été prises en compte :

docker restart influxdb

On peut maintenant quitter la session SSH sur le NAS et revenir sur celle du raspberry.

A ce stade, notre base de données est prête à l'emploi, il suffit maintenant de renseigner dans notre fichier telegraf.conf sur le raspberry les données d'exportation vers influxdb sur le NAS.
On peut le faire avec la commande nano ou vi :

cd /home/pi/docker/telegraf
nano telegraf.conf

 

###############################################################################
#                            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://127.0.0.1:8086"]
    urls = ["http://192.168.0.51:8086"]

  ## The target database for metrics; will be created as needed.
  ## For UDP url endpoint database needs to be configured on server side.
    database = "raspi_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, 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 = "5s"

  ## HTTP Basic Auth
    username = "raspi_telegraf"
    password = "raspi_telegraf"

Notes :
- Dans urls, on doit entrer l'adresse IP locale du NAS (ou son nom NetBios), et préciser le port sur lequel influxdb est exposé, par défaut 8086 dans notre installation précédente.
- On pense bien à préciser le nom de la base de données dans database et les login/password de notre utlisateur dans la partie HTTP Basic Auth.
- On passe skip_database_creation à true.

Tout est maintenant configuré sur le raspberry, il suffit de lancer le container telegraf :

docker start telegraf

si on utilise les lignes de commande ou bien se placer dans le dossier telegraf et lancer la commande suivante :

docker-compose up -d

si on utilise docker-compose.

Si tout a bien marché, en regardant les logs du container influxdb on doit voir quelque chose ainsi :

logs_nas_pi_influx.thumb.PNG.392bdb6ab115024810072af00af90002.PNG

On remarque bien deux envois, un venant de 172.22.0.2 correspondant à l'IP du container telegraf sur le NAS, un venant de 172.22.0.1, le NAS, servant de passerelle au raspberry pour accéder à notre instance d'influxdb.

3/ Ajout d'une source de données sur Grafana

Direction Grafana => panneau latéral Configuration (roue dentée) => Datasources
On clique sur Add data source

grafana_raspi_datasource.thumb.PNG.6c75b3828f2c880ba2a1d92013c04577.PNG

On valide, si tout a bien été configuré, on verra le message "Datasource is working" apparaître en vert au moment du clic.

4/ Création de graphiques

Il s'agit juste ici de vérifier que les données sont accessibles :

image.png.071191c70f249fb0598be5b368008786.png

Ici j'ai créé un graphique pour suivre l'état d'utilisation de la mémoire vive :
- On notera le choix de la datasource relative au raspberry.
- Dans la liste "host" vous devriez voir le nom que vous avez précisé dans le champ hostname du script de création du container. Si on ne l'avait pas précisé, on aurait eu une chaîne de chiffres et de lettres aléatoires, moins lisible par la suite. 😉 

VI/ Monitorer une Fritz!box

A venir...

MàJ : 28/07/2019

Modifié par shadowking
Corrections fichiers joints

Partager ce message


Lien à poster
Partager sur d’autres sites

J’ai testé vive fait, mais telegraf (cela a pas changer depuis ?) a du mal avec les mib du synology.

Je vais voir à mettre un équivalent en place, sa peut être utile vue tout ce que j’ai chez moi qui tourne.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai reproduit le tuto en repartant de rien de mon côté, pour être certain que c'était faisable, j'ai corrigé pas mal de petites choses, n'hésite pas à réessayer, il se peut que tu aies suivi de mauvaises directives de ma part (notamment la partie HTTP AUTHENTICATION).

Je laisse temporairement de côté la partie ajouter d'autres équipements réseaux, j'ai trouvé des pistes intéressantes mais ça nécessite que j'y consacre du temps avant de les mettre dans un tutoriel.

En équivalent il y a LibreNMS, tout-en-un, mais qui je trouve offre moins de possibilités.

Modifié par shadowking

Partager ce message


Lien à poster
Partager sur d’autres sites

Bravo pour ce tuto qui a l'air bien détaillé 😉

J'avais un soucis pour faire discuter les containers avec ce qui se passait sur le NAS, je vais pouvoir corriger ça 🙂

Merci !

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

Merci pour ce beau tuto 👍

Est-ce qu'il y a possibilité de suivre l'état des sauvegardes  et réplications de cette façon  ?
De souvenir, il me semble que SNMP ne le permettait pas sur Synology mais ça a peut-être changé depuis... Je suis preneur de l'info 🙂 

Partager ce message


Lien à poster
Partager sur d’autres sites

Vérifie que tu n'as pas mis de tabulation dans ton fichier docker-compose, ça paraît bête mais ce sont des espaces qu'il faut mettre...
Parallèlement, je t'envoie mon fichier docker-compose.yml par MP.

Ca a peut-être un rapport aussi avec la variable locale, ce que j'ai moi :

image.png.985c8fbf512d0e1b5f2b25ad79d35033.png

Modifié par shadowking

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai bien des espaces et non tabulations pourtant. Je l'ai même réécrit manuellement dans un nouveau fichier pour tester. J'utilise Sublimetext 3. Peut-être que le soucis vient de ce dernier ou comme je te l'ai dit par MP, des lettres cachées dans ton code.

Ça m'est déjà arrivé sur un tuto que j'avais fait sur le forum avec un script SSH qui ne passait pas quand on le copier coller du forum.

J'avais du le modifier pour m'apercevoir que des lettres étaient cachées.

Merci en tout cas pour le fichier par MP.

Sinon, j'ai ça avec la commande locale :

kiO2BJ7.png

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai pas pensé qu'en insérant du code via la balise code ça pourrait poser problème effectivement.
J'ai réécrit les fichiers docker-compose.yml pour les besoins du tutoriel, et ça a marché, donc le conseil que je peux vous donner c'est de les écrire manuellement (l'avantage de docker-compose c'est que vous n'aurez plus à le refaire) en suivant la procédure que j'ai proposée pour ceux qui auraient des soucis d'exécution.
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon alors comme dit en MP à Shadowking, mon soucis venait de Sublime Text 3. C'est lui qui faisait que mes fichiers étaient erronés.

En les créant avec un autre programme, les containers se sont créés sans poser de soucis.

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 5 heures, _Megalegomane_ a dit :

Bonjour,

Merci pour ce beau tuto 👍

Est-ce qu'il y a possibilité de suivre l'état des sauvegardes  et réplications de cette façon  ?
De souvenir, il me semble que SNMP ne le permettait pas sur Synology mais ça a peut-être changé depuis... Je suis preneur de l'info 🙂 

Je ne pense pas que ce soit possible.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, je reviens donner des nouvelles. Ça ne fonctionne pas de mon côté mais je ne vois pas pourquoi 🙄

L'erreur qui je pense devrai s'afficher en bas de la configuration de la source ne s'affiche pas correctement.

Est-ce qu'il y a des journaux dans Grafana afin de voir les erreurs svp ?

Parce que ça m'affiche ça quand je valide la configuration alors que je suis sûr de ce qui est inscrit :

NfJxYKM.png

 

Et ça dans général :

mJCDyUd.png

 

J'en profite pour revenir sur le soucis que j'ai eu avec mes fichiers docker-compose. Je confirme bien qu'il y a des caractères cachés. Est-ce du au navigateur, forum, autres, je ne sais pas.

Exemple avec le code qu'il faut placer dans le fichier .conf de telegraf.

Voici une capture d'écran d'un copier coller simple dans le fichier :

C'est bien parce que l'éditeur intégré de DSM m'interpelle directement en me mettant en surbrillance le soucis.

oaYXHie.png

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai modifié le lien vers GitHub pour les stats du Syno pour Telegraf avec la version RAW du texte directement.
J'ai oublié de préciser qu'on ne copie/colle pas directement depuis la page, c'est vrai que ce n'est pas évident.

Est-ce que tu as déjà bien Influx qui reçoit les données de Telegraf ?
Copie des logs de Influx chez moi :

image.thumb.png.8ddb44422b547fbc56639d1fb006704e.png

Partager ce message


Lien à poster
Partager sur d’autres sites

Ça a l'air d'être bon de ce côté là :

 

2JJttbG.png

 

Par contre, côté telegraf, j'ai ça dans les logs :

Bien entendu, je suis certain de l'IP locale de mon NAS qui est bien 192.168.10.100 😤

JLc2LvP.png

Modifié par Zeus

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 01/06/2019 à 15:05, shadowking a dit :

J'ai reproduit le tuto en repartant de rien de mon côté, pour être certain que c'était faisable, j'ai corrigé pas mal de petites choses, n'hésite pas à réessayer, il se peut que tu aies suivi de mauvaises directives de ma part (notamment la partie HTTP AUTHENTICATION).

Je laisse temporairement de côté la partie ajouter d'autres équipements réseaux, j'ai trouvé des pistes intéressantes mais ça nécessite que j'y consacre du temps avant de les mettre dans un tutoriel.

En équivalent il y a LibreNMS, tout-en-un, mais qui je trouve offre moins de possibilités.

Effectivement un caractère à la con, en regardant les logs sa va mieux xD

Sinon on a pas tous envies de passé par docker compose et de donné des droits un peu superflus... ("/proc:/host/proc:ro" et "/usr/share/snmp/mibs:/usr/share/snmp/mibs:ro")

Il suffit juste de faire un cp des tous les mibs du nas (/usr/share/snmp/mibs) et d’en faire le point de montage ensuite.

Partager ce message


Lien à poster
Partager sur d’autres sites
Citation

Il suffit juste de faire un cp des tous les mibs du nas (/usr/share/snmp/mibs) et d’en faire le point de montage ensuite.

C'est ce que j'avais fait et j'ai mit la variable dans le docker compose.

Par contre, j'ai pas touché à /proc

Bon, j'ai toujours ce soucis sur telegraf et je comprend vraiment pas pourquoi il ne veut pas de mon IP.

J'ai testé d'autres IP ou domaine comme localhost et j'ai aussi essayé avec le port :161 mais rien n'y fait.

Partager ce message


Lien à poster
Partager sur d’autres sites
Citation

Moi il c’est via interface, qu’en le réseau par défaut en bridge

🤔

Tu peux répéter stp 😂

J'ai essayé avec 172.17.0.1 et ça passe pas non plus.

Modifié par Zeus

Partager ce message


Lien à poster
Partager sur d’autres sites

Non, tu avais raison en faite, ça fonctionne avec 172.17.0.1 comme IP. J'ai recréer le container telegraf parce qu'un redémarrage ne suffisait pas et direct ça fonctionnait.

Bon par contre, l'affichage des infos est limité. Je vais me renseigner pour en ajouter.

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 3 heures, Einsteinium a dit :

Effectivement un caractère à la con, en regardant les logs sa va mieux xD

Sinon on a pas tous envies de passé par docker compose et de donné des droits un peu superflus... ("/proc:/host/proc:ro" et "/usr/share/snmp/mibs:/usr/share/snmp/mibs:ro")

Il suffit juste de faire un cp des tous les mibs du nas (/usr/share/snmp/mibs) et d’en faire le point de montage ensuite.

@Einsteinium
Docker-compose c'est tout sauf obligatoire en effet, c'est juste que je trouve ça quand même plus pratique que de la ligne de commande ou que l'interface de Docker sur DSM, donc autant l'expliquer pour ceux que ça intéresse.
LIbre à chacun de faire comme il l'entend. 😄
Quant aux MIBs oui tu peux faire ça, seulement en cas de mise à jour des fichiers par Syno tu ne bénéficieras pas des ajouts/changements éventuels.
De plus, le volume est monté en lecture seule, ça limite l'exposition des fichiers système.
Pour le host/proc:ro, il est précisé dans la doc officielle de telegraf que c'est requis, je ne me suis pas posé plus que ça la question je dois t'avouer... si ça marche sans tant mieux !

@Zeus
Tant mieux si tu as résolu ton problème, d'après les logs j'ai l'impression que telegraf n'arrivait pas à voir ton NAS, avais-tu autorisé les adresses 172.16.0.0/255.240.0.0 dans ton pare-feu pour tous les ports ? Telegraf communique via le port 161 par défaut avec l'hôte. Et en effet, dans chaque réseau docker, le 172.xx.0.1 est ton hôte, donc ça ne m'étonne pas que ça marche aussi ainsi, et c'est même mieux je dirais, car si l'IP de ton NAS devait changer, ça n'aurait aucune répercussion sur la configuration de Telegraf. 😉

Modifié par shadowking

Partager ce message


Lien à poster
Partager sur d’autres sites
Citation

Docker-compose c'est tout sauf obligatoire en effet, c'est juste que je trouve ça quand même plus pratique que de la ligne de commande ou que l'interface de Docker sur DSM, donc autant l'expliquer pour ceux que ça intéresse.

Mouais. J'aime la ligne de commande mais pour moi ça se discute. Là, en l’occurrence, faut avouer que l'interface Docker dans DSM va plus vite que de taper manuellement un fichier docker-compose.

Citation

Quant aux MIBs oui tu peux faire ça, seulement en cas de mise à jour des fichiers par Syno tu ne bénéficieras pas des ajouts/changements éventuels.

Au pire, un petit script qui copie par exemple à chaque redémarrage du NAS les fichiers au bon endroit et voilà 😉

Je le fais déjà personnellement pour les fichiers erreurs html de WebStation.

Citation

Tant mieux si tu as résolu ton problème, d'après les logs j'ai l'impression que telegraf n'arrivait pas à voir ton NAS, avais-tu autorisé les adresses 172.16.0.0/255.240.0.0 dans ton pare-feu pour tous les ports ?

Oui oui, j'ai bien les règles dans mon pare feu. Sauf que l'agent n'était pas l'IP de mon NAS mais l'IP " 172.17.0.1 " du réseau bridge de Docker ce qui est étonnant puisque mes trois containers sont bien dans un réseau créé pour l'occasion qui lui a l'IP "172.19.0.0". Bref, à ne rien y comprendre pour ma part.

 

Par hasard, la copie d'écran de Grafana sur ton tuto vient de toi ? Parce que moi, j'ai pratiquement rien en informations sur l'écran. L'UPS, c'est normal car il est connecté sur un autre serveur mais par exemple, je n'ai pas les statistiques sur le stockage du volume ou encore l'uptime. Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Non ce n'est pas ma capture d'écran, voici la mienne :

image.thumb.png.271bc789b1896d79cf99b6ab681a34e7.png

image.thumb.png.45e71f42c817f949582fe0b109043442.png

Pour l'UPS, je n'ai pas réussi à récupérer les métriques, visiblement telegraf ne collecte rien à ce sujet, alors que les MIBs le prévoient. Après quelques recherches, je ne suis pas le seul dans ce cas, mais aucun début de solution de mon côté, donc je l'ai sorti des graph.

il y a 11 minutes, Einsteinium a dit :

@shadowking Tu devrais proposé aussi en version graphique pour les néophytes ou ceux qui comme moi aime bien la version graphique (pour une fois que synology nous fait quelque chose de bien)

Je verrai à faire ça quand j'ai le temps oui, je comprends.

Partager ce message


Lien à poster
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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.

Chargement