Aller au contenu

[TUTO] Monitoring réseau (Telegraf + InfluxDB 1.8 + Grafana)


.Shad.

Messages recommandés

@.Shad.

Bonjour,

Bon, j'avance à petits pas mais j'avance. J'ai réussi à faire prendre en compte mon fichier MIB HIKvision (HIK-DEVICE-MIB.txt).

IL suffisait simplement de :

  • le placer dans le répertoire standard "/usr/share/snmp/mibs" (en espérant qu'il ne sera pas effacé lors d'une mise à jour de DSM !),
  • et de créer un fichier "snmp.conf" dans "/etc/snmp" et contenant une ligne du type "mibs +HIK-DEVICE-MIB"

Au moins avec cela, je n'ai plus de messages d'erreur au lancement du conteneur "telegraf". C'est déjà cela !

Maintenant le problème est que dans grafana, au moment de bâtir une requête, je ne vois pas la table spécifique à HIKvision ni les champs associés. Tout semble se passer un peu comme si l'ajout de ces champs dans le fichier "telegraf.conf" n'était lui pas pris en compte.

Citation

#----------------------------------------------------------
## HIKVISION IP Camera
#----------------------------------------------------------
    # Uses the HIK-DEVICE-MIB
[[inputs.snmp]]
  agents = [  "192.168.2.21", "192.168.2.22", "192.168.2.23", "192.168.2.24" ]
  interval = "60s"
  timeout = "10s"
  retries = 3
  version = 2
  community = "xxxxxxxxxxxxx"
  max_repetitions = 30
  name = "snmp.HIK"
    
    # HIK Manufacturer
  [[inputs.snmp.field]]
    name = "manufacturer"
    oid = "HIK-DEVICE-MIB::manufacturer.0"
    # HIK Device Model
  [[inputs.snmp.field]]
    name = "deviceModel"
    oid = "HIK-DEVICE-MIB::deviceType.0"
    # HIK Version Software
  [[inputs.snmp.field]]
    name = "softwVersion"
    oid = "HIK-DEVICE-MIB::softwVersion.0"
    # HIK Cpu Precent
  [[inputs.snmp.field]]
    name="cpuPercent"
    oid = "HIK-DEVICE-MIB::cpuPercent.0"
    # HIK Mem Used
  [[inputs.snmp.field]]
    name="memUsed"
    oid = "HIK-DEVICE-MIB::memUsed.0"
    # HIK Static Ip
  [[inputs.snmp.field]]
    name="staticIp"
    oid = "HIK-DEVICE-MIB::staticIpAddr.0"
    # HIK MAC Address
  [[inputs.snmp.field]]
    name="macAddr"
    oid = "HIK-DEVICE-MIB::macAddr.0"
    # HIK Video Encode
  [[inputs.snmp.field]]
    name="vidEncode"
    oid = "HIK-DEVICE-MIB::videoEncode.0"
 
  [[processors.regex]]
    order = 1
    namepass = ["snmp"]
    [[processors.regex.fields]]
      key = "cpuPercent"
      pattern = "^(\\d+).*"
      replacement = "${1}"
    [[processors.regex.fields]]
      key = "memUsed"
      pattern = "^(\\d+).*"
      replacement = "${1}"
    
  [[processors.converter]]
    order = 2
    [processors.converter.fields]
      integer = ["cpuPercent","memUsed"]

Stucturellement parlant, je ne vois pas de différences notoires avec les autres champs liés à Synology. Du coup je sèche et ne comprends pas ce qui et où cela pourrait bloquer.

Une nouvelle idée de génie de ta part serait la bienvenue ...😀

Cordialement

oracle7😉

 

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

@.Shad.

Bonjour,

Oui, j'avais remarqué et je l'ai corrigé de moi même. Donc ce que j'ai fait ne serais pas bon selon toi ?.

Je le reprends ci-dessous en exagérant l'indentation :

Citation

 [[inputs.snmp]]

......

        [[processors.regex]]
              order = 1
              namepass = ["snmp"]
              [[processors.regex.fields]]
                    key = "cpuPercent"
                    pattern = "^(\\d+).*"
                    replacement = "${1}"
              [[processors.regex.fields]]
                    key = "memUsed"
                    pattern = "^(\\d+).*"
                    replacement = "${1}"
      
      [[processors.converter]]
              order = 2
              [processors.converter.fields]
                     integer = ["cpuPercent","memUsed"]

C'est bon ou pas ?

En plus je m’aperçois qu'il manquerait une paire de [ ] à l'avant dernière ligne .

Cordialement

oracle7😉

Lien vers le commentaire
Partager sur d’autres sites

@.Shad.

Non tu n'est pas "bigleux", c'est moi qui ce soir n'ai pas les yeux en face des trous ... 🤪

J'ai donc corrigé comme dans ton lien même si l'indentation donnée ne me paraît pas logique.

Cela dit j'avais cru aussi bien faire en reprenant cet exemple ici qui me semblait lui tout à fait cohérent du point de vue indentation. Ton avis ?

En tous cas, le fichier telegraf.conf se charge bien, pas d'erreurs dans le log telegraf mais toujours pas de table et de champs correspondants pour bâtir une requête dans grafana. Il doit donc y avoir autre chose à régler mais quoi ?

Cordialement

oracle7😉

Lien vers le commentaire
Partager sur d’autres sites

@.Shad.

Bonjour,

Je m'arrache les cheveux (déjà qu'il n'y en a plus beaucoup ...🤪) avec les processors.regex et processors.convert.

Je n'arrive pas à traduire et convertir correctement la chaine "XX PERCENT" pour en extraire le "XX" et convertir ce dernier en Integer. Pour info, j'ai un champ "memUsed" qui comporte comme valeurs des "XX PERCENT" au lieu de valeurs numérique "XX" exprimées en "%".

Le code suivant ne fonctionne pas et génère des "panic" dans telegraf dès que l'on active la partie [[proccessors.converter]].

Citation

[[processors.regex]]
     order = 1
     namepass = ["snmp"]
     [[processors.regex.fields]]
           key = "cpuPercent"
           pattern = "^(\\d+).*"
           replacement = "${1}"
     [[processors.regex.fields]]
           key = "memUsed"
           pattern = "^(\\d+).*"
           replacement = "${1}"

[[processors.converter]]
     order = 2
     [processors.converter.fields]
           integer = ["cpuPercent","memUsed"]

Sans cette partie [[proccessors.converter]] il n'y a pas d'erreur dans le log de telegraf.

J'en conclue donc que la valeur extraite par [[proccessors.regex]] n'est pas une chaine qui peut être ensuite convertie en Integer.

Du coup, je met en doute le "pattern" utilisé : "^(\\d+).*" pour ce faire.

Faut-il finalement un autre "pattern" pour arriver à extraire la bonne valeur ?

J'ai essayé tout à tour : "^(\\d\\d)", "^(\\d{1,2})", "^(\\d{1,2})?", "^(\\d+)?" mais toujours le message le même message :

Citation

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0x1f94624]

github.com/influxdata/telegraf/plugins/processors/converter.(*Converter).Apply(0xc00056bfb0, 0xc0001937e0, 0x1, 0x1, 0xc00021fd40, 0x1, 0xc000206900)
        /go/src/github.com/influxdata/telegraf/plugins/processors/converter/converter.go:86 +0x9c

Je ne sais plus par quel bout prendre les choses.

Une idée pour me débloquer ?

Cordialement

oracle7😉

 

Lien vers le commentaire
Partager sur d’autres sites

@.Shad.

Bonjour,

En fait je ne m'emm... plus avec le processor.regex.

Je passe par ceci :

Citation

[[processors.strings]]
  order = 1
  namepass = "snmp"
  [[processors.strings.left]]
    field = "cpuPercent"
    width = 2
  [[processors.strings.trim]]
    field = "cpuPercent"
  [[processors.strings.left]]
    field = "memUsed"
    width = 2
  [[processors.strings.trim]]
    field = "memUsed"
[[processors.converter]]
  order = 2
  [processors.converter.fields]
    integer = ["cpuPercent","memUsed"]

Quand je test le fichier telegraf.conf la conversion se fait bien :

Citation

> snmp.HIK,agent_host=192.168.2.21,host=telegraf cpuPercent=68i,deviceID="1",deviceModel="DS-2CD2045FWD-I",dynIpAddr="192.168.2.21",macAddr="xx-xx-xx-xx-xx-xx",manufacturer="Hikvision",memUsed=57i,restartDev=0i,softwVersion="V5.6.5 build 200316",staticIpAddr="0.0.0.0",vidEncode="H.264" 1603309406000000000

On voit bien que les deux champs retournent bien chacun une valeur numérique entière et non plus une string "68 PERCENT" ou "57 PERCENT" comme initialement.

Maintenant le problème est que la BdD a été créée avec pour ces champs un type "string" et du coup cela génère ce type d'erreur :

Citation

2020-10-21T20:03:04Z E! [outputs.influxdb] When writing to [http://172.20.0.2:8086]: received error partial write: field type conflict: input field "cpuPercent" on measurement "snmp.HIK" is type integer, already exists as type string dropped=4; discarding points
2020-10-21T20:04:04Z E! [outputs.influxdb] When writing to [http://172.20.0.2:8086]: received error partial write: field type conflict: input field "memUsed" on measurement "snmp.HIK" is type integer, already exists as type string dropped=4; discarding points

Donc je me dis que si je supprime la BdD et que je la recrée en même temps que je recrée les conteneurs influxdb, telegraf et grafana, je ne sais pas alors sur quoi influxdb se base pour créer les tables et champs de cette base. Est-ce que ce sont les fichiers MIB ou autre chose mais alors quoi ? Je voudrais être sûr que pour les deux champs en question, ils soient créés avec le type Integer et non pas String. Si c'est le sur le fichier MIB alors c'est facile à corriger mais j'ai bien peur que la solution ne soit pas aussi simple que cela. Ton avis STP ?

Par un heureux hasard, tu n'aurais pas encore une idée géniale en magasin ?

EDIT : EN fait, j'ai trouvé tout seul comme un grand !🤪 enfin presque ...

J'ai tout simplement fait, après avoir arrêté telegraf, un "DROP MEASUREMENT" sur la table qui contient les données de mes caméras. Ensuite j'ai relancé telegraf et là BINGO !!! j'ai bien maintenant mes deux champs numériques.

Cordialement

oracle7😉

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

  • 1 mois après...

@JrTt

Bonjour,

il y a 10 minutes, JrTt a dit :

par contre arrive tu a monitorer les débits sur le Wan

Non pas encore. De toutes façons les MIB mises à disposition par Synology ne comportent pas à ma connaissances les champs liès aux données sur le WAN. Donc oublies de ce coté là.

Je crois (sous réserves) que @bruno78 monitore directement les interfaces LAN de sa FreeBox. Il pourrait te confirmer ce qu'il arrive à faire pour l'interface WAN de celle-ci.

Pour ma part, je suis en recherche d'infos pour essayer de faire pareil que lui mais cette fois avec une LiveBox4 d'Orange. Et là c'est dur dur de trouver de l'info qui soit compréhensible pour ma petite tête. Orange n'est pas non plus très prolixe sur le sujet.

Désolé de ne pouvoir t'en dire plus.

PS Astuce : Pour avertir un membre de ta réponse, tu tapes dans ton message "@" + les premiers caractères de son pseudo. Dans le popup qui apparaît tu cliques alors sur le pseudo recherché et il s'affiche sur fond bleu dans ton texte. Ainsi ton interlocuteur est informé/notifié de ta réponse sinon il ne voit rien sauf à rebalayer en arrière tous les messages (ce que peu de monde fait).

Cordialement

oracle7😉

Lien vers le commentaire
Partager sur d’autres sites

à l’instant, .Shad. a dit :

Les MIB ne sont pas forcément nécessaires, ils permettent d'organiser les OID.
Si la Livebox est "pollable" via SNMP, les informations sont tout aussi accessibles, mais c'est bien plus fastidieux d'identifier chaque valeur. 😉 

Haaa, mais là ça va dépasser mes compétences 🤪

Lien vers le commentaire
Partager sur d’autres sites

il y a 21 minutes, .Shad. a dit :

Les MIB ne sont pas forcément nécessaires, ils permettent d'organiser les OID.
Si la Livebox est "pollable" via SNMP, les informations sont tout aussi accessibles, mais c'est bien plus fastidieux d'identifier chaque valeur. 😉 

Hélas pas de SNMP sur livebox à ma connaissance pour le moment ...

Lien vers le commentaire
Partager sur d’autres sites

@smosse @MilesTEG1

Bonjour,

Il semblerait (sous toutes réserves) que l'on puisse accéder à la Livebox via telnet et ainsi récupérer des informations SNMP de celle-ci (voir ici) mais je n'ai pas essayé car pas très explicite pour moi ... Je souhaite comprendre avant de taper quoique ce soit en ligne de commandes !

J'ai bien trouvé sur la toile cela mais là aussi ce n'est pas clair pour moi, je ne vois pas bien comment mettre en œuvre ce script et où l'installer. Si vous avez des idées elles seront les bienvenues .

Je continue à fouiller, en espérant trouver quelque chose de plus concret du moins plus explicatif pour mes petites compétences que ces premières sources.

Cordialement

oracle7 😉

Lien vers le commentaire
Partager sur d’autres sites

il y a 13 minutes, oracle7 a dit :

@smosse @MilesTEG1

Bonjour,

Il semblerait (sous toutes réserves) que l'on puisse accéder à la Livebox via telnet et ainsi récupérer des informations SNMP de celle-ci (voir ici) mais je n'ai pas essayé car pas très explicite pour moi ... Je souhaite comprendre avant de taper quoique ce soit en ligne de commandes !

J'ai bien trouvé sur la toile cela mais là aussi ce n'est pas clair pour moi, je ne vois pas bien comment mettre en œuvre ce script et où l'installer. Si vous avez des idées elles seront les bienvenues .

Je continue à fouiller, en espérant trouver quelque chose de plus concret du moins plus explicatif pour mes petites compétences que ces premières sources.

Cordialement

oracle7 😉

Bon bah le premier tuto ne fonctionnera pas : il semble fait pour une vieille version de LB...

image.png.f920cfd4432e217f539fd8e2b1a30192.png

Je regarderais la deuxième méthode plus tard ^^

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

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

Invité
Répondre à ce sujet…

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

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

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

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

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

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.