MRTNK: Installation et mode d'emploi

Thierry Nkaoua:tnka@linux-sottises.net

v0.9.1: 20 Avril 2002
v0.9.2: 9 Janvier 2003


Ce document décrit l'installation et le mode d'emploi de MRTNK qui est un ensemble de scripts (bash linux) destinés à produire des graphiques journaliers, hebdomadaires, mensuels et annuels, les pages web de présentation de ces graphiques, à partir de données en provenance de scripts "externes" ou de SNMP (Simple Network Management Protocol). Les graphiques sont produits grâce à RRDTOOL. MRTNK offre des fonctionnalités semblables à MRTG, meilleures (à mon avis...) du point de vue des graphiques puisque basés sur RRDTOOL et des pages HTML créées (une fois pour toutes contrairement à MRTG) mais sans doute moins riches en ce qui concerne les plate-formes puisque MRTNK ne tourne que sous Linux, et un interfaçage avec SNMP beaucoup moins poussé que celui de MRTG.

1 Introduction

2 Pré-requis

3 Installation

4 Configuration

5 Exécution


1 Introduction

MRTNK est un ensemble de scripts pour:
- générer des bases rrd compatibles avec mrtg (quand mrtg est configuré pour générer des logs au format rrd)
- mettre à jours ces bases avec des données en provenance de scripts "externes" ou de SNMP
- générer des graphiques avec RRDTOOL (un ensemble de types de graphiques est prédéfini)
- générer des pages HTML avec ces graphiques

Tout ceci s'accomplit à travers un fichier de configuration simple à mettre au point de syntaxe proche de celle de MRTG.

J'ai commencé à écrire ces scripts pour un usage privé, mais ils ont intéressé d'autres personnes, aussi j'ai décidé de les rendre publics.

Note pour les utilisateurs de MRTG: si vous utilisez le format rrd pour MRTG, vous pouvez utiliser les bases rrd générées par MRTG dans mrtnk, le nom des bases doit juste être cible.rrd (voir plus loin la définition des cibles)

Vous pouvez voir les résultats produits par ces scripts sur www.linux-sottises.net/stats_mrtnk.php

[Retour Table des matières]

2 Pré-requis

- Une machine linux avec bash et des "choses à mesurer"
- cut, grep, sed, bc
- RRDTOOL
- SNMP (si vous souhaitez vous en servir...)
- MRTNK :-)

[Retour Table des matières]

3 Installation

Je suppose que RRDTOOL et (éventuellement) SNMP sont opérationnels

Décompressez l'archive MRTNK, et mettez le répertoire mrtnk par exemple dans /usr/local.

Le fichier de configuration général mrtnk.setup du répertoire mrtnk doit être recopié dans /etc et édité.

Edition de /etc/mrtnk.setup
Renseignez les chemins demandés, la syntaxe est MOT-CLE="valeur":

Chemin des scripts MRTNK
MRTNK="/usr/local/mrtnk"

Chemin des "scripts externes" (qui renvoient a minima deux valeurs "in" et "out"), par défaut c'est le répertoire scripts du répertoire d'installation
SCRIPTS="$MRTNK/scripts"

Chemin des bases rrd, par défaut, c'est le répertoire logs_rrd du répertoire d'installation
LOGS="$MRTNK/logs_rrd"

Chemin des pages html, doit être sous la racine de votre serveur web si vous voulez y accéder par ce serveur (voir aussi ci dessous la définition du répertoire IMAGES et plus loin le mot clé DIRECTORY dans la liste des mots-clés).
HTML="/webnew"

Nom du répertoire (chemin relatif) où vont être stockées les images créées. Si vous n'utilisez pas de répertoire spécifique pour certaines cibles (mot-clé DIRECTORY, voir plus loin), vous devez vous même créer ce répertoire comme sous répertoire du répertoire HTML.
IMAGES="images_rrd"

Chemin relatif d'un répertoir d'images sur votre serveur web (pour y stocker les logos MRTNK et RRDTOOL, ces logos sont fournis dans images de l'archive)
IMAGES_GENERAL=images

Répertoire de quelques fichiers de configuration (personnalisation des pages html) et du fichier de défauts
CONF=$MRTNK/conf

Chemin pour le binaire rrdtool
RRD="/usr/local/rrdtool/bin/rrdtool"

Chemin pour snmpget (si vous vous servez de SNMP)
SNMPGET="/usr/bin/snmpget"

[Retour Table des matières]

4 Configuration

Vous devez fabriquer un fichier de configuration. Si vous utiliser SNMP, un script mrtnk-confmake est fourni pour aider à la mise au point du fichier de configuration. Son mode d'emploi est fourni plus loin.

Le fichier de configuration est de la forme:
MOTCLE[cible]="VALEUR"

cible sert à nommer les fichiers rrd, les images correspondantes et les fichiers html générés.

Remarque: Attention à ne pas laisser d'espace entre les [ ] et le nom de la cible.

Chaque mot clé peut être écrit en majuscules ou minuscules

Remarque: faites attention de ne pas utiliser des VALEURS qui seraient par hasard l'un des mots clés!!!

Les lignes qui contiennent des # sont considérées comme des commentaires (faites attention à ne pas utiliser des # dans les valeurs de vos mots clés)

[Retour Table des matières]

4.1 Mots-clés

Voici la liste des mots clés acceptés

TARGET (requis) Commande à exécuter (script externe stockés dans le répertoire script de mrtnk)
ou bien VALEUR:SNMP.
Si la valeur est SNMP alors les mots clés
{SNMP_HOST et SNMP_COMMUNITY}
sont obligatoires ainsi que, au choix:
{SNMP_IF et SNMP_NUMBER} ou {SNMP_OID_IN} ou {SNMP_OID_IN et SNMP_OID_OUT}
Voir les exemples.

TYPE (requis) COUNTER (pour mesurer des incréments) ou GAUGE (pour afficher directement des valeurs) GAUGE et COUNTER doivent être écrits en majuscules

ABSMAX (requis) Valeur maximum admissible dans les bases, peut être négatif, mis à jour dans la base rrd en cas de changement

ABSMIN (requis) Valeur minimum admissible dans les bases, peut être négatif, mis à jour dans la base rrd en cas de changement

GRAPH (requis) Type de graphique. Sont disponibles comme types de graphiques:
inout (in en positif, out en négatif)
inoutpeak (idem inout mais avec les valeurs pics sur les graphes week, month et year)
double (deux valeurs comme mrtg)
doublepeak (idem double mais avec pics)
single (une seule valeur affichée en "plein", la valeur est la valeur "IN" pour les couleurs et legendes)
singlepeak (idem single mais avec pics)
doubleline (deux valeurs sous formes de lignes)
doublelinepeak (idem doubleline mais avec pics)
singleline (une seule valeur sous forme de courbe)
singlelinepeak (idem singleline mais avec pics)

LEGENDIN (option) Légende de la première courbe "IN". Une légénde par défaut existe (Traffic in)

LEGENDINPEAK (option) Légénde de la courbe des pics "IN". Une légénde par défaut existe (Traffic in Peak)

LEGENDOUT (option) Légende de la deuxième courbe "OUT". Une légénde par défaut existe (Traffic out)

LEGENDOUTPEAK (option) Légende de la courbe des pics "OUT". Une légénde par défaut existe (Traffic out Peak)

MAX (option) Affiche une ligne horizontale de couleur COLORINPEAK à la valeur donnée (si l'échelle le permet)

MIN (option) affiche une ligne horizontale de couleur COLOROUTPEAK à la valeur donnée (si l'échelle le permet)

LOW (option) ordonnée minimale (si des valeurs vont plus bas, elles sont quand même affichées)

UP (option) ordonnée maximale

RIGID (option, RIGID[cible]="toto", utilisable uniquement avec LOW et/ou UP) les valeurs données dans UP et/ou LOW ne changent pas si des valeurs qui vont au delà doivent être affichées. si vous ne voulez pas de cette option, n'utilisez pas le mot-clé ou donnez comme valeur une chaine de caractère vide ""

TITLE (option) titre à afficher sur les graphiques

UNIT (option) unité (axe des ordonnées et légendes), par défaut, vaut bytes/s

COLORIN (option) couleur de la courbe IN

COLORINPEAK (option) couleur de la courbe des pics IN

COLOROUT (option) couleur de la courbe OUT

COLOROUTPEAK (option) couleur de la courbe des pics OUT

NO_LAZY (option, NO_LAZY[cible]="toto"), par défaut les graphics ne sont générés que si cela est nécessaire en fonction de leur date de création. NOLAZY supprime ce comportement et les graphiques sont générés systématiquement. Si vous ne voulez pas cette option, n'utilisez pas le mot-clé ou donnez comme valeur une chaine de caractère vide ""

FACTOR (option) facteur multiplicatif des tous les affichages (utile quand on a des scripts /heure ou pour les unités)

BASE (option) facteur de passage de kilo à Mega à Giga

XSIZE (option, 600 par défaut) largeur des graphiques

YSIZE (option, 200 par défaut) hauteur des graphiques

SUPPRESS (option) une ou plusieurs des lettres d (jour) w (semaine) m (mois) y (année): suppression de la création du graphique correspondant.
Exemple
SUPPRESS[adsl-rrd]="my"
ne crée pas les graphes mensuels et annuels (et ils n'apparaissent pas dans les pages html générées naturellement)

DIRECTORY (option) désigne en relatif un sous répertoire de HTML (déclaré dans le fichier de configuration /etc/mrtnk.setup) pour stocker les pages créées.
Les images pour cette cible seront alors stockées dans HTML/DIRECTORY/IMAGES où IMAGES est définie dans le fichier /etc/mrtnk.setup
Si les répertoires DIRECTORY et DIRECTORY/IMAGES n'existent pas, ils sont créés par le script de création d'images mrtnk-graph ou par le script de création de pages mrtnk-html
Par contre, vous devez vous même créer le répertoire HTML et le répertoire HTML/IMAGES

NO_HOLE (option) Si la valeur est "yes", dans les graphiques, en cas de "trous" dans les données, le graphique est prolongé à la "dernière" valeur disponible avant le "trou". Si ce mot-clé n'est pas présent, les "trous" dans les données sont remplacés par des zéros.

SNMP_HOST (requis si target vaut SNMP) Nom de l'hôte où les requêtes snmp vont être adressées

SNMP_COMMUNITY (requis si TARGET vaut SNMP) Nom de la communauté snmp avec laquelle les requêtes snmp vont être effectuées

SNMP_IF (incompatible avec SNMP_OID_IN) Nom de l'interface sur laquelle effectuer les requêtes snmp

SNMP_NUMBER (requis si SNMP_IF est présent) Numéro interne de l'interface donnée dans SNMP_IF, le générateur de fichier de configuration mrtnk-confmake fournit ce numéro en même temps que le nom des interfaces (voir plus loin)

SNMP_OID_IN (incompatible avec SNMP_IF) "premier" OID numérique, par exemple
.1.3.6.1.2.1.2.2.1.2.1
ou textuel, par exemple:
ifDecsr.1
Le "premier" se réfère à la première valeur affichées dans les graphiques.

SNMP_OID_OUT (incompatible avec SNMP_IF, requiert SNMP_OID_IN) "deuxième OID, numériquen ou textuel.

Il existe enfin deux mots clés ne nécessitant pas de "cible" et pouvant figurer en tête du fichier de configuration:
HTML_EXTENSION permet de changer l'extension de toutes les pages web générées. Exemple:
HTML_EXTENSION="php"
NO_LOGO (sans préciser de =) permet de supprimer les logos MRTNK et RRDTOOL à la fin des pages web générées.

[Retour Table des matières]

4.2 Générateur de fichier de configuration SNMP

Pour aider à la création du fichier de configuration concernant les interfaces mesurées par SNMP, lancer le script depuis le répertoire d'installation de mrtnk.:

./mrtnk-confmake hôte communauté > toto.conf

Il faut préciser que MRTNK est loin d'atteindre la "complétude" de MRTG vis à vis de SNMP.

Pour les interfaces "standard", hôte est le nom de votre machine et communauté vaut public
Dans toto.conf, vous devriez avoir un fichier de configuration "minimal" concernant toutes vos interfaces.

Il est indispensable d'éditer ce fichier pour plusieurs raisons:

Il y a des interfaces "inutiles" (comme lo ou dummy)
Certaines interfaces ont des des débits apparents nuls (comme ppp0) ou erronés (mes cartes 100Mbits ne sont pas "reconnues" par snmp. Il faut donc corriger ABSMAX en conséquence
Vous voulez peut-être rajouter des options de couleur ou de légende....
Le nom des cibles est de la forme: hôte_numero

Par exemple, voici la sortie de ./mrtnk-confmake yoda public sur ma machine:

TARGET[yoda_1]="SNMP"
SNMP_IF[yoda_1]="lo"
SNMP_HOST[yoda_1]="yoda"
SNMP_COMMUNITY[yoda_1]="public"
SNMP_NUMBER[yoda_1]="1"
TYPE[yoda_1]="COUNTER"
ABSMAX[yoda_1]="1250000"
ABSMIN[yoda_1]="0"
TITLE[yoda_1]="lo yoda"

TARGET[yoda_2]="SNMP"
SNMP_IF[yoda_2]="dummy"
SNMP_HOST[yoda_2]="yoda"
SNMP_COMMUNITY[yoda_2]="public"
SNMP_NUMBER[yoda_2]="2"
TYPE[yoda_2]="COUNTER"
ABSMAX[yoda_2]="1250000"
ABSMIN[yoda_2]="0"
TITLE[yoda_2]="dummy yoda"

TARGET[yoda_3]="SNMP"
SNMP_IF[yoda_3]="eth0"
SNMP_HOST[yoda_3]="yoda"
SNMP_COMMUNITY[yoda_3]="public"
SNMP_NUMBER[yoda_3]="3"
TYPE[yoda_3]="COUNTER"
ABSMAX[yoda_3]="1250000"
ABSMIN[yoda_3]="0"
TITLE[yoda_3]="eth0 yoda"

TARGET[yoda_4]="SNMP"
SNMP_IF[yoda_4]="eth1"
SNMP_HOST[yoda_4]="yoda"
SNMP_COMMUNITY[yoda_4]="public"
SNMP_NUMBER[yoda_4]="4"
TYPE[yoda_4]="COUNTER"
ABSMAX[yoda_4]="1250000"
ABSMIN[yoda_4]="0"
TITLE[yoda_4]="eth1 yoda"

TARGET[yoda_5]="SNMP"
SNMP_IF[yoda_5]="ppp0"
SNMP_HOST[yoda_5]="yoda"
SNMP_COMMUNITY[yoda_5]="public"
SNMP_NUMBER[yoda_5]="5"
TYPE[yoda_5]="COUNTER"
ABSMAX[yoda_5]="0"
ABSMIN[yoda_5]="0"
TITLE[yoda_5]="ppp0 yoda"

Afin de faciliter la création du fichier de configuration, il est possible de fournir un fichier de configuration à mrtnk-confmake.

Ce fichier de configuration a la forme:
MOT-CLE="VALEUR"

Par exemple:

DIRECTORY="toto"
COLORIN="111111"

Ces directives seront rajoutées (avec le [cible] correcte) au fichier de configuration généré par mrtnk-confmake.

La syntaxe pour utiliser cette fonctionnalité, lancez depuis le répertoire d'installation de mrtnk:

./mrtnk-confmake hôte communauté fichier_de_configuration_de_confmake

[Retour Table des matières]

4.3 Exemples de fichiers de configuration

TARGET[dns_rrd]="stat.pl dnsreqs"
TYPE[dns_rrd]="COUNTER"
GRAPH[dns_rrd]="singlepeak"
ABSMAX[dns_rrd]="30"
ABSMIN[dns_rrd]="0"
LOW[dns_rrd]="0"
TITLE[dns_rrd]="Requêtes DNS horaires"
UNIT[dns_rrd]="req/h"
LEGENDIN[dns_rrd]="req/h"
LEGENDINPEAK[dns_rrd]="req/h peak"
COLORIN[dns_rrd]="21bda6"
COLORINPEAK[dns_rrd]="1e88bd"
FACTOR[dns_rrd]="3600"

La cible est fournie par le script stats.pl (placé dans le répertoire scripts du répertoire d'installation de MRTNK) avec la syntaxe "webstat.pl dnsreqs". Il s'agit des requêtes DNS sur un serveur bind.
Il n'y a qu'une seule courbe à afficher, et singlepeak indique un graphique "surface avec pics"
L'option COUNTER sortant des résultats en "par seconde", le ABSMAX est fixé à 30, ce qui est déjà beaucoup pour mon serveur!!
FACTOR à 3600 permet d'afficher des valeurs "par heure".
----------

TARGET[adsl_rrd]="netstat ppp0 ppp0"
TYPE[adsl_rrd]="COUNTER"
ABSMAX[adsl_rrd]="100000"
ABSMIN[adsl_rrd]="0"
GRAPH[adsl_rrd]="inoutpeak"
MAX[adsl_rrd]="64000"
MIN[adsl_rrd]="-16000"
LOW[adsl_rrd]="-30000"
UP[adsl_rrd]="65000"
TITLE[adsl_rrd]="Débits ADSL netstat"
UNIT[adsl_rrd]="bytes/s"
LEGENDIN[adsl_rrd]="Traffic in"
LEGENDINPEAK[adsl_rrd]="Traffic in Peak"
LEGENDOUT[adsl_rrd]="Traffic out"
LEGENDOUTPEAK[adsl_rrd]="Traffic out Peak"
COLORIN[adsl_rrd]="7aafff"
COLORINPEAK[adsl_rrd]="1000ff"
COLOROUT[adsl_rrd]="ff00ff"
COLOROUTPEAK[adsl_rrd]="ff0000"
SUPPRESS[adsl_rrd]="d"
DIRECTORY[adsl_rrd]="ADSL"
NOLAZY[adsl_rrd]="salut"
XSIZE[adsl_rrd]="400"
YSIZE[adsl_rrd]="200"
RIGID[adsl_rrd]="bonjour"

La cible est encore un script
le graphique "jour" (d) n'est pas créé
Les pages HTML de cette cible seront créées dans le répertoire ADSL du répertoire HTML déclaré dans /etc/mrtnk.setup Les images seront donc créées dans un sous répertoire de ADSL (le nom de ce répertoire est celui déclaré dans la variable IMAGES de /etc/mrtnk.setup)
NOLAZY force la création des images même si leur date de création ne le nécessite pas par rapport aux mises à jour des bases rrd.
La taille des graphiques est modifiée par XSIZE et YSIZE
RIGID force à ne pas dépasser les valeurs LOW et UP dans l'affichage
----------

TARGET[yoda_ppp0]="SNMP"
SNMP_IF[yoda_ppp0]="ppp0"
SNMP_HOST[yoda_ppp0]="yoda"
SNMP_COMMUNITY[yoda_ppp0]="public"
SNMP_NUMBER[yoda_ppp0]="5"
TYPE[yoda_ppp0]="COUNTER"
UNIT[yoda_ppp0]="bytes/s"
ABSMAX[yoda_ppp0]="100000"
ABSMIN[yoda_ppp0]="0"
GRAPH[yoda_ppp0]="inoutpeak"
TITLE[yoda_ppp0]="Débits ADSL SNMP"
MAX[yoda_ppp0]="64000"
MIN[yoda_ppp0]="-16000"
UP[yoda_ppp0]="65000"
LOW[yoda_ppp0]="-30000"

Il s'agit d'une cible SNMP générée par mrtnk-confmake et modifiée et complétée manuellement.
----------

TARGET[errors_ppp0]="SNMP"
SNMP_HOST[errors_ppp0]="yoda"
SNMP_COMMUNITY[errors_ppp0]="public"
SNMP_OID_IN[errors_ppp0]="ifInErrors.5"
SNMP_OID_OUT[errors_ppp0]="ifOutErrors.5"
TYPE[errors_ppp0]="COUNTER"
UNIT[errors_ppp0]="erreurs/h"
ABSMAX[errors_ppp0]="10000"
ABSMIN[errors_ppp0]="0"
GRAPH[errors_ppp0]="inoutpeak"
TITLE[errors_ppp0]="Erreurs ppp0"
LEGENDIN[errors_ppp0]="Erreurs IN"
LEGENDOUT[errors_ppp0]="Erreurs OUT"
FACTOR[errors_ppp0]="3600"

Il s'agit d'une cible SNMP dans laquelle on a spécifié deux OIDs sous forme textuelle: il s'agit du nombre d'erreurs IN et OUT sur l'interface 5 (ppp0 chez moi)
----------

TARGET[errors_in_ppp0]="SNMP"
SNMP_HOST[errors_in_ppp0]="yoda"
SNMP_COMMUNITY[errors_in_ppp0]="public"
SNMP_OID_IN[errors_in_ppp0]=".1.3.6.1.2.1.2.2.1.14.5"
TYPE[errors_in_ppp0]="COUNTER"
UNIT[errors_in_ppp0]="erreurs/h"
ABSMAX[errors_in_ppp0]="10000"
ABSMIN[errors_in_ppp0]="0"
GRAPH[errors_in_ppp0]="singlepeak"
TITLE[errors_in_ppp0]="Erreurs ppp0 IN"
LEGENDIN[errors_in_ppp0]="Erreurs IN"
FACTOR[errors_in_ppp0]="3600"

Il s'agit d'une cible SNMP dans laquelle on a spécifié un OID sous forme numérique: il s'agit aussi du nombre d'erreurs IN sur l'interface 5 (utilisez snmptranslate -IR ifInErrors.5 pour avoir l'oid numérique ou vice et versa)

[Retour Table des matières]

5 Exécution

5.1 Création et mises à jour des bases

Le script mrtnk-update crée les bases rrd et les mets à jours soit en appelant les scripts externes soit en faisant appel à SNMP. La syntaxe est:
/usr/local/mrtnk/mrtnk-update /usr/local/mrtnk/conf/votre_fichier_de_configuration
en remplaçant éventuellement /usr/local par votre chemin d'installation (vous pouvez éventuellement mettre ailleurs votre fichier de configuration)

Ce script ne crée ni graphiques ni page html

Si "tout va bien", mettez cet ordre dans votre crontab avec une fréquence de 5 minutes (5 minutes est obligatoire).

Si vous changez la valeur de ABSMIN ou de ABSMAX dans une cible, les bases rrd seront mises à jour avec ces nouvelles valeurs.

Si vous vous êtes trompés entre GAUGE et COUNTER pour une cible, même si les scripts mettent à jour les bases rrd avec un nouveau type, il est fortement conseillé de supprimer la base rrd correspondante, les graphiques risquant d'être très pértubés par un tel changement

[Retour Table des matières]

5.2 Génération des graphiques

Pour fabriquer les graphiques, lancez:
/usr/local/mrtnk/mrtnk-graph /usr/local/mrtnk/conf/votre_fichier_de_configuration

Il va falloir attendre trois updades des tables rrd avant de voir des graphes qui veulent dire quelque chose...

Mettez aussi cet ordre dans votre crontab si vous le souhaitez.

En même temps que les images, des fichiers contenant la taille des images sont aussi créés (pour la création des pages html avec les dimensions des images)

[Retour Table des matières]

5.3 Génération des pages web

Tout d'abord vous pouvez créer des pages d'autre extension que html avec le mot clé HTML_EXTENSION (voir la liste des mots clés

Contrairement à MRTG, une fois que les images ont toutes été créées (après deux ou trois mises à jour des bases), une seule création des pages web est nécessaire (sauf évidemment en cas de rajout de cibles dans le fichier de configuration)

Pour générer les pages web, lancez:
/usr/local/mrtnk/mrtnk-html /usr/local/mrtnk/votre_fichier_de configuration

Cet ordre crée:
- une page par cible nommée d'après le nom de la cible
- une page d'index (nommée stats_mrtnk.html) qui regroupe l'ensemble des images "jour" de toutes les cibles et qui permet d'accéder aux pages cibles.

Il est possible de personnaliser les pages générées.

Si vous créez un fichier head_mrtnk dans le répertoire conf, son contenu sera inclus entre les balises "head" des pages cibles générées

Si vous créez un fichier body_mrtnk (qui commence nécessairement par la balise <body> dans le répertoire conf, son contenu sera inclus avant les graphiques dans les pages cibles générées

Si vous créez un fichier foot_mrtnk dans le répertoire conf, il sera inclus en dessous des graphiques dans les pages cibles générées

Si vous créez un fichier index_head_mrtnk dans le répertoire conf, son contenu sera inclus entre les balises "head" de la page d'index générée

Si vous créez un fichier index_body_mrtnk (qui commence nécessairement par la balise <body> dans le répertoire conf, son contenu sera inclus avant les graphiques dans la page d'index générée.

Si vous créez un fichier index_foot_mrtnk dans le répertoire conf, il sera inclus en dessous des graphiques dans la page d'index générée

[Retour Table des matières]