Incron & LoggedFS

La supervision des fichiers et répertoires consiste à surveiller les fichiers (date, taille, permissions) pour y détecter des changements. Il est de coutume de réaliser cette opération avec l’un des plugins disponibles sur NagiosExchange. Il est également possible d’utiliser Monit ou Collectd 1) qui ont l’avantage de le faire en passif.

Nous allons voir maintenant deux nouvelles méthodes qui peuvent complétées avantageusement l’arsenal à notre disposition pour ce genre de choses.

:!: Cette page est une ébauche à compléter.

Ce tutoriel a été réalisé par :

Rôle Nom
Rédacteur Olivier JAN

Inotify & Incron

Inotify est un système de notification pour les systèmes de fichiers. Il permet de superviser différents évènements pouvant survenir sur ceux-ci. Il peut être utilisé pour ce genre de choses:

  • détecter des changements sur les fichiers et dans les répertoires (ex. fichiers de configuration, répertoires de mail).
  • surveiller les fichiers critiques et leur restauration automatique éventuel.
  • statistiques d’usage des fichiers.
  • gestion automatique d’action après transfert
  • backup automatique en cas de changements.

Normalement, inotify est un module pour le noyau Linux intégré depuis la version 2.6.13.

Incron permet quant à lui de déclencher des scripts et tout autres actions en fonction des évènements survenus, à la façon de cron pour le temps.

Il existe un démon appelé kfsmd fonctionnant de pair avec Inotify qui permet de journaliser les modifications apportées au système de fichiers.

Installation

Incron dépend du fait que votre noyau ait été compilé avec l’option inotify, ce qui est le cas de tous les noyaux récents. Il faut récupérer les fichiers d’entête du noyau de votre machine

sudo apt-get install linux-headers-`uname -r`

Sur mon habituel Ubuntu, le fichier inotify.h se trouve dans /usr/src/linux-headers-2.6.24-19/include/linux.

Une fois cette condition remplie, L’installation ne pose aucun problème.

make all
sudo make install

Utilisation

incrontab -t
IN_ACCESS,IN_MODIFY,IN_ATTRIB,IN_CLOSE_WRITE,IN_CLOSE_NOWRITE,\
IN_OPEN,IN_MOVED_FROM,IN_MOVED_TO,IN_CREATE,IN_DELETE,IN_DELETE_SELF,\
IN_CLOSE,IN_MOVE,IN_ONESHOT,IN_ALL_EVENTS,IN_DONT_FOLLOW,IN_ONLYDIR,IN_MOVE_SELF

par exemple, pour recharger la configuration de bind (/etc/named.conf) quand celle-ci est modifiée

/etc/named.conf IN_MODIFY /etc/init.d/bind reload

The incron table manipulator may be run under any regular user since it SUIDs. For manipulation with the tables use basically the same syntax as for the crontab program. You can import a table, remove and edit the current table.

La syntaxe de la configuration est la suivante (un ou plusieurs espaces entre chaque éléments):

<path> <mask> <command>

Where:

  • <path> is a filesystem path (each whitespace must be prepended by a backslash)
  • <mask> is a symbolic (see inotify.h; use commas for separating symbols) or numeric mask for events
  • <command> is an application or script to run on the events

La commande peut contenir ces “variables”:

    * $$ - le signe dollar
    * $@ - le chemin du système de fichiers surveillé
    * $# - the event-related file name
    * $% - the event flags (textually)
    * $& - the event flags (numerically)

The mask may additionaly contain a special symbol IN_NO_LOOP which disables events occurred during processing the event (to avoid loops).

Example: You need to run program ‘abc’ with the full file path as an argument every time a file is changed in /var/mail. One of the solutions follows:

/var/mail IN_CLOSE_WRITE abc $@/$#

Since 0.4.0 also system tables are supported. They are located in /etc/incron.d and their commands use root privileges. System tables are intended to be changed directly (without incrontab).

Intégration avec Nagios

La capacité de incron d’exécuter un script rend l’intégration on ne peut plus classique avec l’appel à un script avec argument comme l’exemple de fichier nagios.conf à mettre dans /etc/incron.d/.

/tmp IN_CLOSE_WRITE /usr/local/nagios/libexec/incron2external.sh files;;1;;$@/$#

Cet exemple de configuration surveille le répertoire /tmp et notifie toutes les fermetures de fichier après écriture.

  • files est le nom du service à impacter dans nagios.
  • 1 correspond à un WARNING
  • $@/$# récupère le chemin et le nom du fichier écrit séparé par un slash.

dans le script appelé, il faut un contenu de ce type

#!/bin/bash
# Shell script to submit incron messages to the PROCESS_SERVICE_CHECK_RESULT command
# Copyright 2008 - Olivier Jan <ojan_at_monitoring-fr_dot_org>
# Version 1.0 du 2008-12-27
 
commandfile='/usr/local/nagios/var/rw/nagios.cmd'
 
incron_data=$1
 
hostname=`echo $HOSTNAME`
service=`echo $incron_data | awk -F ";;" '{print $1}'`
state=`echo $incron_data | awk -F ";;" '{print $2}'`
message=`echo $incron_data | awk -F ";;" '{print $3}'`
 
now=`date --date="$date" +%s`
 
/usr/bin/printf "[%lu] PROCESS_SERVICE_CHECK_RESULT;$hostname;$service;$state;$message\n" $now > $commandfile
 
exit 0;

LoggedFS

Loggedfs est un système de fichiers de type fuse qui permet de jounaliser toutes les opérations faîtes sur celui-ci.

Version testée : 0.5

Installation

sudo apt-get install libxml2-dev libpcre3-dev librlog-dev libfuse-dev
make
gunzip loggedfs.1.gz
sudo make install

Retour terminal

gzip loggedfs.1
cp loggedfs.1.gz /usr/share/man/man1/
cp loggedfs /usr/bin/
cp loggedfs.xml /etc/

Fichier de configuration fourni par défaut

<?xml version="1.0" encoding="UTF-8"?>

<!-- This is a sample configuration file for loggedfs. -->
<!-- This file is not used by default, you need to use the -c option to use it. -->
<loggedFS logEnabled="true" printProcessName="true">
        <includes>
                <include extension=".*" uid="*" action=".*" retname=".*"/>
        </includes>
        <excludes>
                <!-- Do not log getattr operations -->
                <exclude extension=".*" uid="*" action="getattr" retname=".*"/>
        </excludes>
</loggedFS>

démarrer loggedfs

sudo /usr/bin/loggedfs -c /etc/loggedfs.xml -p /var

exemple de sortie dans syslog

Sep  4 00:16:28 worker3 loggedfs: 4096 bytes read from /var/log/syslog at offset 180224 {SUCCESS} [ pid = 8537 tail uid = 1000 ]
Sep  4 00:16:28 worker3 loggedfs: read 4096 bytes from /var/log/syslog at offset 184320 {SUCCESS} [ pid = 8537 tail uid = 1000 ]
Sep  4 00:16:28 worker3 loggedfs: 312 bytes read from /var/log/syslog at offset 184320 {SUCCESS} [ pid = 8537 tail uid = 1000 ]
Sep  4 00:16:28 worker3 loggedfs: read 4096 bytes from /var/log/syslog at offset 184320 {SUCCESS} [ pid = 8537 tail uid = 1000 ]
Sep  4 00:16:28 worker3 loggedfs: 569 bytes read from /var/log/syslog at offset 184320 {SUCCESS} [ pid = 8537 tail uid = 1000 ]
Sep  4 00:16:28 worker3 loggedfs: read 4096 bytes from /var/log/syslog at offset 184320 {SUCCESS} [ pid = 8537 tail uid = 1000 ]
Sep  4 00:16:28 worker3 loggedfs: 826 bytes read from /var/log/syslog at offset 184320 {SUCCESS} [ pid = 8537 tail uid = 1000 ]
Sep  4 00:16:28 worker3 loggedfs: read 4096 bytes from /var/log/syslog at offset 184320 {SUCCESS} [ pid = 8537 tail uid = 1000 ]
Sep  4 00:16:28 worker3 loggedfs: 1083 bytes read from /var/log/syslog at offset 184320 {SUCCESS} [ pid = 8537 tail uid = 1000 ]
Sep  4 00:16:28 worker3 loggedfs: read 4096 bytes from /var/log/syslog at offset 184320 {SUCCESS} [ pid = 8537 tail uid = 1000 ]

Une fois que c’est syslogé, détection par motif avec sec.

1) depuis la version 4.5
nagios/integration/incron.txt · Dernière modification: 2010/12/02 21:11 par Ludovic VALENTIN
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0