Console mode, BASH scripts, SH, SHell

 Charge moyenne sur 1mn : 0.21 Charge moyenne sur 5mn : 0.25 Charge moyenne sur 15mn : 0.26


How to use the console, to make scripts BASH, SHells ?

Make scripts BASH, SHells ! Use user files like .bashrc and .profile.





Site user blocks : Account info / user rights / summary

My graphs MRTG

  • My graphs MRTG
Mes graphiques MRTG (stats serveurs).

Informations :

Dates
  • Publish : : Wednesday 08 may 2024
  • Modification : Friday 17 may 2024

  • 161 views

Share :

Ci-desous les scripts qui me permettent de générer mes graphiques MRTG .

Si vous voulez vous essayer pour comparer.

Ci-dessous un exemple de mon fichier /etc/mrtg.cfg :

Script avec 66 lignes

001# Title correspond au titre de la page html générée.
002#Title[string]: Titre du graph
003#PageTop[string]: <H1>MRTG</H1>
004# Target correspond à ce que nous voulons interroger.
005#Target[string]: 1:Public@127.0.0.1
006#MaxBytes[string]: 16000
007
008WriteExpires: Yes
009
010#######################
011# Global Settings
012RunAsDaemon: yes
013
014# Répertoire de destination des graphes, des fichiers de données (log,old), des pages html.
015WorkDir:/var/pro/mrtg/router/
016
017# On peut choisir le chemin où doit se trouver les fichiers html, png, log.
018#Imagedir: /var/pro/mrtg/router/
019Htmldir:/var/pro/mrtg/router/
020Logdir:/var/pro/mrtg/router/
021# Options générales
022# growright, noinfo, transparent, unknaszero, bits, nopercent, growright, gauge
023# défilement de droite à gauche, fond des graphes transparent, en cas de problème de poling le graphe tombe à zéro sinon MRTG prend la dernière valeur connnue et trace une ligne continue tant que MRTG n'arrive plus interroger l?équipement.
024Options[_]:growright,transparent,unknaszero,noinfo,nobanner
025
026# Cela permet de supprimer les graphes voulus (y=yearly m=monthly w=weekly d=daily).
027Suppress[_]: y
028
029#######################
030# Options correspond aux options spécifiques du graphe et annule la ou les options générales spécifiées lors de la création du fichier de configuration.
031#Options[string]: growleft, nobanner, noinfo
032#Options[string]: nobanner, noinfo
033
034# Normalement MRTG ajuste automatiquement la valeur maximale du graphe pour avoir la meilleure échelle possible.
035# Cette option permet en fait d'annuler cet automatisme et d'avoir un graphe fixe.
036#Unscaled[string]: dwym
037
038# Fixe la valeur maximale des graphes, cette valeur est en octets.
039#MaxBytes[string]: 1250000
040
041#AbsMax[string]: 1250000
042
043# Si  vous voulez monter plus de 4 lignes par graphique.
044#Ytics[string]: 6
045
046# Cela permet d'ajuster les graphes, c'est à dire cela consiste à multiplier le graphe par une valeur.
047#YScale[string]: 1.25
048#XScale[string]: 1.5
049
050# Permet de mettre une légende explicite  à l'axe des y.
051#YLegend[string]: Packets /s
052
053# Cela consiste à définir la taille du graphe en pixel de 20 à 600 par axe.
054#YSize[string]: 150
055#XSize[string]: 600
056
057#Legend1[string]: IN Packets /s
058#Legend2[string]: OUT Packets /s
059#LegendI[string]: IN P/s:
060#LegendO[string]: OUT P/s:
061
062# Légende des valeurs des graphes.
063#ShortLegend[string]: P/s
064
065# Aprés j'ai ajouté les scripts ".cfg" (en double) pour générer l'index.
066# /usr/bin/indexmaker --output /var/pro/mrtg/router/index.html /etc/mrtg.cfg

La charge CPU :

Le fichier de configuration MRTG /etc/mrtg/mrtg.cpu.cfg :

Script avec 19 lignes

001# --------------------------------------------------------------
002# url : http://nicolas.agius.pagesperso-orange.fr/linux/code/mrtg.html
003WorkDir:/var/pro/mrtg/router/
004Target[cpu]: `/etc/mrtg/cpu.pl`
005MaxBytes1[cpu]: 100
006MaxBytes2[cpu]: 100
007AbsMax[cpu]: 1000
008Options[cpu]: nopercent,growright,gauge,unknaszero,nobanner, integer
009#Options[cpu]: dorelpercent, growright, nobanner, noinfo, transparent
010Unscaled[cpu]: dwmy
011YLegend[cpu]: % Charge CPU
012ShortLegend[cpu]: %
013Legend2[cpu]: LoadAverage
014Legend1[cpu]: Charge CPU totale
015LegendI[cpu]:  Charge CPU  :
016LegendO[cpu]:  LoadAverage:
017Title[cpu]: Charge CPU
018PageTop[cpu]: <h1>Charge CPU</h1>
019# --------------------------------------------------------------

Le script /etc/mrtg/cpu.pl :

Script avec 118 lignes

001#!/usr/bin/perl
002# mrtg-cpu.pl
003# v2.0 - Nicolas AGIUS - 01/2007
004#
005###################################################################################
006## Sonde MRTG pour la charge processeur
007#
008# Copyright (C) 2006 Nicolas AGIUS <nicolas_agius@yahoo.fr>
009#
010# This program is free software; you can redistribute it and/or
011# modify it under the terms of the GNU General Public License
012# as published by the Free Software Foundation; either version 2
013# of the License, or any later version.
014#
015# This program is distributed in the hope that it will be useful,
016# but WITHOUT ANY WARRANTY; without even the implied warranty of
017# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
018# GNU General Public License for more details.
019#
020# You should have received a copy of the GNU General Public License
021# along with this program; if not, write to the Free Software
022# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
023#
024###################################################################################
025
026use POSIX;
027
028# /proc/stat report CPU usage in jiffies.
029#
030# CPU times in second = jiffies/HZ and
031# HZ is at 100 on my system as reported
032# by the sysconf() C funtion :
033#
034#// Begin C code
035##include <unistd.h>
036##include <stdio.h>
037#
038#int main()
039#{
040#        printf("HZ=%i\n",sysconf(_SC_CLK_TCK));
041#}
042#// EOF
043
044$HZ=100;
045
046# Syntax
047(scalar(@ARGV) <= 1) or die "Usage : $0 [noinfo]\n";
048
049### CPU% ###
050
051$stat_file="/var/lib/mrtg-cpu.stat";
052
053#Initialisation
054$oldtime=0;
055$oldvalue=0;
056$time=time();
057do $stat_file if(-x $stat_file);
058
059open(STAT,"</proc/stat") or die "Cannot open stat file";
060<STAT> =~ /^cpu\s+(\d+)\s+(\d+)\s+(\d+)/;
061close(STAT);
062
063# Get only total
064$value = $1+$2+$3;
065
066# Save old param
067open(OLDSTAT,">$stat_file") or die "Cannot open or create $stat_file";
068print(OLDSTAT "\$oldtime=\"$time\";\n");
069print(OLDSTAT "\$oldvalue=\"$value\";\n");
070close(OLDSTAT);
071chmod(755,$stat_file);
072
073#Compute CPU% for last period
074$cpu=ceil((($value-$oldvalue)/$HZ)*100/($time-$oldtime));
075
076### END-CPU% ###
077
078print "$cpu\n";
079
080### LOADAVG ###
081
082open(LOADAVG,"</proc/loadavg") or die("Cannot open /proc/loadavg");
083<LOADAVG> =~ /^\S+\s(\S+)/;
084close LOADAVG;
085$loadavg = $1*100;
086
087### END-LOADAVG ###
088
089print "$loadavg\n";
090
091### INFO ###
092if($ARGV[0] ne "noinfo")
093{
094        use Sys::Hostname;
095
096        ### UPTIME ###
097
098        open(UPTIME,"</proc/uptime") or die("Cannot open /proc/uptime");
099        <UPTIME> =~ /^(\d+)/;
100        close UPTIME;
101
102        # I hope perl will optimise computing ;-)
103        $d = int(  $1 / 86400 );
104        $h = int(( $1 % 86400 ) / 3600 );
105        $m = int((($1 % 86400 ) % 3600 ) / 60);
106
107        # Ha ha, ca c est beau ;-) Faudrait le mettre sur variable implicite !
108        $uptime = $d>0?"$d ".(($d>1)?"jours ":"jour "):"";
109        $uptime .= sprintf("%02d:%02d",$h,$m);
110
111        ### END-UPTIME ###
112
113        print "$uptime\n";
114        print hostname()."\n";
115}
116### END-INFO ###
117
118exit(0);
CPU : day

Traffic eth0 :

Le fichier de configuration MRTG /etc/mrtg/mrtg.packets-in-out.cfg :

Script avec 18 lignes

001#----------------eth0---------------
002WorkDir:/var/pro/mrtg/router/
003Target[eth0]: `/bin/sh /etc/mrtg/network_mrtg.eth0.pl.sh`;
004Options[eth0]: dorelpercent, growright, nobanner, noinfo, transparent
005MaxBytes[eth0]: 2000000
006AbsMax[eth0]: 10000000
007kilo[eth0]: 1024
008kMG[eth0]: K,M,G
009YLegend[eth0]: Bytes per second
010ShortLegend[eth0]: B/s
011Legend1[eth0]: Incoming Traffic in Bytes per second
012Legend2[eth0]: Outgoing Traffic in Bytes per second
013LegendI[eth0]: In:
014LegendO[eth0]: Out:
015Title[eth0]: Traffic Analysis for : eth0
016PageTop[eth0]:<h1>Traffic Analysis for : <code class="code">eth0</code></h1>
017#Unscaled[eth0]: dwmy
018#WithPeak[eth0]: my

Le script /etc/mrtg/network_mrtg.eth0.pl.sh :

Script avec 3 lignes

001#!/bin/sh
002
003/usr/bin/perl -e '@a=split(/[:\s]+/,qx(grep eth0 /proc/net/dev));printf "%.0f\n%.0f\n1\neth0 traffic\n",$a[2],$a[10];';
Traffic eth0 : day

Apache (serveur Web) :

Traffic (bytes) :

Le script /etc/mrtg/apache2.pl :

Script avec 25 lignes

001#!/usr/bin/perl
002# can return hits or bytes (counters)
003@res = `lynx -dump http://localhost:80/server-status`;
004foreach $res (@res) {
005    if ($res =~ /Server uptime: (.*)$/) { $up = $1; last } else { next }
006    if ($res =~ /Server at/) { $server = $res; last } else { next }
007}
008
009@res = `lynx -dump http://localhost:80/server-status?auto`;
010
011foreach $res (@res) {
012    if ($res =~ /Total Accesses: (\d+)/) { $d1 = $1; next }
013    if ($res =~ /Total kBytes: (\d+)/) { $d2 = $1 * 1024; next }
014}
015$d1 = int($d1);
016$d2 = int($d2);
017if ($ARGV[0] eq "hits") {
018    print "$d1\n";
019    print "$d1\n";
020} elsif ($ARGV[0] eq "bytes") {
021    print "$d2\n";
022    print "$d2\n";
023}
024print "$up\n";
025print "$server";

Il faut bien entendu activer le module Apache "/etc/apache2/mods-enabled/status.conf"

Le fichier de configuration MRTG /etc/mrtg/mrtg.apache2-traffic.cfg :

Script avec 17 lignes

001#---------Apache2 Traffic-----------------------
002# https://www.xenetis.org/installation_monitoring_mrtg_snmp_debian.html
003WorkDir:/var/pro/mrtg/router/
004Target[apache2_traffic]: `/etc/mrtg/apache2.pl bytes`
005Options[apache2_traffic]: nopercent, growright, noinfo, nobanner, noi
006PageTop[apache2_traffic]: <h1>Traffic Apache</h1>
007MaxBytes[apache2_traffic]:16000
008AbsMax[apache2_traffic]:20000
009kMG[apache2_traffic]: K,M,G
010YLegend[apache2_traffic]: octets/s
011ShortLegend[apache2_traffic]: o/s
012LegendO[apache2_traffic]: Traffic Apache:
013Legend2[apache2_traffic]: Traffic Apache
014Title[apache2_traffic]: Traffic du serveur Apache
015WithPeak[apache2_traffic]: wmy
016Legend4[apache2_traffic]: Traffic max Apache
017#------------End Apache2 Traffic------------------
apache2_traffic Traffic Graph

Traffic (hits) :

Le fichier de configuration MRTG /etc/mrtg/mrtg.apache2-hits.cfg :

Script avec 14 lignes

001#---------Apache2 hits-----------------------
002WorkDir:/var/pro/mrtg/router/
003Target[apache2_hits]: `/etc/mrtg/apache2.pl hits`
004Options[apache2_hits]: perhour, nopercent, growright, noinfo, nobanner, noi
005PageTop[apache2_hits]: <h1>Hits Apache</h1>
006MaxBytes[apache2_hits]: 1000000
007YLegend[apache2_hits]: hits/minute
008ShortLegend[apache2_hits]: hits/min
009LegendO[apache2_hits]: Hits:
010Legend2[apache2_hits]: Hits per minute
011Legend4[apache2_hits]: Hits per minute max
012Title[apache2_hits]: Hits Apache 
013WithPeak[apache2_hits]: wmy
014#------------End Apache2 Hits------------------
apache2_hits Traffic Graph

MySQL (Bases de données)

Requêtes MySQL sur DB1

Le script /etc/mrtg/mysql-stats.sh :

Script avec 24 lignes

001#!/bin/bash
002# https://www.webmaster-hub.com/topic/17728-activit%C3%A9-mysql-sur-les-graphs-mrtg/
003
004# need a user and password? add it here then.
005mysqlcmd="/usr/bin/mysqladmin -h db1.lan -u user_read_stats --password=ton_super_mot_de_passe_super_long_impossible_a_memoriser extended-status";
006
007# dont edit below this line unless you know what you're doing.
008# -----------------------------------------------------------
009
010function get_data {
011       data=`$mysqlcmd`;
012       questions=`echo "$data"|grep 'Questions'|awk -F " " '{print $4}'`;
013       uptime=`echo "$data"|grep 'Uptime '|awk -F " " '{print $4}'`;
014       cache=`echo "$data"|grep 'Qcache_hits'|awk -F " " '{print $4}'`;
015}
016
017function output_data {
018       echo "$questions";
019       echo "$cache";
020       echo "`expr $uptime / 86400` jours";
021       echo "MySQL Server DB1";
022}
023get_data;
024output_data

Le fichier de configuration MRTG /etc/mrtg/mrtg.mysql.cfg :

Script avec 14 lignes

001#----------- Mysql Questions---------------------
002WorkDir:/var/pro/mrtg/router/
003Target[db1_mysql]: `/etc/mrtg/mysql-stats.sh`
004PageTop[db1_mysql]: <h1>Requêtes MySQL sur DB1</h1>
005Options[db1_mysql]: growright, nopercent
006MaxBytes[db1_mysql]: 100
007Title[db1_mysql]: Requêtes MySQL sur DB1
008YLegend[db1_mysql]: Requêtes
009ShortLegend[db1_mysql]: q/s
010Legend1[db1_mysql]: Requêtes exécutées
011Legend2[db1_mysql]: Cache hits
012LegendI[db1_mysql]: Questions:
013LegendO[db1_mysql]: Cache hits:
014#----------- Mysql Questions ---------------------
db1_mysql Traffic Graph

MYSQL queries count

Le fichier de configuration MRTG /etc/mrtg/mrtg.mysql-query.cfg :

Script avec 14 lignes

001#----------- Mysql Query ---------------------
002WorkDir:/var/pro/mrtg/router/
003Target[mysql_queries]: `/usr/bin/mysqladmin -h db1.lan -u user_read_stats --password=ton_super_mot_de_passe_super_long_impossible_a_memoriser  ver|awk '/Qu/{q=$4;s=$7}/Up/{u=$0}/Se/{v=$3}END{print q"n"s"n"u"nMYSQL version "v}'|sed 's/Uptime:[[:space:]]+//'`
004Options[mysql_queries]: nopercent, growright, integer, perminute, pngdate
005MaxBytes[mysql_queries]: 250000
006Title[mysql_queries]: MYSQL queries count
007PageTop[mysql_queries]: <h1>MYSQL queries count</h1>
008ShortLegend[mysql_queries]: q/m
009YLegend[mysql_queries]: Count
010LegendI[mysql_queries]: queries
011LegendO[mysql_queries]: slow queries
012Legend1[mysql_queries]: queries
013Legend2[mysql_queries]: slow queries
014#----------- Mysql Query ---------------------
mysql_queries Traffic Graph

Bytes MySQL sur DB1

Le script /etc/mrtg/mysql-stats-bytes.sh :

Script avec 24 lignes

001#!/bin/bash
002# https://www.webmaster-hub.com/topic/17728-activit%C3%A9-mysql-sur-les-graphs-mrtg/
003
004# need a user and password? add it here then.
005mysqlcmd="/usr/bin/mysqladmin -h db1.lan -u user_read_stats --password=ton_super_mot_de_passe_super_long_impossible_a_memoriser extended-status";
006
007# dont edit below this line unless you know what you're doing.
008# -----------------------------------------------------------
009
010function get_data {
011       data=`$mysqlcmd`;
012       Bytes_received=`echo "$data"|grep 'Bytes_received'|awk -F " " '{print $4}'`;
013       uptime=`echo "$data"|grep 'Uptime '|awk -F " " '{print $4}'`;
014       Bytes_sent=`echo "$data"|grep 'Bytes_sent'|awk -F " " '{print $4}'`;
015}
016
017function output_data {
018       echo "$Bytes_received";
019       echo "$Bytes_sent";
020       echo "`expr $uptime / 86400` jours";
021       echo "MySQL Server DB1";
022}
023get_data;
024output_data

Le fichier de configuration MRTG /etc/mrtg/mrtg.mysql-bytes.cfg :

Script avec 19 lignes

001#--------------- MySQL Bytes -----------------
002WorkDir:/var/pro/mrtg/router/
003Target[db1_bytes_mysql]: `/etc/mrtg/mysql-stats-bytes.sh`
004PageTop[db1_bytes_mysql]: <h1>Bytes MySQL sur DB1</h1>
005Options[db1_bytes_mysql]: bits, growright, nopercent, nobanner
006#Options[db1_bytes_mysql]: growright, nopercent, noinfo, nobanner, noi
007#MaxBytes[db1_bytes_mysql]: 12500000
008MaxBytes[db1_bytes_mysql]: 10000000000
009#MaxBytes[db1_bytes_mysql]: 3433771833
010kMG[db1_bytes_mysql]: K,M,G
011#kilo[db1_bytes_mysql]: 1024
012Title[db1_bytes_mysql]: Bytes MySQL sur DB1
013YLegend[db1_bytes_mysql]: Bytes per second
014ShortLegend[db1_bytes_mysql]: B/s
015Legend1[db1_bytes_mysql]: Bytes received
016Legend2[db1_bytes_mysql]: Bytes sent
017LegendI[db1_bytes_mysql]: Bytes received:
018LegendO[db1_bytes_mysql]: Bytes sent:
019#--------------- MySQL Bytes -----------------
mysql_queries Traffic Graph

Bien sûr pour générer les graphiques il faut ajouter le refresh toutes les 5 minutes aux tâches planifiées, par exemple :

Script avec 12 lignes

001$ crontab - l
002
003# MRTG
004*/5 * * * * /usr/bin/indexmaker --output /var/pro/mrtg/router/index.html /etc/mrtg.cfg --nolegend 2>/dev/null 2>&1
005# ;)
006*/5 * * * * /usr/bin/env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cpu.cfg 2>/dev/null 2>&1
007*/5 * * * * /usr/bin/env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.packets-in-out.cfg 2>/dev/null 2>&1
008*/5 * * * * /usr/bin/env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.apache2-traffic.cfg 2>/dev/null 2>&1
009*/5 * * * * /usr/bin/env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.apache2-hits.cfg 2>/dev/null 2>&1
010*/5 * * * * /usr/bin/env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.mysql.cfg 2>/dev/null 2>&1
011*/5 * * * * /usr/bin/env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.mysql-query.cfg 2>/dev/null 2>&1
012*/5 * * * * /usr/bin/env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.mysql-bytes.cfg 2>/dev/null 2>&1

C'est tout ;)

Romain.



Liens utiles :






Author of the page

O.Romain.Jaillet-ramey

O.Romain.Jaillet-ramey

  • Firstname : Olivier Romain Luc
  • Lastname : : Jaillet-ramey
  • Arrived on tuesday 19 october 1976 (1976/10/19 00:00)
    47 years activity !

Translate this page with Google

Firefox Nighlty

Our friends from Framasoft are interested in Mozilla and asked them questions about Nightly: Firefox Night-club, free entry !



ZW3B.Net



Load page: 6.4808819293976