## Che fais le ménache -- PeBecue <<DateTime(2012-04-15T23:08:46+0100)>>

<<TableOfContents>>

= Ragnarok =

Ragnarok est le serveur qui s'occupera (bientôt) de récupérer les logs des différents serveurs du Cr@ns. Il a reçu deux disques durs montés en RAID d'un teraoctet, et a été mis à neuf sous squeeze.

== Configuration basique du serveur ==

Ragnarok a été installé sous squeeze, en debootstrap.

Les services installés dessus sont :

 * La gestion des logs

=== Gestion des logs ===

Ragnarok fonctionne avec rsyslog, il faudra donc passer tous les serveurs sous rsyslog pour qu'ils puissent envoyer leurs informations à celui-ci. Pour centraliser les logs, on utilise PostgreSQL, avec le paquet rsyslog-pgsql (la table par défaut s'appelle Syslog). L'envoi d'un serveur vers Ragnarok se fera à l'aide du protocole RELP (une surcouche de TCP, plus fiable), il faut donc veiller à installer le paquet rsyslog-relp.

Une fois cela fait, on crée le répertoire rsyslog.d/ dans le dossier /etc/ s'il n'existe pas (a priori, il existe déjà, car rsyslog-psql crée un fichier psql.conf dans ce dossier). Et dedans, on va créer le fichier 52-listen_relp.conf, que l'on va remplir ainsi :

{{{
$ModLoad imrelp
$InputRELPServerRun 20514
}}}

La première ligne sert à charger le module imrelp, la seconde place Ragnarok en écoute sur le port 20514, en attente de logs. On déplace également /etc/rsyslog.d/pgsql.conf vers /etc/rsyslog.d/51-pgsql.conf Cela fait, on relance rsyslog via la commande "sudo /etc/init.d/rsyslog restart".

=== (Re)Configuration des serveurs ===

Parlons de la (re)configuration des serveurs clients, par exemple, whatsupdoc. On s'assure d'abord que le paquet gérant les logs est rsyslog. Par ailleurs, il faut installer rsyslog-relp, pour que l'envoi des informations puisse se faire. Dans /etc/rsyslog.d, nous allons créer le fichier 50-send_relp.conf, contenant les informations suivantes :

{{{
$ModLoad omrelp
*.* :omrelp:10.231.136.11:20514;RSYSLOG_ForwardFormat
}}}

La première ligne charge le module d'envoi des données en RELP, la seconde spécifie que tous les logs doivent être envoyés à Ragnarok (10.231.136.11), sur le port 20514, via le module omrelp, dans un format prédéfini (RSYSLOG_ForwardFormat). Il ne reste qu'à relancer rsyslog via la commande "sudo /etc/init.d/rsyslog restart".

=== Pour les switchs ===

Les logs des switchs sont envoyés vers {{{ragnarok}}} le protocole syslog (en UDP), via la directive de configuration:
{{{
logging 10.231.136.11
}}}

Ragnarok doit donc également autoriser l'envoi de log via UDP, ce qui se réalise à l'aide d'un fichier supplémentaire ( ./rsyslog.d/53-listen_switches.conf ):
{{{
$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 127.0.0.1, *.adm.crans.org, 10.231.136.0/24
}}}

On a quelques problèmes ouverts sur le champ fromhost enregistré dans la base pgsql: les ip des switchs sont utilisés au lieu de leur nom d'hôte. En désactivant, certaines directives de rsyslog, on arrive à enregistrer le nom d'hôte mais c'est alors les autres serveurs qui sont enregistrés par leur adresse IP !

NB: On utilise ici le protocole UDP, car c'est le seul disponible sur les switchs (probablement par soucis de légèreté).

== Généralisation de la configuration via bcfg2 ==

On supposera ici que les modifications de bcfg2 se font via darcs, on notera donc / comme étant la racine du répertoire darcs bcfg2. L'idée est de généraliser proprement à l'ensemble du réseau ce qu'on a vu au dessus. Cela va donc impliquer aussi plus de lignes de configuration, pour avoir un système fiable (en cas de crash de ragnarok, du réseau, ou de postgres).

Dans /Cfg/etc/rsyslog.d, créer le répertoire 50-send_relp.conf/, 51-pgsql.conf/, 52-listen_relp.conf/ et 53-listen_switches.conf/. Dans 50-send_relp.conf/, créer le fichier 50-send_relp.conf, et y mettre les lignes suivantes :
{{{
# Fichier géré par BCFG2. Ne pas modifier localement
$ModLoad omrelp                 # Module d'envoi des logs via le réseau, plus fiable que omtcp
$WorkDirectory /var/log/spool   # Dossier de travail par défaut, pour les clients rsyslog

# En cas de plantage de la destination (ici ragnarok), on met en RAM (puis dans des fichiers
# temporaires, si la RAM est sollicitée au delà d'une limite "inconnue", placés dans le
# répertoire de travail /var/log/spool) ce qui doit être envoyé à ragnarok quand il sera
# joignable à nouveau
$ActionQueueType LinkedList     # Mode de travail asynchrone pour la mise en attente
$ActionQueueFileName syslogfwd  # Définit le nom des fichiers temporaires créés en cas de problème
$ActionResumeRetryCount -1      # Si l'envoi vers le destinataire standard foire, on réessaye un peu plus tard, indéfiniment.
$ActionQueueSaveOnShutdown on   # Balance le contenu de la RAM dans un fichier en cas d'arrêt de rsyslog.
*.* :omrelp:ragnarok.adm.crans.org:20514;RSYSLOG_ForwardFormat
}}}

Dans 51-pgsql.conf/, créer le fichier 51-pgsql.conf, et y mettre :
{{{
# Fichier géré par BCFG2. Ne pas modifier localement
# On log tout dans la base pgsql, sauf si on plante, auquel cas on fait de la magie, comme proposé sur
# http://www.rsyslog.com/doc/rsyslog_reliable_forwarding.html
$ModLoad ompgsql                                              # Module d'envoi des logs à la base de donnée postgresql
$WorkDirectory /var/spool/rsyslog/                            # Dossier de travail pour le serveur.

# En cas de plantage de postgres, ou d'arrêt de rsyslog, on met en RAM (puis dans des fichiers
# temporaires, si la RAM est sollicitée au delà d'une limite "inconnue", placés dans le
# répertoire de travail /var/spool/rsyslog) ce qui doit être envoyé à postgres quand il sera
# joignable à nouveau
$ActionQueueType LinkedList                                    # Mode de travail asynchrone pour la mise en attente
$ActionQueueFileName syslogfwd                                 # Définit le nom des fichiers temporaires créés en cas de problème
$ActionResumeRetryCount -1                                     # Si l'envoi vers le destinataire standard foire, on réessaye un peu plus tard, indéfiniment.
$ActionQueueSaveOnShutdown on                                  # Balance le contenu de la RAM dans un fichier en cas d'arrêt de rsyslog.
*.* :ompgsql:localhost,Syslog,rsyslog,otmLczDw0EeZ;            # Balance la sauce dans postgres

#On ne loggue plus dans les fichiers ce qui ne concerne pas le serveur local.
:fromhost, !isequal, "ragnarok"     ~
}}}

Dans 52-listen_relp.conf/ créer le fichier 52-listen_relp.conf, et y mettre les lignes suivantes :
{{{
# Fichier géré par BCFG2. Ne pas modifier localement
$ModLoad imrelp                    # Module de réception RELP
$InputRELPServerRun 20514          # Port d'écoute
}}}

Dans 53-listen_switches.conf/, créer le fichier 53-listen_switches.conf, et y mettre :
{{{
# Fichier géré par BCFG2. Ne pas modifier localement
# Réception en udp: pour les switchs seulement
$ModLoad imudp                                                       # Module de réception UDP
$UDPServerRun 514                                                    # Port d'écoute
$AllowedSender UDP, 127.0.0.1, *.adm.crans.org, 10.231.136.0/24      # On fait la liste des domaines et ip autorisés à envoyer des logs.
}}}

Dans /Bundler/, créer le fichier rsyslog.xml, et le remplir comme suit :

{{{
<Bundle name="rsyslog" version="2.0">
  <Service name="rsyslog"/>
  <Group name="rsyslog-server">
    <ConfigFile name="/etc/rsyslog.d/52-listen_relp.conf"/>
    <ConfigFile name="/etc/rsyslog.d/53-listen_switches.conf"/>
    <ConfigFile name="/etc/rsyslog.d/51-pgsql.conf"/>
    <Package name="rsyslog-pgsql"/>
    <Directory name="/var/spool/rsyslog"/>
  </Group>

  <Group name="rsyslog-client">
    <Group name="rsyslog-server" negate="true">
        <ConfigFile name="/etc/rsyslog.d/50-send_relp.conf"/>
        <Action name="rsyslog-clean-sendrelp" />
        <Directory name="/var/log/spool"/>
    </Group>
  </Group>

  <Package name="rsyslog-relp"/>
</Bundle>
}}}

Dans /Metadata/, modifier le fichier groups.xml, on va modifier le groupe "ragnarok" pour commencer, chercher dans le fichier l'occurence 'Group name="ragnarok"', et y ajouter la ligne :

{{{
     <Group name="rsyslog-server"/>
}}}

Maintenant, on modifie le groupe "crans-common", chercher l'occurrence 'Group name="crans-common"', et y ajouter la ligne (là où il faut, histoire que le fichier reste lisible...) :

{{{
     <Group name="rsyslog-client"/>
}}}

Dans la portion services du fichier, dans la catégorie divers, rajouter deux nouveaux groupes :

{{{
   <Group name="rsyslog-server"
      comment="Serveur de centralisation des logs">
      <Bundle name="rsyslog"/>
   </Group>
 
   <Group name="rsyslog-client"
      comment="Serveurs qui ne centralisent pas les logs (cpt Obvious inside)">
      <Bundle name="rsyslog"/>
   </Group>
}}}

Enfin, dans /Rules/rules.xml, on rajoute ce qui suit :
{{{
  <Group name="rsyslog-server">
    <Directory name="/var/spool/rsyslog" owner="root" group="adm" perms="0750"/>
  </Group>

  <Group name="rsyslog-client">
    <Group name="rsyslog-server" negate="true">
      <Directory name="/var/log/spool" owner="root" group="adm" perms="750"/>
    </Group>
  </Group>
}}}

À partir de là normalement, on peut enregistrer la configuration, et c'est terminé !

Penser à faire add sur les nouveaux fichiers avant de faire un record et de pousser.

== Pour les bornes wifi ==
En raison de la limitation du firewall, les bornes wifi envoient leurs logs au routeur wifi {{{gordon}}}. Ceci se réalise en redémarrant {{{syslogd}}} sur les bornes via la commande:
{{{
killall syslogd; syslogd -R 138.231.148.1 -C16
}}}
Il serait envisageable, dans le futur, d'inclure cette configuration par défaut: en rajoutant les directives suivantes dans {{{/etc/config/system}}} (catégorie {{{config}}})
{{{
        option log_ip 138.231.148.1
        option log_type file
        option log_file /dev/null
}}}


{{{gordon}}} doit de plus être configuré pour recevoir ces logs UDP:
{{{
$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 127.0.0.1, 138.231.148.0/24
}}}
Ce dernier les transmet alors à {{{ragnarok}}} de la même manière que ses propres logs.

----
CatégorieCrans CatégorieCrans/LesServeurs