Name : BETA-TESTERS
Project name : ZW3B-API-BETA-TESTERS
Authorized. - 200 - Client API Name and Origin Wildcard OK
Mes graphiques MRTG (stats serveurs).
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
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);
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];';
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------------------
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------------------
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 ---------------------
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 ---------------------
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 -----------------
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.