%%
%%

\chapter{La ressource Messages}
\label{_ChapterStart15}
\index[general]{Ressource!Messages}
\index[general]{Messages Ressource}
\addcontentsline{toc}{section}{Ressource Messages}

\section{La ressource  Messages}
\label{MessageResource}
\index[general]{Ressource!Messages}
\index[general]{Messages Ressource}
\addcontentsline{toc}{section}{La ressource Messages}

La ressource Messages d\'efinit la fa\c{c}on dont les messages doivent \^etre construits 
et vers quelles destinations ils doivent \^etre transmis.

Bien que chaque {\it daemon} int\`egre un gestionnaire de messages pleinement 
fonctionnel, vous choisirez certainement de centraliser les messages appropri\'es 
des File Daemons et du Storage Daemon vers le Director. Ainsi, tous les messages 
associ\'es \`a un job donn\'e peuvent \^etre combin\'es et envoy\'es en un simple courrier 
\'electronique vers l'utilisateur, ou enregistr\'e dans quelque fichier de logs.

Chaque message g\'en\'er\'e par un {\it daemon} Bacula poss\`ede un type associ\'e tel 
que INFO, WARNING, ERROR, FATAL, etc. La ressource Messages vous permet de 
stipuler les types de messages que vous voulez voir, et o\`u les envoyer. De plus, 
un message peut \^etre exp\'edi\'e vers plusieurs destinations. Par exemple, vous 
pouvez faire en sorte quque tous les messages d'erreur soient consign\'es dans un 
fichier de logs tout en vous \'etant envoy\'es par courrier \'elecronique. En 
d\'efinissant plusieurs ressources Messages, vous pouvez profiter de diff\'erents 
modes de prise en charge pour chaque type de job (par exemple, selon qu'il 
s'agit d'une full ou d'un incr\'ementale). 

En g\'en\'eral, les messages sont attach\'es \`a un job et sont inclus dans le rapport de job. 
Il existe de rares situations o\`u ce n'est pas possible, par exemple lorsqu'aucun 
job n'est en cours d'ex\'ecution, ou si une erreur de communication se produit 
entre un daemon et le Director. Dans ce genre de situations, le message demeure 
dans le syst\`eme et devrait \^etre purg\'e \`a la fin job suivant. Cependant, comme de tels 
messages ne sont pas attach\'es \`a un job, tous ceux qui sont envoy\'es par courrier 
\'electronique sont envoy\'es \`a {\bf /usr/lib/sendmail}. Si sur votre syst\`eme, comme c'est 
le cas de FreeBSD, sendmail r\'eside en un autre emplacement, veillez \`a le lier 
depuis l'emplacement ci-dessus. 

Les enregistrements contenus dans une ressource Messages consistent en une 
sp\'ecification de  {\bf destination} suivie d'une liste de types de messages 
{\bf message-types} au format :

\begin{description}

\item [destination = message-type1, message-type2, message-type3, ...  ]
   \index[dir]{destination}
   \end{description}

ou, pour ces destinations qui n\'ecessitent de sp\'ecifier une adresse (e-mail, par exemple) :

\begin{description}

\item [destination = address = message-type1, message-type2,
   message-type3, ...  ]
   \index[dir]{destination}

o\`u {\bf destination} est l'un des mots-clef pr\'ed\'efinis qui pr\'ecise o\`u le message 
doit \^etre exp\'edi\'e ({\bf stdout}, {\bf file}, ...), {\bf  message-type} est l'un des 
mots-clef pr\'ed\'efinis qui pr\'ecise le type de messages g\'en\'er\'e par Bacula ({\bf ERROR}, 
{\bf WARNING}, {\bf FATAL}, ...) et {\bf address} varie selon le mot clef  {\bf destination} 
mais peut typiquement \^etre une adresse de courrier \'electronique ou un nom de fichier.

\end{description}

Voici la liste des directives disponibles pour d\'efinir des ressources Messages :


\begin{description}

\item [Messages]
   \index[dir]{Messages}
   D\'ebut des enregistrements de Messages

\item [Name = \lt{}name\gt{}]
   \index[dir]{Name}
   Le nom de la ressource Message. Ce nom sera utilis\'e pour lier cette ressource 
Message \`a un job et/ou au un daemon.

\label{mailcommand}

\item [MailCommand = \lt{}command\gt{}]
   \index[dir]{MailCommand}
En l'absence de cette directive, Bacula enverra tous ses messages avec la 
commande suivante :

{\bf mail -s "Bacula Message" \lt{}recipients\gt{}}  
Dans de nombreusx cas, selon votre machine, cette commande peut ne pas fonctionner. 
La directive  {\bf MailCommand} vous permet de stipuler pr\'ecis\'ement la fa\c{c}on 
d'envoyer vos courrier \'electroniques. Lors de l'ex\'ecution de la commande 
{\bf command}, sp\'ecifi\'ee entre guillemets, les substitutions suivantes sont 
effectu\'ees :

\begin{itemize}
  \item \%\% = \%  
  \item \%c = Le nom du client
  \item \%d = Le nom du Director  
  \item \%e = Le code de sortie du job (OK, Error, ...)  
  \item \%i = L'Id du Job  
  \item \%j = Le nom unique du job  
  \item \%l = Le niveau (Full, differential, ...) du job  
  \item \%n = Le om du job  
  \item \%r = Les destinataires  
  \item \%t = Le type du job (Backup, verify, ...)  
\end{itemize}

Voici la commande que j'utilise (Kern) :

{\bf mailcommand = "/home/kern/bacula/bin/bsmtp -h mail.example.com -f
\textbackslash{}"\textbackslash{}(Bacula\textbackslash{})
\%r\textbackslash{}" -s \textbackslash{}"Bacula: \%t \%e of \%c
\%l\textbackslash{}" \%r"}

Notez que la commande enti\`ere devrait appara\^itre sur une seulle ligne plut\^ot 
que d\'ecoup\'ee comme ici pour des raisons de pr\'esentation.

Le programme {\bf bsmtp} est fourni en tant que partie de Bacula. Pour plus 
de d\'etails, consultez la section \ilink{ bsmtp -- Personnaliser l'envoi 
de vos message par courrier \'electronique}{bsmtp}. Testez soigneusement 
toute commande {\bf mailcommand} pour vous assurer que votre passerelle 
bsmtp accepte le format d'adressage que vous utilisez. Certains programmes 
tels Exim peut se montrer tr\`es s\'electif en ce qui concerne les format 
autoris\'es, particuli\`erement en ce qui concerne le champ "from".

\item [OperatorCommand = \lt{}command\gt{}]
   \index[fd]{OperatorCommand}
   Cette directive est analogue \`a {\bf MailCommand}, mais elle est utilis\'ee pour 
   les messages destin\'es \`a l'op\'erateur. Les substitutions effectu\'ees pour la 
   directive {\bf MailCommand} sont aussi effectu\'ees pour celle-ci. Normalement, 
   vous mettrez ici la m\^eme valeur que pour {\bf MailCommand}.

\item [Debug = \lt{}debug-level\gt{}]
   \index[fd]{Debug}
   Cette directive r\`egle le niveau de d\'ebogage des messages. C'est un entier. 
   Plus sa valeur est grande, plus grande est la quantit\'e d'informations de 
   d\'ebogages produites. Nous vous conseillons de ne pas utiliser cette directive 
   car elle sera bient\^ot obsol\`ete.

\item [\lt{}destination\gt{} = \lt{}message-type1\gt{},
   \lt{}message-type2\gt{}, ...]
   \index[fd]{\lt{}destination\gt{}}

O\`u la {\bf destination} peut \^etre l'une des suivantes :

\begin{description}

\item [stdout]
   \index[fd]{stdout}
   Envoie le message vers la sortie standard.

\item [stderr]
   \index[fd]{stderr}
   Envoie le message vers l'erreur standard

\item [console]
   \index[console]{console}
   Envoie le message vers la console Bacula. Ces messages sont gard\'es en attente 
   jusqu'\`a ce que la console contacte le Director.
\end{description}

\item {\bf \lt{}destination\gt{} = \lt{}address\gt{} =
   \lt{}message-type1\gt{}, \lt{}message-type2\gt{}, ...}
   \index[console]{\lt{}destination\gt{}}

O\`u {\bf address} d\'epend de la {\bf destination}, qui peut \^etre l'une des suivantes :

\begin{description}

\item [director]
   \index[dir]{director}
   Envoie le message vers le Director dont le nom est sp\'ecifi\'e dans le champ 
   {\bf address}. Notez que dans l'impl\'ementation actuelle, le nom du Director 
   est ignor\'e, le message \'etant envoy\'e au Directr qui a lanc\'e le job.

\item [file]
   \index[dir]{file}
   Envoie le message vers le fichier d\'esign\'e dans le champ {\bf address}. Si le 
   fichier existe, il est \'ecras\'e.

\item [append]
   \index[dir]{append}
   Ajoute le message \`a la suite du fichier d\'esign\'e dans le champ {\bf address}. 
   Si le fichier n'existe pas encore, il est cr\'e\'e.
   
\item [syslog]
   \index[fd]{syslog}
   Envoie le message vers le syst\`eme de journalisation (syslog) en utilisant le 
   service d\'esign\'e par le champ {\bf address} Notez que, pour le moment, le champ 
   {\bf address} est ignor\'e, et que le message est toujours envoy\'e au service 
   LOG\_DAEMON avec le niveau LOG\_ERR. Consultez la page {\bf man 3 syslog} 
   pour plus de d\'etails. Exemple :
   
\begin{verbatim}
   syslog = all, !skipped, !saved
\end{verbatim}

\item [mail]
   \index[fd]{mail}
   Exp\'edie le message vers les adresses \'electroniques 
   sp\'ecifi\'ees dans le champ {\bf address} (s\'epar\'ees par des points-virgule). 
   Les messages sont rassembl\'es au cours du job, puis exp\'edi\'es lorsqu'il prend 
   fin en un seul courrier \'electronique. L'avantage de cette Destination est 
   que vous recevez une notification de chaque job ex\'ecut\'e. Toutefois, si vous 
   sauvegardez cinq ou dix machines chaque nuit, la quantit\'e de courrier 
   \'electronique peut devenir importante. Certains utilisateurs mettent en oeuvre 
   des filtres de courrier tels {\bf procmail} pour classer automatiquement ces 
   courriers en fonction des codes de fin de job (voyez la commande {\bf mailcommand}

\item [mail on error]
   \index[fd]{mail on error}
   Exp\'edie le message vers les adresses \'electroniques
   sp\'ecifi\'ees dans le champ {\bf address} (s\'epar\'ees par des points-virgule) 
   si le job se termine avec un code d'erreur. Les messages MailOnError sont 
   rassembl\'es au cours du job, puis exp\'edi\'es lorsqu'il prend fin en un seul 
   courrier \'electronique. Cette Destination diff\`ere de la Destination  {\bf mail} 
   en ce que si le job s'ach\`eve normalement, le message est compl\`etement 
   abandonn\'e (pour cette Destination). En utilisant d'autres Destinations, telles 
   que {\bf append}, vous pouvez vous assurer que les informations de sorties 
   ne seront pas perdues m\^eme si le job se termine normalement.

\item [operator]
   \index[fd]{operator}
   Exp\'edie le message vers les adresses \'electroniques
   sp\'ecifi\'ees dans le champ {\bf address} (s\'epar\'ees par des points virgule). 
   Cette directive est similaire \`a {\bf mail} d\'ecrite plus haut, sauf que 
   chaque message est envoy\'e aussit\^ot re\c{c}u, de sorte qu'il y a un courrier 
   \'electronique par message . Ceci est surtout utile pour les messages de 
   type {\bf mount} (voir ci-dessous).

\end{description}
  Pour toutes les Destinations, le champ "type de message" {\bf message-type}  est 
  une liste des types (ou classes) de messages  suivants s\'epar\'es par des 
  points-virgule :

\begin{description}

\item [info]
   \index[fd]{info}
   Messages d'information g\'en\'erale.

\item [warning]
   \index[fd]{warning}
   Messages d'avertissement. En g\'en\'eral, il s'agit de quelque situation inhabituelle 
   sans toutefois \^etre tr\`es s\'erieuse.

\item [error]
   \index[fd]{error}
   Messages d'erreur non-fatale. Le job se poursuit. Tout message d'erreur devrait 
   \^etre suivi d'investigations, car il signifie que quelque chose est all\'e de travers.

\item [fatal]
   \index[fd]{fatal}
   Messages d'erreur fatale. Ces erreurs pr\'ecipitent la fin du job.

\item [terminate]
   \index[fd]{terminate}
   Messages g\'en\'er\'es lorsque le daemon s'arr\`ete.

\item [saved]
   \index[fd]{saved}
   Fichiers sauvegard\'es normalement.

\item [notsaved]
   \index[fd]{notsaved}
   Fichiers non sauvegard\'es en raison d'une erreur, en g\'en\'eral, parce que le 
   fichier n'a pu \^etre acc\'ed\'e (il n'existait pas ou n'\'etait pas mont\'e).

\item [skipped]
   \index[fd]{skipped}
   Fichiers qui ont \'et\'e laiss\'es de cot\'e en raison d'une option pos\'ee par un 
   utilisateur (par exemple le niveau d'une sauvegarde ou une option 
   d'exclusion. Ceci n'est pas consid\'er\'e comme une condition d'erreur au m\^eme 
   titre que pour le type {\bf notsaved} puisque le fichier de configuration 
   stipule explicitement que ces fichiers ne doivent pas \^etre sauvegard\'es. 
   Des cas typiques de fichiers de type {\bf skipped} : fichiers inchang\'es 
   lors d'une incr\'ementale, sous-r\'epertoires si l'option {\bf no recursion} 
   est activ\'ee...

\item [mount]
   \index[dir]{mount}
   Montage d'un volume ou intervention d'un op\'erateur requis par le Storage Daemon. 
   Ces requ\^etes n\'ecessitent une intervention sp\'ecifique de l'op\'erateur pour que le 
   job puisse se poursuivre. 

\item [restored]
   \index[dir]{restored}
   La liste, fa\c{c}on {\bf ls}, de tous les fichiers restaur\'es est envoy\'ee vers 
   cette classe de messages.
   
\item [all]
   \index[fd]{all}
   Tous les types de messages.

\item [*security]
   \index[fd]{*security}
   Messages d'information ou d'avertissement relatifs \`a la s\'ecurit\'e, 
   essentiellement les tentatives de connection non-autoris\'ees.
\end{description}

\end{description}

Voici un exemple d'une d\'efinition de ressource Messages valide, o\`u tous les 
messages sont envoy\'es par courrier \'electronique \`a  enforcement@sec.com \`a 
l'exception de ceux concernant les fichiers explicitement exclus (skipped), 
et des messages d'arr\^et de daemon (terminate). De plus, tous les messages 
de type mount sont envoy\'es \`a l'op\'erateur (courrier \`a enforcement@sec.com). 
Enfin, tous les messages autres que ceux relatifs aux fichiers explicitement 
exclus et aux fichiers sauvegard\'es sont envoy\'es vers la console :

\footnotesize
\begin{verbatim}
Messages {
  Name = Standard
  mail = enforcement@sec.com = all, !skipped, !terminate
  operator = enforcement@sec.com = mount
  console = all, !skipped, !saved
}
\end{verbatim}
\normalsize

A l'exception de l'adresse \'electronique (modifi\'ee pour \'eviter le spam), 
voici la ressource Message du Director de Kern. Notez que les commandes 
{\bf mailcommand} et {\bf operatorcommand} sont sur une seule ligne et 
non coup\'ees comme ici pour des besoins de mise en page.

\footnotesize
\begin{verbatim}
Messages {
  Name = Standard
  mailcommand = "bacula/bin/bsmtp -h mail.example.com \
    -f \"\(Bacula\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "bacula/bin/bsmtp -h mail.example.com \
    -f \"\(Bacula\) %r\" -s \"Bacula: Intervention needed \
        for %j\" %r"
  MailOnError = security@example.com = all, !skipped, \
                !terminate
  append = "bacula/bin/log" = all, !skipped, !terminate
  operator = security@example.com = mount
  console = all, !skipped, !saved
}
\end{verbatim}
\normalsize
