Outils pour utilisateurs

Outils du site


Panneau latéral

Bienvenu,

Bonne lecture.

docs:monitoring:munin

Munin

munin (Master)

munin-node (Slave)

aptitude install munin-node munin-plugins-extra

Authoriser les access depuis le munin-master

Editer le fichier /etc/munin/munin-node.conf et ajouter la ligne suivante où 77.72.90.72 correspondant à l'ip du master

allow ^77\.72\.90\.72$

Si un firewall est configuré il faut également authoriser les connections TCP sur le port 4949

Les plugins

Configuration de base

Pour connaitre les plugins applicable à la machine on peut utiliser la commande suivante :

munin-node-configure

Si vous avez juste installer munin-node (sans munin) il manque les dependances python et vous aurez ce message d'erreur lors de l'execution de munin-node-configure, et aucun plugins ne sera linker après installation :

# Got junk from smart_: /usr/bin/env: python: No such file or directory

Pour le résoudre, installer les dependances necessaire, reconfigurer munin-node, et créer les liens symboliques :

aptitude install python python-minimal python2.5 python2.5-minimal
dpkg-reconfigure munin-node
munin-node-configure –shell > /tmp/munin.sh
sh /tmp/munin.sh
/etc/init.d/munin-node restart

Configurations des plugins

Traffic d'une IP distante

ln -s /usr/share/munin/plugins/ip_ /etc/munin/plugins/ip_8.8.8.8
iptables -I INPUT -s 8.8.8.8
iptables -I OUTPUT -d 8.8.8.8

Traffic d'une IP locale

ln -s /usr/share/munin/plugins/ip_ /etc/munin/plugins/ip_10.0.0.1
iptables -I INPUT -d 10.0.0.1
iptables -I OUTPUT -d 10.0.0.1

Ajouter des plugins

On peut trouver tout un tas de plugins pour surveiller diverses services ici : http://muninexchange.projects.linpro.no/

Pour tous les plugins, si l'installation ne fonctionne pas, regarder le fichier de log /var/log/munin/munin-node.log

amavis

Le plugin amavis a besoin du package “logtail”:

aptitude install logtail

On fait le lien symbolique

ln -s /usr/share/munin/plugins/amavis /etc/munin/plugins/amavis

Editer le fichier /usr/share/munin/plugins/amavis comme suis, afin que de :

  1. place le graph dans la section postfix
  2. graph les differents type de detection (Blocked SPAM, Passed SPAMMY, Blocked BANNED, Passed CLEAN, Blocked INFECTED)
#!/bin/sh
#
# Plugin to monitor the amavis mail filter.
#
# Usage: Place in /etc/lrrd/client.d/ (or link it there  using ln -s)
#
# Parameters understood:
#
#       config   (required)
#       autoconf (optional)
#
# Config variables:
#
#       amavislog    - file where amavis logs are written
#

mktempfile () {
mktemp -p /tmp/ $1
}

AMAVIS_LOG=${logfile:-/var/log/mail.info}
LOGTAIL=${logtail:-`which logtail`}
STATEFILE=/var/lib/munin/plugin-state/amavis.offset

if [ "$amavislog"  ]; then AMAVIS_LOG=$amavislog ; fi

if [ "$1" = "autoconf" ]; then
        if [ -f "${AMAVIS_LOG}" -a -n "${LOGTAIL}" -a -x "${LOGTAIL}" ] ; then
                echo yes
                exit 0
        else
                echo no
                exit 1
        fi
fi

if [ "$1" = "config" ]; then
        echo 'graph_title Amavis filter statistics'
        echo 'graph_order clean virus banned spam_maybe spam_sure total'
        echo 'graph_category postfix';
        echo 'graph_vlabel nb'
        echo 'clean.label clean'
        echo 'virus.label virus'
        echo 'banned.label banned'
        echo 'spam_maybe.label probably spam'
        echo 'spam_sure.label surely spam'
        echo 'total.label total'
        exit 0
fi

total=U
clean=U
virus=U
banned=U
spamm=U
spams=U

TEMP_FILE=`mktempfile munin-amavis.XXXXXX`

if [ -n "$TEMP_FILE" -a -f "$TEMP_FILE" ]
then
        logtail ${AMAVIS_LOG} $STATEFILE | grep 'amavis\[.*\]:' > ${TEMP_FILE}
        total=`cat ${TEMP_FILE} | wc -l`
        virus=`grep 'Blocked INFECTED' ${TEMP_FILE} | wc -l`
        spamm=`grep 'Passed SPAMMY' ${TEMP_FILE} | wc -l`
        spams=`grep 'Blocked SPAM' ${TEMP_FILE} | wc -l`
        banned=`grep 'Blocked BANNED' ${TEMP_FILE} | wc -l`
        clean=`grep 'Passed CLEAN' ${TEMP_FILE} | wc -l`

        /bin/rm -f $TEMP_FILE
fi

echo "clean.value ${clean}"
echo "virus.value ${virus}"
echo "banned.value ${banned}"
echo "spam_maybe.value ${spamm}"
echo "spam_sure.value ${spams}"
echo "total.value ${total}"

Dans le fichier /etc/munin/plugin-conf.d/munin-node ajouter :

[amavis*]
group adm

nginx

On commence tout d'abort par configurer nginx en y ajoutant la location nginx_status dans une section server (ici la location /nginx_status/ est disponible uniquement sur le serveur qui ecoute en localhost)

server {
        listen 127.0.0.1:80;

        access_log  /var/log/nginx/localhost.access.log;

        location /nginx_status {
                stub_status on;
                access_log   off;
                allow 127.0.0.1;
                deny all;
        }
}

Et on redemarre nginx :

/etc/init.d/nginx restart

Pour les plugins de munin, on trouvera sur http://exchange.munin-monitoring.org/ tout ce que l'on à besoin :

  1. nginx_request : le nombre de requetes / sec
  2. nginx_status : le status des connexions

On recupere les scripts

wget http://wiki.queret.net/_media/docs/monitoring/nginx_request.txt -O /usr/share/munin/plugins/nginx_request
wget http://wiki.queret.net/_media/docs/monitoring/nginx_status.txt -O /usr/share/munin/plugins/nginx_status

On y met les droits d'execution :

chmod 755 /usr/share/munin/plugins/nginx_request
chmod 755 /usr/share/munin/plugins/nginx_status

On install la libww-perl si ce n'est pas déjà le cas :

apt-get install libwww-perl

Et on modifie le fichier /etc/munin/plugin-conf.d/munin-node :

vim /etc/munin/plugin-conf.d/munin-node

en y ajoutant la section suivante :

[nginx*]
env.url http://127.0.0.1/nginx_status
env.ua nginx-status-verifier/0.1
ln -s /usr/share/munin/plugins/nginx_request .
ln -s /usr/share/munin/plugins/nginx_status .

On redemarre munin-node, et c'est tout :-)

/etc/init.d/munin-node restart

apache

Vérifier que la libww-perl est installé, si ce n'est pas le cas :

apt-get install libwww-perl

Le plugins apache est livré en meme temps que munin-node, il suffit de faire les liens symboliques necessaire

ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume

Activer le module status de apache :

a2enmod status

Editer le fichier /etc/apache2/mods-enabled/status.conf et y ajouter

ExtendedStatus On

Si on veux monitorer d'autre par que le port 80 (HTTP), par exemple le port 443 (HTTPS), il faut editer le fichier /etc/munin/plugin-conf.d/munin-node et ajouter dans le section apache les ports en questions (créer la section si elle n'existe pas):

[apache*]
env.ports 80 443
env.url http://localhost:%d/server-status?auto

Redemarrer apache & munin-node :

/etc/init.d/apache2 reload
/etc/init.d/munin-node restart

rtorrent

postfix

ln -s /usr/share/munin/plugins/postfix_mailstats /etc/munin/plugins/postfix_mailstats
ln -s /usr/share/munin/plugins/postfix_mailqueue /etc/munin/plugins/postfix_mailqueue
ln -s /usr/share/munin/plugins/postfix_mailvolume /etc/munin/plugins/postfix_mailvolume

on edite le fichier /etc/munin/plugin-conf.d/munin-node pour y ajouter les sections suivantes :

[postfix_mailstats]
group adm

[postfix_mailqueue]
user (postfix)

[postfix_mailvolume]
group adm
env.logfile mail.log

mysql

ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/mysql_bytes
ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries /etc/munin/plugins/mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/mysql_threads

on edite le fichier /etc/munin/plugin-conf.d/munin-node pour y ajouter la section suivante :

[mysql*]
user root
env.mysqlopts --defaults-extra-file=/etc/mysql/debian.cnf

dovecot

bind

Les plugins bind_ & bind_rndc livré avec munin-node ne sont pas fonctionnels du à un changement d'emplacement du fichier named.stats

Nous utiliserons le script bind9_ de Jean-Samuel Reynaud dispo. sur muninexchange :

après avoir téléchargé le fichier dans /usr/share/munin/plugins/

wget http://muninexchange.projects.linpro.no/download.php?phid=820 -O /usr/share/munin/plugins/bind9_

et lui avoir mis les droits d'execution :

chmod 755 /usr/share/munin/plugins/bind9_

on ajoute le lien symbolique

ln -s /usr/share/munin/plugins/bind9_ /etc/munin/plugins/

on edite le fichier /etc/munin/plugin-conf.d/munin-node pour y ajouter une section [bind*]

[bind*]
user bind
env.bind_stat_file /var/cache/bind/named.stats
env.bind_rndc /usr/sbin/rndc

Il faut bien sur que votre serveur bind9 ainsi que rndc soit correctement configuré. Pour en être sur :

rndc status

Cela doit vous renvoyez le status du serveur bind9, sinon pour aurez un message d'erreur.

En effet le script munin effectue d'abort un rndc stats qui provoquera la mise à jour du fichier /var/cache/bind/named.stats qui sera utilisé pour récupérer les stats.

bind

On recupère 3 scripts, basé sur celui de Jean-Samuel Reynaud js.reynaud@free.fr

wget http://wiki.queret.net/_media/docs/monitoring/bind9_queries_incoming.txt -O /usr/share/munin/plugins/bind9_queries_incoming
wget http://wiki.queret.net/_media/docs/monitoring/bind9_resolver.txt -O /usr/share/munin/plugins/bind9_resolver
wget http://wiki.queret.net/_media/docs/monitoring/bind9_server_stats.txt -O /usr/share/munin/plugins/bind9_server_stats
chmod 755 /usr/share/munin/plugins/bind9_*
ln -s /usr/share/munin/plugins/bind9_queries_incoming /etc/munin/plugins/bind9_queries_incoming
ln -s /usr/share/munin/plugins/bind9_resolver /etc/munin/plugins/bind9_resolver
ln -s /usr/share/munin/plugins/bind9_server_stats /etc/munin/plugins/bind9_server_stats

On edite le fichier /etc/munin/plugin-conf.d/munin-node pour y ajouter une section [bind*]

[bind*]
user bind
env.bind_stat_file /var/cache/bind/named.stats
env.bind_rndc /usr/sbin/rndc

Il faut bien sur que votre serveur bind9 ainsi que rndc soit correctement configuré. Pour en être sur :

rndc status

Cela doit vous renvoyez le status du serveur bind9, sinon pour aurez un message d'erreur.

En effet le script munin effectue d'abort un rndc stats qui provoquera la mise à jour du fichier /var/cache/bind/named.stats qui sera utilisé pour récupérer les stats.

uptime

ln -s /usr/share/munin/plugins/uptime /etc/munin/plugins/uptime

users (session login pts + tty + pty)

Le plugins users est livré avec le package munin-plugins-extra

ln -s /usr/share/munin/plugins/users /etc/munin/plugins/users
/etc/init.d/munin-node restart

accounting traffic

Ressources :

au niveau iptables :

  iptables -N ACCT
  iptables -I FORWARD -j ACCT
  iptables -I INPUT -j ACCT
  iptables -I OUTPUT -j ACCT

  iptables -A ACCT -i eth0 -m comment --comment "=int_eth0_in=Incoming eth0 traffic"
  iptables -A ACCT -o eth0 -m comment --comment "=int_eth0_out=Outgoing eth0 traffic"

Pour recupérer les valeurs :

iptables -L ACCT -n -x -v
Chain ACCT (3 references)
    pkts      bytes target     prot opt in     out     source               destination         
  488328 40664657            all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           /* =int_eth0_in=Incoming eth0 traffic */ 
  347186 711419365            all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           /* =int_eth0_out=Outgoing eth0 traffic */

Le script accounting_ a placer dans /usr/share/munin/plugins/accounting_

wget http://wiki.queret.net/_media/docs/monitoring/accounting.txt -O /usr/share/munin/plugins/accounting_

La section dans /etc/munin/plugin-conf.d/munin-node

[accounting_*]
user root

Le lien symbolique pour recuperer les valeurs de eth0

ln -s /usr/share/munin/plugins/accounting_ /etc/munin/plugins/accounting_eth0

1-Wire

On créer le fichier /usr/share/munin/plugins/owfstemp

vim /usr/share/munin/plugins/owfstemp
#!/usr/bin/perl -w
# Plugin munin pour grapher les sondes de temperatures 1-Wire via OWFS

# Format d'appel : owfstemp_sensorid_alias (owfstemp_28.28341D020000_CLIM1)
$SENSOR=`basename $0 | cut -d "_" -f2`;
chomp($SENSOR);
$ALIAS=`basename $0 | cut -d "_" -f3`;
chomp($ALIAS);

if ($ARGV[0] and $ARGV[0] eq "config") {
	print "graph_title Temperatures for $ALIAS\n";
	print "graph_args --base 1000 --lower-limit 0\n";
	print "graph_vlabel temp in °C\n";
	print "graph_category sensors\n";
	print "graph_info This graph shows the temperature in Celsius degrees polled on the 1-wire sensors.\n";
}
print "$ALIAS.label $ALIAS\n";
my $temp=`/usr/bin/owread -s localhost:2125 /$SENSOR/temperature`;
chomp($temp);
$temp =~ s/^\s+//;
print "$ALIAS.value $temp\n";

On y met les droits correcte :

chmod 755 /usr/share/munin/plugins/owfstemp

On ajoute la sonde a munin-node :

ln -s /usr/share/munin/plugins/owfstemp /etc/munin/plugins/owfstemp_28.28341D020000_LOCAL1

Un autre script qui graph plusieurs capteurs

vim /usr/share/munin/plugins/owfstemp
#!/usr/bin/perl -w
# Plugin munin pour grapher les sondes OWFS

# tableau avec les capteurs
my @sensors=`/usr/bin/owdir -s localhost:2125 / | grep -E "^/28"`;
chomp(@sensors);

# tableau remplaçant l'ID de la sonde par un beau texte
my %translate;
$translate{"/28.FC651D020000"}="BAIE_ARRIERE_BAS";
$translate{"/28.82E503020000"}="BAIE_ARRIERE_HAUT";
$translate{"/28.01AF3E020000"}="BAIE_FACADE_HAUT";
$translate{"/28.C17C1D020000"}="BAIE_FACADE_BAS";

if ($ARGV[0] and $ARGV[0] eq "config") {
        print "graph_title Temperatures\n";
        print "graph_args --base 1000 --lower-limit 0\n";
        print "graph_vlabel temp in °C\n";
        print "graph_category sensors\n";
        print "graph_info This graph shows the temperature in Celsius degrees polled on the 1-wire sensors.\n";

        foreach (@sensors) {
                print "$translate{$_}.label $translate{$_}\n";
        }

        exit 0;
}
foreach (@sensors) {
#       print "$translate{$_}.label $translate{$_}\n";
        my $temp=`/usr/bin/owread -s localhost:2125 $_/temperature`;
        chomp($temp);
        $temp =~ s/^\s+//;
        print "$translate{$_}.value $temp\n";
}

asterisk

Editer le fichier /etc/munin/plugin-conf.d/munin-node

vim /etc/munin/plugin-conf.d/munin-node

Ajouter le bloque suivant :

[asterisk*]
user root

active calls

wget http://wiki.queret.net/_media/docs/monitoring/asterisk-active-calls.txt -O /usr/share/munin/plugins/asterisk-active-calls
chmod 755 /usr/share/munin/plugins/asterisk-active-calls
ln -s /usr/share/munin/plugins/asterisk-active-calls /etc/munin/plugins/asterisk-active-calls

sip peers

wget http://wiki.queret.net/_media/docs/monitoring/asterisk-sip-peers.txt -O /usr/share/munin/plugins/asterisk-sip-peers
chmod 755 /usr/share/munin/plugins/asterisk-sip-peers
ln -s /usr/share/munin/plugins/asterisk-sip-peers /etc/munin/plugins/asterisk-sip-peers

CPU

aptitude install cpufrequtils
ln -s /usr/share/munin/plugins/cpuspeed /etc/munin/plugins/cpuspeed

IceCast

/etc/icecast2/web/stats-detail.xsl

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="text" media-type="text/plain" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<pre>
<xsl:for-each select="source">
        <xsl:value-of select="@mount" />,<xsl:value-of select="listener_connections" />,<xsl:value-of select="server_name" />,<xsl:value-of select="listeners" />,<xsl:value-of select="server_description" />,<xsl:value-of select="artist" /> <xsl:value-of select="title" />,<xsl:value-of select="listenurl" /><xsl:text>
</xsl:text>
</xsl:for-each>
</pre>
</xsl:template>
</xsl:stylesheet>
ln -s /etc/icecast2/web/stats-detail.xsl /usr/share/icecast2/web/stats-detail.xsl 
chmod 777 /etc/icecast2/web/stats-detail.xsl

/usr/share/munin/plugins/icecast

#!/bin/bash
TFILE="/tmp/munin-icecast.$$.tmp"
wget --quiet http://localhost:8000/stats-detail.xsl -O ${TFILE}

MOUNT=${0##*/icecast_}

if [ "$1" == "config" ]; then
        echo "graph_title ${MOUNT} Icecast Listners";
        echo "graph_args --base 1000 --lower-limit 0";
        echo "graph_vlabel nb";
        echo "graph_category icecast";
        echo "graph_info This graph shows the number of listners by mount.";

        while IFS=',' read ICE_MOUNT ICE_CONN ICE_NAME ICE_LISTENERS ICE_DESCRIPTION ICE_TITLE ICE_URL
        do
                if [[ ${MOUNT} == "all" ]]; then
                        ICE_LABEL=`echo "${ICE_MOUNT}" | tr -cd '[[:alnum:]]'`
                        echo "${ICE_LABEL}.label ${ICE_MOUNT}"
                elif [[ ${ICE_MOUNT} == *${MOUNT}* ]]; then
                        ICE_LABEL=`echo "${ICE_MOUNT}" | tr -cd '[[:alnum:]]'`
                        echo "${ICE_LABEL}.label ${ICE_MOUNT}"
                fi
        done <${TFILE}

        exit 0;

else
while IFS=',' read ICE_MOUNT ICE_CONN ICE_NAME ICE_LISTENERS ICE_DESCRIPTION ICE_TITLE ICE_URL
do
        if [[ ${MOUNT} == "all" ]]; then
                ICE_LABEL=`echo "${ICE_MOUNT}" | tr -cd '[[:alnum:]]'`
                echo "${ICE_LABEL}.value ${ICE_LISTENERS}"
        elif [[ ${ICE_MOUNT} == *${MOUNT}* ]]; then
                ICE_LABEL=`echo "${ICE_MOUNT}" | tr -cd '[[:alnum:]]'`
                echo "${ICE_LABEL}.value ${ICE_LISTENERS}"
        fi
done <${TFILE}
fi

rm ${TFILE}
chmod 755 /usr/share/munin/plugins/icecast
ln -s /usr/share/munin/plugins/icecast /etc/munin/plugins/icecast_all
ln -s /usr/share/munin/plugins/icecast /etc/munin/plugins/icecast_wrp

postgres

aptitude install libdbd-pg-perl

...

Tous les dossiers de munin

  • /etc/munin/
  • /var/www/munin/
  • /var/run/munin/
  • /var/log/munin/
  • /var/lib/munin/

Ressources

docs/monitoring/munin.txt · Dernière modification: 2016/05/23 15:52 par yoann