Taille: 4149
Commentaire:
|
Taille: 11366
Commentaire:
|
Texte supprimé. | Texte ajouté. |
Ligne 3: | Ligne 3: |
<<TableOfContents>> |
|
Ligne 7: | Ligne 9: |
= Configuration et services = | == Configuration basique du serveur == |
Ligne 15: | Ligne 17: |
== Configuration sur Ragnarok == 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-psql (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 listen_relp.conf, que l'on va remplir ainsi : |
=== 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. Il faut cependant refaire la base de données, car celle-ci a tendance à vouloir encoder ce qu'elle reçoit en UTF-8, et ce n'est pas toujours possible (auquel cas l'envoi des logs cesse, ce qui est un peu désagréable). Voici la marche à suivre. {{{ sudo -u postgres pg_dump -E SQL_ASCII Syslog > /tmp/Syslog.dump sudo -u postgres dropdb Syslog sudo -u postgres createdb -O rsyslog -T template0 -E SQL_ASCII Syslog sudo -u postgres psql -d Syslog -f Syslog.dump }}} 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 : |
Ligne 26: | Ligne 37: |
La première ligne sert à charger le module imrelp, la seconde place Ragnarok en écoute sur le port 20514, en attente de logs. Cela fait, on relance rsyslog via la commande "sudo /etc/init.d/rsyslog restart". == (Re)Configuration des serveurs == Parlons de la reconfiguration des serveurs, 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 send_relp.conf, contenant les informations suivantes : |
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 : |
Ligne 39: | Ligne 50: |
=== 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é). |
|
Ligne 41: | Ligne 70: |
On supposera ici que les modifications de bcfg2 se font via darcs, on notera donc / comme étant la racine du répertoire darcs bcfg2. Dans /Cfg/etc/rsyslog.d, créer le répertoire send_relp.conf/ et listen_relp.conf/. Dans send_relp.conf/, créer le fichier send_relp.conf, et y mettre les lignes mentionnées au dessus. Dans listen_relp.conf/ créer le fichier listen_relp.conf, et y mettre les lignes mentionnées au dessus également. |
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 # On envoie la sauce vers ragnarok.adm.crans.org (cela permet de restreindre l'écoute au vlan 2) }}} 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. }}} |
Ligne 50: | Ligne 132: |
<Group name="syslog-server"> <ConfigFile name="/etc/rsyslog.d/listen_relp.conf"/> </Group> <Group name="syslog-client"> <Group name="syslog-server" negate="true"> <ConfigFile name="/etc/rsyslog.d/send_relp.conf"/> |
<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"/> |
Ligne 67: | Ligne 155: |
<Group name="syslog-server"/> }}} Maintenant, on modifie le groupe "crans-common", chercher l'occurence 'Group name="crans-common"', et y ajouter la ligne (là où il faut, histoire que le fichier reste lisible...) : {{{ <Group name="syslog-client"/> |
<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"/> |
Ligne 79: | Ligne 167: |
<Group name="syslog-server" | <Group name="rsyslog-server" |
Ligne 84: | Ligne 172: |
<Group name="syslog-client" comment="Serveurs qui ne centralisent pas les logs (cpt Obvious inside )"> |
<Group name="rsyslog-client" comment="Serveurs qui ne centralisent pas les logs (cpt Obvious inside)"> |
Ligne 90: | Ligne 178: |
= À finir = | 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 |
Sommaire
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.
Il faut cependant refaire la base de données, car celle-ci a tendance à vouloir encoder ce qu'elle reçoit en UTF-8, et ce n'est pas toujours possible (auquel cas l'envoi des logs cesse, ce qui est un peu désagréable). Voici la marche à suivre.
sudo -u postgres pg_dump -E SQL_ASCII Syslog > /tmp/Syslog.dump sudo -u postgres dropdb Syslog sudo -u postgres createdb -O rsyslog -T template0 -E SQL_ASCII Syslog sudo -u postgres psql -d Syslog -f Syslog.dump
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 # On envoie la sauce vers ragnarok.adm.crans.org (cela permet de restreindre l'écoute au vlan 2)
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.