Munin

De OpenWikiBSD
Aller à : navigation, rechercher

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 !!

Serveur : Qui aura l'interface ouebe

apt-get install munin munin-node apache2

Ajouter les clients dans /etc/munin/munin.conf

[bcdiX]
   address @IP
   use_node_name yes


a2ensite

Sous Debian Squeeze, ajouter :

 echo '<directory /var/cache/munin/www>
allow from all
</directory>' >> /etc/apache2/sites-enabled/000-default

ou à /etc/munin.apache2.conf si virtualhosts

ln -s /var/cache/munin/www/ /var/www/munin

Sinon Error 403

/etc/init.d/apache2 reload


Test

su munin --shell=/bin/bash
/usr/share/munin/munin-update --nofork --debug

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..

MySQL

| Source

echo "[mysql_*]
  env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3306
  env.mysqluser munin
  env.mysqlpassword 5uperS3cr3tPassw0rd 

" >> /etc/munin/plugin-conf.d/openbsd-packages


mysql
use mysql;
CREATE USER munin@127.0.0.1 IDENTIFIED BY '5uperS3cr3tPassw0rd'
GRANT SUPER,PROCESS ON *.* TO munin@127.0.0.1;
GRANT SELECT ON mysql.* TO munin@127.0.0.1;
FLUSH PRIVILEGES;
munin-node-configure --shell
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_bin_relay_log'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_commands'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_connections'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_files_tables'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_bpool'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_bpool_act'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_insert_buf'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_io'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_io_pend'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_log'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_rows'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_semaphores'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_innodb_tnx'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_myisam_indexes'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_network_traffic'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_qcache'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_qcache_mem'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_replication'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_select_types'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_slow'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_sorts'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_table_locks'
ln -s '/usr/local/libexec/munin/plugins/mysql_' '/etc/munin/plugins/mysql_tmp_tables'

Nagios

Munin surveille Nagios

[1]

J'ai modifié le fichier de log

BackupPC

  • Télécharger le plugin dans /etc/munin/plugins/backuppc
 chmod +rxw /etc/munin/plugins/backuppc 
 /etc/init.d/munin-node restart
  • Modifier la ligne PCDIR=${pcdir:-"/var/lib/backuppc/pc"} pour qu'elle colle à votre install sur le serveur BackupPC
  • Tester
munin-run backuppc


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

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

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

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

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'


drbd

A creuser

KVM

[3]

OpenVZ

[4]

APC

[5]

Mediawiki

[6]

Moodle

https://github.com/thepurpleblob/moodle-mysql-munin

  • Sur le serveur Moodle
mysql
GRANT SELECT ON moodle.* TO moodleRead@localhost IDENTIFIED BY 'PASS'; 
GRANT SELECT ON moodle.* TO moodleRead@IPMunin IDENTIFIED BY 'PASS'; 
cd /usr/share/munin/plugins
wget https://github.com/thepurpleblob/moodle-mysql-munin/blob/master/moodle_ --no-check-certificate
 cd /etc/munin/plugins/
 ln -s /usr/share/munin/plugins/moodle_ moodle_moodle
/etc/init.d/munin-node restart


  • Sur le serveur Munin

NginX

 pkg_add  p5-LWP-UserAgent-Determined

ou

apt-get install liblwp-useragent-determined-perl


echo "[nginx*]
env.url http://localhost/nginx_status
" >> /etc/munin/plugin-conf.d/openbsd-packages


Ajouter dans chaque vhost de nginx :

location /nginx_status {
   stub_status on;    # activate stub_status module
   access_log off;    
   allow 127.0.0.1;   # restrict access to local only
   deny all;
}

Vérifier que lynx http://127.0.0.1/nginx_status fonctionne et ne renvoie pas d'erreur 404

munin-node-configure --shell
ln -s '/usr/local/libexec/munin/plugins/nginx_request' '/etc/munin/plugins/nginx_request'
ln -s '/usr/local/libexec/munin/plugins/nginx_status' '/etc/munin/plugins/nginx_status'

OpenBSD spécifique

[7]


pkg_add munin-node
/etc/rc.d/munin-node  {start|restart..}

Plugins buggués

  • Uptime va chercher dans /proc....qui n'existe pas sous OpenBSD!

FreeBSD spécifique

pkg install munin-node
echo 'munin_node_enable="YES"'>> /etc/rc.conf
/usr/local/sbin/munin-node-configure --shell | sh -x
/usr/local/etc/rc.d/munin-node onestart
  • fichier de config : /usr/local/etc/munin/munin-node.conf

ZFS

cd /usr/ports/lang/gawk/
make config install clean 
#!/usr/local/bin/bash

if [ "$1" = "autoconf" ]; then
                echo yes
                exit 0
fi

zlines=`/sbin/zpool iostat -v| wc -l|sed 's/ //g'`
ztail=`echo "-"$zlines`
ztmp=/var/run/munin/zpool_iostat
zdata=`/sbin/zpool iostat -v 1 1| tail $ztail > $ztmp`
zlist=`cat $ztmp|gawk '/alloc/ {next}; /avail/ {next}; /raid/ {next}; /mirror/ {next}; { if ( $4 >=0 ) print $1}'`
zname=`cat $ztmp|gawk '/alloc/ {next}; /avail/ {next}; /raid/ {next}; /mirror/ {next}; { if ( $4 >=0 ) print $1}'|gawk '{gsub("[^a-zA-Z0-9_]", "_", $1); print}'`
zorder=`for o in $zname; do echo $o'_read '; echo $o'_write '; done`

if [ "$1" = "config" ]; then
        echo 'graph_title zpool iostat'
        echo 'graph_args --base 1000 -l 0'
        echo 'graph_vlabel write - read KBytes/s'
        echo 'graph_category zfs'
        echo 'graph_scale no'
        echo 'graph_info This graph shows zpool iostat'
	echo 'graph_order '$zorder
	echo $zlist | tr ' ' '\n' | while read i; do
                case $i in
                *) name=`echo $i | gawk '{ gsub("[^a-zA-Z0-9_]", "_", $1); print }'` ;;
                esac
                echo $name'_read.label '$i
		echo $name'_read.type GAUGE'
		echo $name'_read.graph no'
		echo $name'_write.label '$i
		echo $name'_write.type GAUGE'
		echo $name'_write.negative '$name'_read'
        done
        exit 0
fi
echo $zlist | tr ' ' '\n' | while read iz; do
	zlabel=`echo $iz|gawk '{print $1}'`
	case $iz in
	*) name=`echo $iz | gawk '{ gsub("[^a-zA-Z0-9_]", "_", $1); print $1 }'` ;;
	esac
	echo -n $name'_read.value '
	grep '^[ ]*'$zlabel $ztmp|gawk '{print $6}'|gawk '/M/ {print strtonum($1)*1000}; /K/ {print strtonum($1)}; /[0-9]$/ {print int($1)/1000}; /^0/ {print strtonum($1)}'
	echo -n $name'_write.value '
	grep '^[ ]*'$zlabel $ztmp|gawk '{print $7}'|gawk '/M/ {print strtonum($1)*1000}; /K/ {print strtonum($1)}; /[0-9]$/ {print int($1)/1000}; /^0/ {print strtonum($1)}'
done

rm $ztmp; touch $ztmp


Obsolète

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 :

Call hist-day.png

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 de la partie TLS

Trucs

Renommer sans perdre l'historique

l'on voit que c'est simple.

service munin stop

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
    • Et le pare-feu ?
 /sbin/iptables -A INPUT -i interface -p tcp --dport 4949 -j ACCEPT
  • Vous pouvez également tester les plugins à la main
munin-run nom-du-plugin