Affichage des articles dont le libellé est réseau. Afficher tous les articles
Affichage des articles dont le libellé est réseau. Afficher tous les articles

lundi 10 décembre 2012

Créer ses propres graphes sous cacti

Voici le challenge du jour : pouvoir comparer pour nos switchs réseaux, le trafic en unicast et le reste (broadcast et multicast).

Cacti fourni par défaut les graphes suivants : non-unicast packets et un autre graphe unicast packets.
Nous souhaitons voir sur le même graphe, les paquets unicast et les autres, pour comparaison rapide. C'est assez simple, mais implique de manipuler plusieurs objets cacti, et mérite donc un petit pense bête...

1ère étape : créer un "Data Template"

Le data template va définir quelles informations nous intéressent dans notre graphe. Rien de très compliqué ici, on se base par exemple sur le template pré défini "Interface - Unicast Packets" et on l'enrichi (veuillez excusez le mélange franglais dans les titres...) :



Et on lui ajoute 4 "Data Source Item"s :



Voila, ça c'est bon.

2ème étape : créer une "Data Query"

L'avantage de créer une Data Query, est qu'il est ainsi possible d'associer nos requêtes de données à une interface, cela permettra de générer le graphe pour chaque interface des switchs et non pas de générer un graphe par switch. Donc, dans la console cacti, il faut aller dans Data Queries, et sélectionner "SNMP - Interface Statistics", pour ajouter notre définition dans les requêtes associées aux interfaces.
Une fois la "Data query" "SNMP - Interface Statistics" sélectionnée, on lui ajoute un nouveau "Associated Graph Templates". Les suggested values en dessous sont importantes pour générer automatiquement le nom des data sources et des graphes avec le "nom" de l'interface du switch.




3ème étape : Créer un graph template, qui va utiliser notre data query pour faire des jolies choses :

Pas de gros mystère ici, voici la définition du contenu du graphe : le unicast en LINEx et le broadcast en AREA. La première ligne en en LINE3 car plus épaisse, elle se verra même si la deuxième ligne (en LINE1) est superposée.



Les autres valeurs du graphe sont elles aussi classiques :



Et voilà, tout est prêt pour avoir un graphe avec nos quatre éléments facilement comparables :


C'est quand même plus parlant qu'un graphe avec le unicast d'un coté, et un graphe avec le broadcast de l'autre, non ?








jeudi 29 novembre 2012

Cacti : changer la couleur du graphe en fonction de la valeur

Bien, une ligne de limite (cf. précédent post), c'est déjà sympa, mais avoir des erreurs qui sautent aux yeux c'est mieux.

Si l'on prend l'exemple de la surveillance du ping précédent, l'idéal serait que le graphe change de couleur quand le ping dépasse la limite.

C'est assez simple :


1) Il faut créer un CDEF (Computer DEFinition il paraît) :
Dans cacti, console, graphs management, CDEFs, en ajouter un.
Sa définition est simple : cela doit renvoyer la valeur si elle est dans une certaine limite.
Pour cela, utiliser la définition suivante :
 
               cdef=CURRENT_DATA_SOURCE,0,60,LIMIT

en ajoutant les items suivants (ou en ajoutant une custom string complete) :



2) Il suffit maintenant de modifier le template du graph que nous souhaitons améliorer :
Ajouter un item de type AREA, avec comme CDEF la CDEF précédente :



L'ordre dans le graphe est important : les items sont dessinés du haut vers le bas dans l'ordre suivant :



Ainsi par défaut toutes les valeurs sont en 'AREA' (aire remplie) rouge, puis par dessus cette AREA rouge, les valeurs correspondantes à la CDEF précédente (donc les valeurs inférieures à 60) seront affichées en vert.

Et voila le résultat :


C'est plus parlant, non ?



Cacti : ajouter une limite sur les graphiques

Lorsque l'on vérifie plusieurs graphes de ping latency, avec une échelle automatique, il est impossible sans lire la légende du graphe de savoir si le ping est dans la norme ou pas.



Pour avoir l'information d'un coup d'oeil, il suffit d'ajouter dans le modèle de graphe, un ligne à une valeur donnée :

Dans mon cas, le "graph template" "Unix ping latency".

Faire ADD dans Graph Template Items [edit: Unix - Ping Latency]
Puis définir une entrée de la façon suivante :
Data source : on ne touche pas
Color : la couleur que vous souhaitez
Opacity : idem
Graph Item Type : HRULE
Consolidation Function : Average
CEDF : None
Value : la valeur que vous souhaitez, ici 80

Et voilà : d'un coup d'oeil on voit où on a des dépassements de la norme


mercredi 21 mars 2012

Surveillance des sauvegardes linux avec nagios/centreon

Bien, nous avons vu dans un post précédent, un script permettant de sauvegarder des configs variées sur un serveur linux.

Mais comment être sûr que la sauvegarde est bien effectuée sans aller regarder tous les jours ? En utilisant l'excellent couple nagios/centreon bien sûr. Je passe les détails d'une installation et configuration complète de cette solution, pour me concentrer uniquement sur le problème actuel :

Les sauvegardes sont placées sur un serveur windows (équipé d'un serveur rsync pour améliorer les perfs de la sauvegarde), et si tout se déroule correctement, dans le répertoire contenant les sauvegardes, on place un petit fichier "dateSauvegarde", qui contiendra uniquement le mot "ok" si tout s'est bien déroulé, et un rapport d'erreur en cas de problème.

La surveillance de la sauvegarde va ainsi se cantonner à
1) vérifier si la date du fichier "dateSauvegarde" est celle de la veille ou du jour
2) vérifier si le fichier contient "OK"

Pour cela, sur le serveur windows, on configure nsclient pour qu'il réponde aux requêtes nrpe, et on lui configure une commande (dans la section nrpe de nsc.ini) :

[External Scripts]
check_backup_tintin=c:\windows\system32\cscript.exe //NoLogo //T:60 C:\NSClient++-0.3.6-Win32-20090330-2223\check_file_backup.wsf /d:"D:\Backup-Siege\tintin" /s:"ok" /f:"dateSauvegarde" /ok:true /n:1

Sur centreon, on configure la sonde associée au serveur stockant les sauvegardes en utilisant check_nrpe, et en appelant la bonne commande : !check_backup_tintin

Et basiquement c'est tout. Par ce simple mécanisme, on sera averti si la sauvegarde n'a pas fonctionné (date du fichier < j-1), ou si elle a rencontré des erreurs (pas de "ok" dans le fichier).

Je persiste et signe : l'informatique est un boulot de fainéant!

En prime, le fameux vbscript qui vérifie tout ça :

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' jumboman@yahoo.com
'
' Feel free to improve it. But please let me have a copy if you do.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<job>
    <runtime>
        <description>
            Checks if the latest file in a specified folder matching a template
            has the specified string. Return codes can be specified for both
            positive and negative match scenarios.
        </description>


    <named
        name="h"
        helpstring="Help"
        type="simple"
        required="false"
    />

    <named
        name="d"
        helpstring="directory to look into"
        type="string"
        required="true"
    />

    <named
        name="f"
        helpstring="regex to match file within the folder"
        type="string"
        required="true"
    />

    <named
        name="s"
        helpstring="The string to look for"
        type="string"
        required="true"
    />

    <named
        name="ok"
        helpstring="return success if match found"
        type="string"
        required="false"
    />

    <named
        name="n"
        helpstring="number of days exceeding which triggers error"
        type="string"
        required="false"
    />

    <named
        name="e"
        helpstring="Encoding - Unicode or Ascii (default)"
        type="string"
        required="false"
    />

    </runtime>
<script language="VBScript">

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Const intOK = 0
Const intWarning = 1
Const intCritical = 2
Const forReading = 1
Const Unicode = -1
Const Ascii = 0

limit = 0

latest = 0
latestFile = ""
success = true
enc = Ascii

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' Handle input
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If Wscript.Arguments.Named.Exists("h") Then
    Wscript.Echo "Usage: check_file_backup.wsf /d:<dir> /f:<regex> /s:<string> [/ok:<1|0>] [/n:<days>] [/e:<U|A]"
        Wscript.Echo "/d: - directory to look into "
        Wscript.Echo "/f: - regex string to match file names "
        Wscript.Echo "/s: - string to look for in the file "
        Wscript.Echo "/ok: -should the match be treated as success"
        Wscript.Echo "/n: - allowed age in number of days [optional]"
        Wscript.Echo "/e: - encoding U or A(default) [optional]"
        Wscript.Quit(intOK)
End If

If Wscript.Arguments.Named.Exists("d") Then

    dirName = Wscript.Arguments.Named("d")
Else
    Wscript.Echo "ERROR: Missing Directory Name Input"
    Wscript.Quit(intCritical)
End If

If Wscript.Arguments.Named.Exists("f") Then

    fileNameEx = Wscript.Arguments.Named("f")
Else
    Wscript.Echo "ERROR: Missing File Name Expression Input"
    Wscript.Quit(intCritical)
End If

If Wscript.Arguments.Named.Exists("s") Then

    searchStr = Wscript.Arguments.Named("s")
Else
    Wscript.Echo "ERROR: Missing Match string"
    Wscript.Quit(intCritical)
End If

If Wscript.Arguments.Named.Exists("ok") Then

    success = CBool(Wscript.Arguments.Named("ok"))
End If

If Wscript.Arguments.Named.Exists("n") Then

    limit = Cint(Wscript.Arguments.Named("n"))
End If

If Wscript.Arguments.Named.Exists("e") Then

    If Wscript.Arguments.Named("e") = "U" Then
        enc = Unicode
    End If
End If

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' logic
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = fileNameEx


Set fso = CreateObject("Scripting.FileSystemObject")

Set folder = fso.GetFolder(dirName)
Set files = folder.Files


'loop through files found and find the latest file


For each file In files

    Set match = objRegEx.Execute(file.Name)
    If match.Count > 0 Then
        'Wscript.Echo file.Name & " " & file.DateCreated
        x = CDate(file.DateLastModified)
        If x > latest Then
            Set latestFile = file
            latest = x
        End If

    End if
Next

If latest > 0 Then

    If limit > 0 Then
        age = DateDiff("d",latest,Date)
        If age > limit Then
            Wscript.Echo "ERROR: " & latestFile.Name & " " & latest & " more than " & limit & " Days old"
            Wscript.Quit(intCritical)
        End If
    End If

    found = false
    foundText = " Not Found in "
    foundLine = ""

    Set file1 = fso.OpenTextFile(latestFile, forReading, False, enc)

    Do Until file1.AtEndOfStream
        line = file1.Readline
        'Wscript.Echo line
        pos = Instr(1, line, searchStr, 1)
        If Int(pos) > 0 Then
            found = true
            foundText = " Found in "
            foundLine = line
            Exit Do
        End If
    Loop
    file1.Close()

    'do a XNOR

    If (not success and not found) or (success and found) Then
        Wscript.Echo "OK: '" & searchStr & "'" & foundText & latestFile.Name & " " & latest
        Wscript.Quit(intOK)
    Else
        Wscript.Echo "ERROR: '" & searchStr & "'" & foundText & latestFile.Name & " " & latest
        Wscript.Quit(intCritical)
    End If
Else
        Wscript.Echo "ERROR: No File Match Found"
        Wscript.Quit(intCritical)
End If

    </script>
</job>


mardi 21 février 2012

Installation et utilisation du client serveur NX sur Ubuntu 11.10

Pour lancer depuis un PC (client) des applications sur un autre ordinateur (serveur), il y a la bonne vieille méthode du X forwarding :

Une fois ssh correctement configuré, il suffit sur la machine client de lancer un petit ssh -X user@serveur, et une fois dans le shell ssh, de lancer n'importe quelle application, et magie, son affichage est déporté sur le client, même si elle s'exécute sur le serveur !

Ca fonctionne du tonnerre, mais si vous accédez à un ordinateur par l'intermédiaire d'une liaison un peu faiblarde, ce n'est pas très réactif.

Il existe d'autres méthodes (notamment dans l'ordre de popularité rdp, vnc, xdmcp), mais aucune d'entre elle n'arrive à la hauteur de la solution NoMachine en terme de rapidité d'affichage.

Ci-dessous les détails de l'installation de la solution NX de NoMachine en version Free Edition (open source).
Il existe une version payante qui offre de nombreuses utilisations supplémentaires, mais dans le cadre d'une utilisation personnelle, la version gratuite est largement suffisante.

Installation de la solution NX

Coté serveur
Récupérer les packages sur le site de NoMachine (aller dans NX Free Edition For Linux), et installer dans l'ordre (je ne sais pas si c'est encore valable, mais là aussi, je n'ai pas testé l'installation dans un autre ordre et n'ai jamais rencontré de problèmes) : client, node, server (même pas sûr que le client soit nécessaire, mais bon, je ne suis pas à 5-6 Mo d'espace disque près non plus)
sudo dpkg -i nxclient_3.5.0-7_i386.deb
sudo chmod 755 /usr/lib/cups/backend/ipp
sudo dpkg -i nxnode_3.5.0-7_i386.deb
sudo dpkg -i nxserver_3.5.0-9_i386.deb


Coté client
le client suffit :
sudo dpkg -i nxclient_3.5.0-7_i386.deb
sudo chmod 755 /usr/lib/cups/backend/ipp

Et voilà !!
Dans les applicatons sur le client, une entrée NX Client for Linux est créée, il suffit de donner l'adresse ip du serveur, les informations d'utilisateur, et zou, c'est parti!

Avantages de la solution NX par rapport à du vnc :
C'est beaucoup plus rapide. A titre d'exemple, je suis actuellement dans le train, connecté à internet via mon téléphone, et je viens de réaliser l'installation de la solution, et l'utilisation du client NX est possible (c'est pas du LAN, mais c'est réellement utilisable).
Il est possible de déconnecter une session, et de la réouvrir plus tard, pendant ce temps les applications  lancées auront continué leur travail, à la mode "screen" ou "byobu" (surcouche de screen que je vous conseille fortement).
Coté gestion des sessions, on retrouve les mêmes fonctionnalités que rdp (Accès bureau à distance sous windows), il est possible de lister les sessions, de s'y connecter, de les terminer...

mercredi 16 février 2011

Connexion sécurisée entre deux PC sans mot de passe

 

Lorsqu’on travaille avec plusieurs serveurs linux, il est très pratique de pouvoir se connecter en ssh depuis l’un des serveurs sur les autres sans avoir à saisir son mot de passe.

En mettant de coté cet aspect pour fainéants, il y a d’autres bonnes raisons pour mettre en place cette facilité… Par exemple l’utilisation de screen avec une ouverture automatique d’une fenêtre pour chacun des serveurs majeurs, ou encore (et là ça devient indispensable) que l’on met en place des scripts copiant des fichiers d’un serveur vers un autre.

Bref, voici comment faire en 3 étapes :

Etape 1 Génération d’une paire de clef sur le serveur qui va envoyer les fichiers (ou depuis lequel on veut se connecter sur l’autre serveur)

ssh-keygen -t dsa -b 1024


Renseigner alors les informations



Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): id_dsa
Enter passphrase (empty for no passphrase):(LAISSER VIDE)
Enter same passphrase again:
Your identification has been saved in id_dsa.
Your public key has been saved in id_dsa.pub.
The key fingerprint is:
1d:9a:23:a3:c3:14:42:12:52:54:a4:c6:54:3f:43:23 root@source

 


Etape 2 Copier la clé publique sur le serveur qui va recevoir les fichiers (ou sur lequel on veut se connecter)



ssh-copy-id -i /root/.ssh/id_dsa.pub root@[ip du serveur cible]

Entrer alors le mot de passe root du serveur cible


Etape 3 Oh, j’ai dit 3 étapes? C’est fini! Tester en se connectant à la machine cible :



ssh root@[serveur cible]

Vérifier le fichier .ssh/authorized_keys pour être certain qu’il n’y a que des clefs que nous y avons ajouté…


Ou bien encore tester une copie de fichier :



 
scp -i /root/.ssh/id_dsa /var/log/messages root@cible:/tmp

jeudi 20 janvier 2011

Trouver les PCs qui consomment de la bande passante sous Linux

Sur un réseau de plusieurs machines, il est difficile de trouver laquelle consomme de la bande passante au détriment des autres. Rien de plus simple sous Linux :

Dans mon cas, je dispose d'un ipcop qui gère la connexion à internet. Malheureusement sur ipcop, par défaut, les graphes réseau ne montrent que la bande passante totale utilisée. Ce qui est déjà suffisant pour valider qu'un problème de bande passante existe.

Plusieurs méthodes sont utilisables, mais dans mon cas, l'utilisation d'un petit outil (normalement installé en standard sur toutes les distributions linux) : iftop est largement suffisante.

Iftop est un outil en ligne de commande permettant de surveiller les connexions réseaux d'une interface (utilisable en mode promicious -verdi orthographe- ce qui lui permet de monitorer aussi ce qui ne traverse pas l'interface réseau surveillée)

Il suffit de le lancer sans arguments spécifiques pour déjà avoir une vision des connexions en cours et de la bande passante utilisée.

Cela m'a permis d'identifier par exemple lequel des pc de mon réseau consommait toute la bande passante, et vers quel autre pc externe celui-ci envoyait les données.

iftop est donc un petit outil très simple d'utilisation pour rapidement analyser ce qui se passe sur un réseau.

A savoir : si nécessaire, il est capable de filtrer son affichage, en fonction d'une adresse ip source, de destination, d'un port particulier...

Liens :
- Page officielle d'iftop
- Quelques exemples sur planet Ubuntu