Munin
De OpenWikiBSD.
Un suivi en temps réel des charges CPU,disque etc...
Pas un système d'alerte à la Nagios, mais un joli cracheur des graphes.
Une bonne base de départ, ici.
Principe :
One master to rule them all !!
Sommaire |
Serveur : Qui aura l'interface ouebe
apt-get install munin munin-node
Ajouter les clients dans /etc/munin/munin.conf
[bcdiX] address @IP use_node_name yes
a2ensite
Sous Debian Squeeze, ajouter :
<directory /var/cache/munin/www> allow from all </directory>
à /etc/apache2/sites-enabled/000-default
ou à /etc/munin.apache2.conf si virtualhosts
Sinon Error 403
/etc/init.d/apache2 reload
Client
apt-get install munin-node munin-plugins-extra
ou
pkg_add p5-LWP-UserAgent-Determined munin-node
Le Fiere wall
# Autorise munin /sbin/iptables -A INPUT -i interface -p tcp --dport 4949 -j ACCEPT
ou
pass in quick on $LAN_IF inet proto tcp from $SRV_MUNIN to any port 4949 keep state
Autoriser le serveur à se connecter sur le client , port 4949 (par défaut)
Ajouter au fichier /etc/munin/munin-node.conf la ligne correspondant au serveur munin :
allow ^IP\.IP\.0\.1$
Forcément en regexp !
/etc/init.d/munin-node restart
Les points à surveiller
munin-node-configure --shell
Il faudra patienter 5 minutes, au maximum.
A la fin :
apache2ctl restart
Attention, la communication entre le client et le serveur munin se fait en clair.
Issu d'un tcpdump sur le port TCP/4949:
.......U........ 0x0020: 8018 0227 92c4 0000 0101 080a 0ad2 ce58 ...'...........X 0x0030: 0ad6 95ce 6665 7463 6820 6170 6163 6865 ....fetch.apache 0x0040: 5f61 6363 6573 7365 730a _accesses. IP Client.munin > SRV.57545: tcp 23 0x0000: 4500 004b 357d 4000 4006 f105 0a08 001a E..K5}@.@....... 0x0010: 0a08 0001 1355 e0c9 b3e9 bab5 b0a1 c3a5 .....U.......... 0x0020: 8018 005b a363 0000 0101 080a 0ad6 95e7 ...[.c.......... 0x0030: 0ad2 ce58 6163 6365 7373 6573 3830 2e76 ...Xaccesses80.v 0x0040: 616c 7565 2034 3136 3735 0a alue.41675.
Néanmoins, vous pouvez utiliser les capacités TLS de munin. (man munin.conf) pour chiffre le tout.
Apache 1.3
- Sous OpenBSD :
Modifier le /var/www/conf/httpd.conf
Décommenter
#ExtendedStatus On
Décommenter la directive server-status et autoriser le serveur Munin
#<Location /server-status> # SetHandler server-status # Order deny,allow # Deny from all # Allow from .your_domain.com #</Location>
Devient
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from @IP_SRV_MUNIN
</Location>
apachectl stop apachectl starssl
Munin, maintenant
ln -s /usr/local/libexec/munin/plugins/apache_volume /etc/munin/plugins/apache_volume
ln -s /usr/local/libexec/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
ln -s /usr/local/libexec/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
kill -HUP `ps ax |grep munin |awk '{print $1}'`
- Sous Debian
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 /etc/init.d/munin restart
Apache2
a2enmod status a2enmod info
echo "<Location /server-status> SetHandler server-status Order Deny,Allow Allow from 127.0.0.1 Allow from @IP_SRV_Nagios_Munin Deny from All </Location>" >> /etc/apache2/httpd.conf
echo " ExtendedStatus On " >> /etc/apache2/apache2.conf
apache2ctl restart
Fini pour un client Nagios. Pour le client Munin, il faut ajouter :
munin-node-configure --shell 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
Commandes qu'il faut copier coller
Vous devez obtenir :
munin-node-configure |grep apache apache_accesses | yes | apache_processes | yes | apache_volume | yes |
/etc/init.d/munin-node restart
Ajouter un plugin de surveillance
Linux
- Copier le plugin dans /etc/munin/plugins
- L'ajouter dans /etc/munin/plugin-conf.d/munin-node
munin-node-configure --shell /etc/munin/plugins/PLUGIN config /etc/init.d/munin-node restart
OpenBSD
- Copier le plugin dans /etc/munin/plugins
- L'ajouter dans /etc/munin/plugin-conf.d/openbsd-packages
munin-node-configure --shell /etc/munin/plugins/PLUGIN config
Samba
Téléchargez Fichier:Samba.txt renommez-le et en samba.
samba configure /etc/init.d/munin-node restart
OpenLdap
FreeRadius
Ce plugin configuré avec [ces modifications ] de syslog permettent de suivre les cx/deconnexions, etc..
Nagios
Munin surveille Nagios
J'ai modifié le fichier de log
BackupPC
Télécharger le plugin
tar zxvf backuppc.tar.gz mv munin-plugins-backuppc-1.2/backuppc /usr/share/munin/plugins/ rm -rf munin-plugins-backuppc-1.2/ ln -s /usr/share/munin/plugins/backuppc backuppc chown root.root /usr/share/munin/plugins/backuppc echo " [backuppc] user backuppc group backuppc " >> /etc/munin/plugin-conf.d/munin-node /etc/init.d/munin-node restart
J'ai du ajouter ce script en crontab. Le test munin se basant sur un fichier LOG qui n'existe pas en debian squeeze.
#!/bin/bash
REP=/var/lib/backuppc/pc
for PC in `ls $REP`
do echo $REP/$PC
LOGFILE=`ls -lht $REP/$PC/LOG.* | awk 'NR>1{exit};1' | awk '{ print $NF }' |cut -d"/" -f7`
cp $REP/$PC/$LOGFILE $REP/$PC/LOG
chown backuppc.backuppc $REP/$PC/LOG
done
A mettre dans la crontab toutes les ..5 (?) minutes
Météo
- Télécharger le le plugin
gunzip weather_2.gz mv weather_ /usr/share/munin/plugins/weather_ ln -s /usr/share/munin/plugins/weather_ weather_XXXXXX /etc/init.d/munin-node restart
où XXXXX est le code de votre lieu à l'adresse [2]
Si le plugin affiche Unknown pour la ville :
perl -pi -e 's/Unknown/VILLE/' /etc/munin/plugins/weather_XXXXXX /etc/init.d/munin-node restart
Pf
- Télécharger le plugin
gunzip pf-1.gz mv pf-1 pf chmod 755 pf mv pf /usr/local/libexec/munin/plugins/ cd /etc/munin/plugins ln -s /usr/local/libexec/munin/plugins/pf pf echo "[pf] user root " >> /etc/munin/plugin-conf.d/openbsd-packages
Pf juste les paquets IPV4/IPv6
- Télécharger le plugin
gunzip pf_ipv4_ipv6_packets-v1.gz chmod 755 pf_ipv4_ipv6_packets-v1 mv pf_ipv4_ipv6_packets-v1 pf_ipv4_ipv6 mv pf_ipv4_ipv6 /usr/local/libexec/munin/plugins/ cd /etc/munin/plugins ln -s /usr/local/libexec/munin/plugins/pf_ipv4_ipv6 pf_ipv4_ipv6 echo "[pf_ipv4_ipv6 ] user root " >> /etc/munin/plugin-conf.d/openbsd-packages munin-node-configure --shell
kill -HUP `ps ax |grep munin|cut -d" " -f1`
ou, sous 4.9
/etc/rc.d/munin-node restart
SSH
- Télécharger le plugin
gunzip sshd_log mv sshd_log-1 sshd_log chmod 755 sshd_log dos2unix sshd_log mv sshd_log /usr/local/libexec/munin/plugins/ ln -s /usr/local/libexec/munin/plugins/sshd_log sshd_log echo " [sshd_log] user root group root env.logfile /var/log/messages env.category users " >> etc/munin/plugin-conf.d/munin-node
Dovecot
- Télécharger le paquet
- Merci pour l'idée.
- Pour OpenBSD, je l'ai modifié afin qu'il ..fonctionne juste !. C'est [ici]
mv dovecot.sh /etc/munin/plugins/dovecot echo "[dovecot] env.logfile /var/log/maillog env.statefile /var/run/munin/plugin-dovecot.state " >> /etc/munin/plugin-conf.d/openbsd-packages
chmod 755 /etc/munin/plugins/dovecot chown root._munin /var/run/munin/ chmod -R g+w /var/run/munin/ chown root._munin /var/log/maillog chmod g+r /var/log/maillog /etc/rc.d/munin_node restart
La partie
chown root._munin /var/run/munin/ chmod -R g+w /var/run/munin/ chown root._munin /var/log/maillog chmod g+r /var/log/maillog
devant être relancée à chaque redémarrage de la machine, ou du démon syslog
Postfix
Sur munin_exchange, il y a le choix. J'aime bien celui là : postfix_stats
Wget le paquet dos2unix download mv download postfix_stats
wget http://jimsun.linxnet.com/downloads/pflogsumm-1.1.1.tar.gz
tar zxvf pflogsumm-1.1.1.tar.gz cd pflogsumm-1.1.1 cp pflogsumm.pl /usr/local/bin/pflogsumm chown bin:bin /usr/local/bin/pflogsumm chmod 755 /usr/local/bin/pflogsumm
perl -MCPAN -e 'install Date::Calc'
chmod g+r /var/log/maillog
echo "
[postfix_stats] user _postfix " >> /etc/munin/plugin-conf.d/openbsd-packages
- Modifier le plugins :
/usr/local/bin/pflogsumm --smtpd_stats -d today /var/log/maillog /var/log/maillog.0.gz | head -n 15 > $TMP
Drupal
Monitorer le nombre d'articles et d'utilisateurs, pourquoi pas . L'idée est tirée d'ici et modifiée pour ..marcher chez moi .
Vous installez le module te suivez les instructions ou :
- Les nodes :
#!/usr/local//bin/bash
# Drupal munin plugin - This script was generated by the munin Drupal module.
# Nodes
# Variables
CONF_MYSQL_USER="xxxxxx"
CONF_MYSQL_PASS="xxxxxxx"
CONF_DATABASE="xxxxxxx"
SOCK=" --socket=xxxxxxx/mysql.sock "
#SOCK=""
#Moi mon MySQL utilise des sockets///
# config settings
case $1 in
config)
cat <<'EOM'
graph_title Content statistics
graph_vlabel Amount
graph_category Drupal
curnodes.label Existing nodes
curnodes.type GAUGE
curcmnt.label Existing comments
curcmnt.type GAUGE
newnodes.label New nodes
newnodes.type GAUGE
newcmnt.label New Comments
newcmnt.type GAUGE
EOM
exit 0;;
esac
# Stats for Existing nodes
# Number of existing nodes on this site.
echo "select count(nid) from node" | mysql --user=$CONF_MYSQL_USER --password=$CONF_MYSQL_PASS --database $CONF_DATABASE $SOCK | tail -n+2 | {
read VALUE ; echo "curnodes.value $VALUE.00"
}
# Stats for Existing comments
# Number of existing comments on this site.
echo "select count(cid) from comments" | mysql --user=$CONF_MYSQL_USER --password=$CONF_MYSQL_PASS --database $CONF_DATABASE $SOCK | tail -n+2 | {
read VALUE ; echo "curcmnt.value $VALUE.00"
}
# Stats for New nodes
# Number of new nodes on this site.
echo "select count(nid) from node where unix_timestamp() - created < 300" | mysql --user=$CONF_MYSQL_USER --password=$CONF_MYSQL_PASS --database $CONF_DATABASE $SOCK | tail -n+2 | {
read VALUE ; echo "newnodes.value $VALUE.00"
}
# Stats for New Comments
# Number of new comments on this site.
echo "select count(cid) from comments where unix_timestamp() - timestamp < 300" | mysql --user=$CONF_MYSQL_USER --password=$CONF_MYSQL_PASS --database $CONF_DATABASE $SOCK | tail -n+2 | {
read VALUE ; echo "newcmnt.value $VALUE.00"
}
- Les users :
#!/usr/local/bin/bash
# Drupal munin plugin - This script was generated by the munin Drupal module.
# Users
# Variables
CONF_MYSQL_USER="xxxxxx"
CONF_MYSQL_PASS="xxxxxxx"
CONF_DATABASE="xxxxxxx"
SOCK=" --socket=xxxxxxx/mysql.sock "
#SOCK=""
# config settings
case $1 in
config)
cat <<'EOM'
graph_title User information
graph_vlabel Nombre
graph_category Drupal
curuser.label Currently logged in user
curuser.type GAUGE
newuser.label New users
newuser.type GAUGE
EOM
exit 0;;
esac
# Stats for Currently logged in user
# This item shows the number of currently logged in users.
echo "select count(uid) from users where unix_timestamp() - access < 300" | mysql --user=$CONF_MYSQL_USER --password=$CONF_MYSQL_PASS --database $CONF_DATABASE $SOCK | tail -n+2 | {
read VALUE ; echo "curuser.value $VALUE.00"
}
# Stats for New users
# This item shows the number of users that have been created.
echo "select count(uid) from users where unix_timestamp() - created < 300" | mysql --user=$CONF_MYSQL_USER --password=$CONF_MYSQL_PASS --database $CONF_DATABASE $SOCK | tail -n+2 | {
read VALUE ; echo "newuser.value $VALUE.00"
}
Bind
- Wget le paquet
- Installez rndc
- Bind est chrooté, il faut rajouter le fichier à lire par le process munin :
mkdir -p /var/named/var/run chown -R named.named /var/named/var/run/ chmod -R ug+w /var/named/var/run/
- Ajoutez dans la partie options :
statistics-file "/var/run/named.stats"; one-statistics yes ;
- On relance et on demande les stats :
rndc reload rndc stats
et le fichier se remplit.
- Installez le paquet perl:
perl -MCPAN -e 'install Digest::MD5'
OpenBSD spécifique
pkg_add munin-node
Remarque : Depuis la 4.9, cette série de commandes n'est plus nécessaire.
echo "if [ -x /usr/local/sbin/munin-node ]; then
install -d -o _munin /var/run/munin
echo -n ' munin-node'; /usr/local/sbin/munin-node
fi
" >> /etc/rc.local
install -d -o _munin /var/run/munin echo -n ' munin-node' /usr/local/sbin/munin-node
à la place le script est désormais :
/etc/rc.d/munin-node {start|restart..}
FreeBSD spécifique
cd /usr/ports/sysutils/munin-node
make config install clean
echo 'munin_node_enable="YES"'>> /etc/rc.conf
/usr/local/etc/rc.d/munin-node onestart
- fichier de config : /usr/local/etc/munin/munin-node.conf
- Générer les sondes munin-node-configure --shell et copy&paste le résultat, puis relancer munin-node
ZFS
- Télécharger le paquet
mv ZFS_statistics_for_FreeBSD-v1 ZFS_statistics_for_FreeBSD-v1.tar cp ZFS_statistics_for_FreeBSD-v1.tar /usr/local/etc/munin/plugins/ tar xvf ZFS_statistics_for_FreeBSD-v1.tar rm ZFS_statistics_for_FreeBSD-v1.tar chown root.wheel zfs_* chown root zfs_* chgrp wheel zfs_*
- Relancer munin-node
- Installer zfs-stats
cd /usr/ports/sysutils/zfs-stats/ make config install clean
IPhone spécifique
Et oui, on peut monitorer beaucoup de trucs inutiles avec Munin..
Tiré d'ici
apt-get install --reinstall perl p5-Getopt-Long p5-Exporter p5-lib p5-IO p5-AutoLoader p5-XSLoader p5-Net-Server lynx http://sourceforge.net/projects/munin/files/munin%20stable/1.4.5/munin-1.4.5.tar.gz tar zxvf munin-1.4.5.tar.gz cd munin-1.4.5 perl -pi -e 's/USER := munin/USER := mobile/' Makefile.config perl -pi -e 's/GROUP := munin/GROUP := mobile/' Makefile.config make make install-common-prime install-node-prime install-plugins-prime /opt/munin/sbin/munin-node-configure --shell --families=contrib,auto | sh perl -pi -e 's/user root/user mobile/' /etc/opt/munin/munin-node.conf perl -pi -e 's/group root/group mobile/' /etc/opt/munin/munin-node.conf
- Ajouter l'@IP du serveur Munin dans /etc/opt/munin/munin-node.conf
- Ne pas oublier de mettre le host_name iphone-de-XXXXX dans /etc/opt/munin/munin-node.conf . Attention à la casse.
/opt/munin/sbin/munin-node
Avoir un oeil sur les durées d'appel
Coller ce script dans /etc/opt/munin/plugins
#!/bin/bash
#Philippe Schwarz
#GPL v3
# Mars 2011
# Munin plugin to log call history of IPhone over the 24 last hours
# Telco ''offers'' 3 free numbers, they're computed separetly
#Pour les 3 numéros gratuits, je vire le préfixe pour éviter les ennuis entre 06 et +336
# 3 Telcos offered Numbers. Only the last 8 digits
FREENUM1="MON_NUM1"
FREENUM2="MON_NUM1"
FREENUM3="MON_NUM1"
BASE=/private/var/wireless/Library/CallHistory/call_history.db
#On calcule sur les dernières 24h
H24=`echo \`date +"%s"\` - 86400 |bc`
case $1 in
config)
cat <<'EOM'
graph_category Phone
graph_title 24h Call Log
graph_vlabel Duration of Calls
graph_order Incoming_Calls Outgoing_Calls Outgoing_Free_Calls Outgoing_Non_free_Calls
Incoming_Calls.label Incoming_Calls
Outgoing_Calls.label Outgoing_Calls
Outgoing_Free_Calls.label Outgoing_Free_Calls
Outgoing_Non_free_Calls.label Outgoing_Non_free_Calls
EOM
exit 0;;
esac
echo -n "Incoming_Calls.value "
IC=`sqlite3 $BASE "select sum(duration) from call where flags=4 and date > $H24 "`
if [ "$IC" == "" ]
then IC=0
fi
echo $IC / 60 |bc
echo -n "Outgoing_Calls.value "
OC=`sqlite3 $BASE "select sum(duration) from call where flags=5 and date > $H24 "`
if [ "$OC" == "" ]
then OC=0
fi
echo $OC / 60 |bc
echo -n "Outgoing_Free_Calls.value "
OCF=`sqlite3 $BASE "select sum(duration) from call where ( address like \"%$FREENUM1\" or address like \"%$FREENUM2\" or address like \"%$FREENUM3\") and flags=5 and date > $H24"`
if [ "$OCF" == "" ]
then OCF=0
fi
echo $OCF / 60 |bc
echo -n "Outgoing_Non_free_Calls.value "
ONFC=`sqlite3 $BASE "select sum(duration) from call where flags=5 and address not like \"%$FREENUM1\" and address not like \"%$FREENUM2\" and address not like \"%$FREENUM3\" and date > $H24"`
if [ "$ONFC" == "" ]
then ONFC=0
fi
echo $ONFC / 60 |bc
On obtient ça :
Sécuriser les flux et authentifier mutuellement
Tiré d'ici
On va chiffrer et authentifier la connexion de manière bi-directionnelle; je m'explique :
- Le serveur sera certain de bien parler au client, sans aucune possibilité pour quelqu'un d'autre de se faire passer pour le client.
- de même, le client sera certain de l'identité du serveur.
- Enfin le flux de données sera chiffré et illisible pour un tiers.
- vous créez vos certificats et clés
- Il vous faut pour le client comme pour le serveur :
- La clé de serveur au format .pem, sans passphrase, avec le certificat.
- Le certificat de serveur au format .pem, avec la clé, avec l'empreinte.
- Le certificat au format .pem de l'AC.
Sous OpenBSD :
pkg_add p5-Net-SSLeay
Sous Debian
apt-get install libnet-ssleay-perl
Sur le client
Dans munin-node.conf
tls paranoid tls_verify_certificate yes tls_private_key /etc/munin/client.key.pem tls_certificate /etc/munin/client.crt.pem tls_ca_certificate /etc/munin/cacert.pem tls_verify_depth 5
Sur le serveur
Dans munin.conf
tls paranoid tls_verify_certificate yes tls_private_key /etc/munin/serveur.key.pem tls_certificate /etc/munin/serveur.crt.pem tls_ca_certificate /etc/munin/cacert.pem tls_verify_depth 5
Tests & config
Une fois TLS activé de manière obligatoire,de chaque côté :
telnet @client 4949 Trying @client... Connected to @client. Escape character is '^]'. # munin node at dirac.schwarz-fr.net list # I require TLS. Closing. Connection closed by foreign host.
Il est obligatoire de causer TLS avec celui-là...
Si vous souhaitez ne pas causer TLS avec certains, ajoutez la directive
tls disabled
dans leur partie sur le serveur dans munin.conf.
Debug
- Votre client n'apparait pas dans les machines surveillées.
- Patientez ! Jusqu'à deux cycles (2X5 minutes) sont parfois nécessaires.
- Il faut que les deux commandes suivantes renvoient exactement le même nom, avec la même casse!!
Depuis le serveur
telnet IP_CLIENT 4949 Trying IP_CLIENT...iphone-de-XXXXX Connected to IP_CLIENT. Escape character is '^]'. # munin node at iphone-de-XXXXX
Le nom attendu est donc iphone-de-XXXXX
Depuis le client
grep host_name /etc/opt/munin/munin-node.conf host_name iphone-de-XXXX


