| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|---|
| 2 |
<!-- DerniÚre modification |
|---|
| 3 |
le $Date$ |
|---|
| 4 |
par $Author$ |
|---|
| 5 |
révision $Revision$ --> |
|---|
| 6 |
|
|---|
| 7 |
<sect1 id="monitoring"> |
|---|
| 8 |
<title>Surveillance</title> |
|---|
| 9 |
|
|---|
| 10 |
<indexterm><primary>Surveiller &slony1;</primary></indexterm> |
|---|
| 11 |
|
|---|
| 12 |
<sect2> <title> Tester la replication avec &nagios; </title> |
|---|
| 13 |
|
|---|
| 14 |
<indexterm><primary>&nagios; pour surveiller la réplication</primary></indexterm> |
|---|
| 15 |
|
|---|
| 16 |
<para> Le script <command> psql_replication_check.pl </command> qui se trouve |
|---|
| 17 |
dans le répertoire <filename>tools</filename> regroupe les meilleures |
|---|
| 18 |
tentatives de construire de création de tests utilisables par le systÚme |
|---|
| 19 |
de surveillance <ulink url="http://www.nagios.org/"> &nagios;</ulink>.</para> |
|---|
| 20 |
|
|---|
| 21 |
<para> Un script antérieur, nommé <filename> |
|---|
| 22 |
test_slony_replication.pl</filename>, utilisait une approche <quote>intelligente</quote> |
|---|
| 23 |
: un <quote>script de test</quote> est exécuté périodiquement et se déploie à travers les configurations |
|---|
| 24 |
&slony1; pour trouver l'origine et les abonnés, injecte un changement et observe sa propagation |
|---|
| 25 |
à travers le systÚme. Il présentait deux problÚmes :</para> |
|---|
| 26 |
<itemizedlist> |
|---|
| 27 |
|
|---|
| 28 |
<listitem><para> En cas de problÚme de connectique impactant le noeud qui jouait ce test |
|---|
| 29 |
c'est l'ensemble de réplication qui semblait détruite. De plus, cette stratégie de |
|---|
| 30 |
surveillance est trÚs fragile et dépend de nombreuses conditions d'erreurs.</para> |
|---|
| 31 |
</listitem> |
|---|
| 32 |
|
|---|
| 33 |
<listitem><para> &nagios; n'a pas la possibilité de profiter de |
|---|
| 34 |
<quote>l'intelligence</quote> d'une exploration automatique d'un ensemble de noeuds. |
|---|
| 35 |
Vous devez mettre en place des rÚgles de surveillance &nagios; pour chaque noeud. |
|---|
| 36 |
</para> </listitem> |
|---|
| 37 |
</itemizedlist> |
|---|
| 38 |
|
|---|
| 39 |
<para> Le nouveau script, <command>psql_replication_check.pl</command>, |
|---|
| 40 |
utilise une approche minimaliste qui suppose que le systÚme est une |
|---|
| 41 |
systÚme en ligne recevant un <quote>trafic</quote> régulier, et vous |
|---|
| 42 |
permet de définir une vue spécifique pour le test de replication appelée |
|---|
| 43 |
<envar>replication_status</envar> qui doit contenir des mises à jour |
|---|
| 44 |
réguliÚres. Cette vue regarde simplement la derniÚre |
|---|
| 45 |
<quote>transaction</quote> sur le noeud, et liste son timestamp, son âge, |
|---|
| 46 |
ainsi que quelques informations sur l'application qui peuvent être utiles. |
|---|
| 47 |
</para> |
|---|
| 48 |
|
|---|
| 49 |
<itemizedlist> |
|---|
| 50 |
|
|---|
| 51 |
<listitem><para>Pour un systÚme d'inventaire, cela pourrait être |
|---|
| 52 |
le numéro de l'ordre effectué le plus récemment. </para> </listitem> |
|---|
| 53 |
|
|---|
| 54 |
<listitem><para>Pour un serveur de nom de domaines, cela peut être le nom |
|---|
| 55 |
du dernier domaine crée.</para> </listitem> |
|---|
| 56 |
|
|---|
| 57 |
</itemizedlist> |
|---|
| 58 |
|
|---|
| 59 |
<para> Une instance du script doit être lancée sur chaque noeud surveillé; |
|---|
| 60 |
c'est ainsi que &nagios; fonctionne.</para> |
|---|
| 61 |
|
|---|
| 62 |
</sect2> |
|---|
| 63 |
|
|---|
| 64 |
<sect2 id="slonymrtg"> <title> Surveiller &slony1; avec MRTG </title> |
|---|
| 65 |
|
|---|
| 66 |
<indexterm><primary>Utiliser MRTG pour surveiller la réplication</primary></indexterm> |
|---|
| 67 |
|
|---|
| 68 |
<para> Un utilisateur a expliqué sur la liste de discussion de &slony1; comment |
|---|
| 69 |
configurer <ulink url="http://people.ee.ethz.ch/~oetiker/webtools/mrtg/"> |
|---|
| 70 |
<application> mrtg ( Multi Router Traffic Grapher )</application> |
|---|
| 71 |
</ulink> pour surveiller une réplication &slony1;.</para> |
|---|
| 72 |
|
|---|
| 73 |
<para> ... Puisque j'utilise <application>mrtg</application> pour visualiser |
|---|
| 74 |
les données depuis plusieurs serveurs, j'utilise SNMP |
|---|
| 75 |
(<application>net-snmp</application> pour être exact).* |
|---|
| 76 |
Pour un serveur de base de données, j'ai ajouté la ligne suivante à la configuration |
|---|
| 77 |
<application>snmpd</application> :</para> |
|---|
| 78 |
|
|---|
| 79 |
<programlisting> |
|---|
| 80 |
exec replicationLagTime /cvs/scripts/snmpReplicationLagTime.sh 2 |
|---|
| 81 |
avec <filename> /cvs/scripts/snmpReplicationLagTime.sh</filename> contenant ceci : |
|---|
| 82 |
</programlisting> |
|---|
| 83 |
|
|---|
| 84 |
|
|---|
| 85 |
<programlisting> |
|---|
| 86 |
#!/bin/bash |
|---|
| 87 |
/home/pgdba/work/bin/psql -U pgdba -h 127.0.0.1 -p 5800 -d _DBNAME_ -qAt -c |
|---|
| 88 |
"select cast(extract(epoch from st_lag_time) as int8) FROM _irr.sl_status |
|---|
| 89 |
WHERE st_received = $1" |
|---|
| 90 |
</programlisting> |
|---|
| 91 |
|
|---|
| 92 |
<para> Ensuite, dans la configuration de mrtg, ajouter la cible suivante :</para> |
|---|
| 93 |
<programlisting> |
|---|
| 94 |
Target[db_replication_lagtime]:extOutput.3&extOutput.3:public at db::30::: |
|---|
| 95 |
MaxBytes[db_replication_lagtime]: 400000000 |
|---|
| 96 |
Title[db_replication_lagtime]: db: replication lag time |
|---|
| 97 |
PageTop[db_replication_lagtime]: <H1>db: replication lag time</H1> |
|---|
| 98 |
Options[db_replication_lagtime]: gauge,nopercent,growright |
|---|
| 99 |
</programlisting> |
|---|
| 100 |
|
|---|
| 101 |
|
|---|
| 102 |
<para> De son coté, Ismail Yenigul propose une méthode pour surveiller |
|---|
| 103 |
&slony1; en utilisant <application>MRTG</application> sans installer |
|---|
| 104 |
<application>SNMPD</application>.</para> |
|---|
| 105 |
|
|---|
| 106 |
<para>Voici sa configuration MRTG :</para> |
|---|
| 107 |
|
|---|
| 108 |
<programlisting> |
|---|
| 109 |
Target[db_replication_lagtime]:`/bin/snmpReplicationLagTime.sh 2` |
|---|
| 110 |
MaxBytes[db_replication_lagtime]: 400000000 |
|---|
| 111 |
Title[db_replication_lagtime]: db: replication lag time |
|---|
| 112 |
PageTop[db_replication_lagtime]: <H1>db: replication lag time</H1> |
|---|
| 113 |
Options[db_replication_lagtime]: gauge,nopercent,growright |
|---|
| 114 |
</programlisting> |
|---|
| 115 |
|
|---|
| 116 |
<para> et voici sa version modifiée du script :</para> |
|---|
| 117 |
|
|---|
| 118 |
<programlisting> |
|---|
| 119 |
# cat /bin/snmpReplicationLagTime.sh |
|---|
| 120 |
#!/bin/bash |
|---|
| 121 |
|
|---|
| 122 |
output=`/usr/bin/psql -U slony -h 192.168.1.1 -d endersysecm -qAt -c |
|---|
| 123 |
"select cast(extract(epoch from st_lag_time) as int8) FROM _mycluster.sl_status WHERE st_received = $1"` |
|---|
| 124 |
echo $output |
|---|
| 125 |
echo $output |
|---|
| 126 |
echo |
|---|
| 127 |
echo |
|---|
| 128 |
# end of script# |
|---|
| 129 |
</programlisting> |
|---|
| 130 |
|
|---|
| 131 |
|
|---|
| 132 |
<note><para> MRTG attend quatre lignes en provenance du script. Puisque le script n'en fournit |
|---|
| 133 |
que deux, la sortie doit être prolongée de deux lignes. |
|---|
| 134 |
</para> </note> |
|---|
| 135 |
|
|---|
| 136 |
</sect2> |
|---|
| 137 |
|
|---|
| 138 |
<sect2 id="testslonystate"> <title> test_slony_state</title> |
|---|
| 139 |
|
|---|
| 140 |
<indexterm><primary>script test_slony_state pour tester l'état de la réplication</primary></indexterm> |
|---|
| 141 |
|
|---|
| 142 |
<para> Ce script effectue différents analyses sur l'état d'un cluster |
|---|
| 143 |
&slony1;.</para> |
|---|
| 144 |
|
|---|
| 145 |
<para>Vous devez spécifier les arguments tels que <option>la base de données</option>, |
|---|
| 146 |
<option>l'hÃŽte</option>, <option>l'utilisateur</option>, |
|---|
| 147 |
<option>le cluster</option>, <option>le mot de passe</option>, et |
|---|
| 148 |
<option>le port</option> afin de se connecter à n'importe quel |
|---|
| 149 |
noeud du cluster. Vous devez également préciser une commande |
|---|
| 150 |
<option>mailprog</option> ( qui doit être un commande équivalente |
|---|
| 151 |
à la commande <productname>Unix</productname> |
|---|
| 152 |
<application>mailx</application>) et une destination pour le courrier. </para> |
|---|
| 153 |
|
|---|
| 154 |
<para> Par ailleurs vous spécifier les paramÚtres de connexion aux bases de données |
|---|
| 155 |
via les variables d'environnement utilisées par |
|---|
| 156 |
<application>libpq</application>, <emphasis>par exemple :</emphasis> - utiliser |
|---|
| 157 |
<envar>PGPORT</envar>, <envar>PGDATABASE</envar>, |
|---|
| 158 |
<envar>PGUSER</envar>, <envar>PGSERVICE</envar>, et ainsi de suite.</para> |
|---|
| 159 |
|
|---|
| 160 |
<para>Le script se promÚne à travers <xref linkend="table.sl-path"/> |
|---|
| 161 |
pour trouver tous les noeuds du cluster, et dans les DSNs qui lui |
|---|
| 162 |
permettront de se connecter à chaque noeud.</para> |
|---|
| 163 |
|
|---|
| 164 |
<para> Pour chaque noeud, le script examine l'état des données suivantes : |
|---|
| 165 |
|
|---|
| 166 |
<itemizedlist> |
|---|
| 167 |
<listitem><para> Vérification de <xref linkend="table.sl-listen"/> |
|---|
| 168 |
à la recherche de problÚmes |
|---|
| 169 |
<quote>déterminés analytiquement</quote>. Cela liste les voies de communication |
|---|
| 170 |
qui ne sont pas couvertes.</para></listitem> |
|---|
| 171 |
|
|---|
| 172 |
<listitem><para> Effectuer un résumé des événements sur le noeud d'origine</para> |
|---|
| 173 |
|
|---|
| 174 |
<para> Si un noeud n'a pas soumis un événement depuis longtemps, il y a certainement |
|---|
| 175 |
un problÚme.</para></listitem> |
|---|
| 176 |
|
|---|
| 177 |
<listitem><para> Vérification de <quote>l'âge</quote> de la table <xref |
|---|
| 178 |
linkend="table.sl-confirm"/> </para> |
|---|
| 179 |
|
|---|
| 180 |
<para> Si un ou plusieurs noeuds du cluster n'ont pas envoyé de rapport récemment |
|---|
| 181 |
alors cela peut conduire à l'absence de nettoyage dans certaines tables comme |
|---|
| 182 |
<xref linkend="table.sl-log-1"/> et <xref linkend="table.sl-seqlog"/></para></listitem> |
|---|
| 183 |
|
|---|
| 184 |
<listitem><para> Vérifications des transactions longues</para> |
|---|
| 185 |
|
|---|
| 186 |
<para> Ceci ne fonctionne correctement que si le collecteur de statistique |
|---|
| 187 |
est configuré pour collecter les requêtes, c'est à dire l'option |
|---|
| 188 |
<option> stats_command_string = true</option> est présente dans <filename> |
|---|
| 189 |
postgresql.conf </filename>.</para> |
|---|
| 190 |
|
|---|
| 191 |
<para> Si des bugs applicatifs conservent des connexions ouvertes, ce script devrait les trouver |
|---|
| 192 |
.</para> |
|---|
| 193 |
|
|---|
| 194 |
<para> Si des bugs applicatifs conservent des connexions ouvertes, |
|---|
| 195 |
plusieurs effets négatifs sont à prévoir |
|---|
| 196 |
tels que <link |
|---|
| 197 |
linkend="longtxnsareevil">ceux décrits dans la FAQ |
|---|
| 198 |
</link>.</para></listitem> |
|---|
| 199 |
|
|---|
| 200 |
</itemizedlist></para> |
|---|
| 201 |
|
|---|
| 202 |
<para> Ce script fait des diagnostiques basé sur des paramÚtres défini dans le script |
|---|
| 203 |
; si vous n'aimez pas les valeurs par défaut, modifiez-les !</para> |
|---|
| 204 |
|
|---|
| 205 |
</sect2> |
|---|
| 206 |
|
|---|
| 207 |
<sect2 id="search-logs"> <title> <command>search-logs.sh</command> </title> |
|---|
| 208 |
|
|---|
| 209 |
<indexterm><primary> Chercher les logs &slony1; avec search-logs.sh </primary></indexterm> |
|---|
| 210 |
|
|---|
| 211 |
<para> Ce script est construit pour chercher les fichiers de trace &slony1; |
|---|
| 212 |
dans un emplacement donné (<envar>LOGHOME</envar>), en se basant à la fois |
|---|
| 213 |
sur les conventions de nommage utilisées par les systÚmes |
|---|
| 214 |
<xref linkend="launchclusters"/> et <xref linkend="slonwatchdog"/> lors du démarrage |
|---|
| 215 |
des processus &lslon;.</para> |
|---|
| 216 |
|
|---|
| 217 |
<para> Si des erreurs sont trouvées, elles sont listées pour chaque fichiers |
|---|
| 218 |
et transmises par courriel à un utilisateur spécifié (<envar>LOGRECIPIENT</envar>); |
|---|
| 219 |
si aucune adresse courriel n'est spécifiée, le résultat est affiché sur la sortie standard |
|---|
| 220 |
. </para> |
|---|
| 221 |
|
|---|
| 222 |
<para> <envar>LOGTIMESTAMP</envar> permet de surcharger quelle heure doit être évaluée |
|---|
| 223 |
(plutÎt que la derniÚre heure). </para> |
|---|
| 224 |
|
|---|
| 225 |
<para> Un administrateur peut exécuter ce script une fois par heure |
|---|
| 226 |
pour surveiller les problÚmes de réplication. |
|---|
| 227 |
</para> |
|---|
| 228 |
</sect2> |
|---|
| 229 |
|
|---|
| 230 |
<sect2 id="wikigen"> <title>Produire un rapport de surveillance au format MediaWiki</title> |
|---|
| 231 |
|
|---|
| 232 |
<indexterm><primary> générer la documentation Wiki d'un cluster </primary></indexterm> |
|---|
| 233 |
|
|---|
| 234 |
<para>Le script <filename>mkmediawiki.pl </filename>, situé dans |
|---|
| 235 |
<filename>tools</filename>, peut être utilisé pour générer un rapport de |
|---|
| 236 |
surveillance du cluster compatible avec le logiciel populaire |
|---|
| 237 |
<ulink url="http://www.mediawiki.org/">MediaWiki </ulink>. |
|---|
| 238 |
Notons que l'option <option>--categories</option> permet à l'utilisateur |
|---|
| 239 |
de préciser un ensemble de catégories (séparées par une virgule) qui seront |
|---|
| 240 |
associées aux résultats. Si vous avez une série de clusters &slony1; |
|---|
| 241 |
passer l'option <option>--categories=slony1</option> entraînera la création |
|---|
| 242 |
d'une page catégorie répertoriant l'ensemble des clusters &slony1;. </para> |
|---|
| 243 |
|
|---|
| 244 |
<para>On pourra utiliser le commande ainsi: </para> |
|---|
| 245 |
|
|---|
| 246 |
<screen> |
|---|
| 247 |
~/logtail.en> mvs login -d mywiki.example.info -u "Chris Browne" -p `cat ~/.wikipass` -w wiki/index.php |
|---|
| 248 |
Doing login with host: logtail and lang: en |
|---|
| 249 |
~/logtail.en> perl $SLONYHOME/tools/mkmediawiki.pl --host localhost --database slonyregress1 --cluster slony_regress1 --categories=Slony-I > Slony_replication.wiki |
|---|
| 250 |
~/logtail.en> mvs commit -m "More sophisticated generated Slony-I cluster docs" Slony_replication.wiki |
|---|
| 251 |
Doing commit Slony_replication.wiki with host: logtail and lang: en |
|---|
| 252 |
</screen> |
|---|
| 253 |
|
|---|
| 254 |
<para> Notons que <command>mvs</command> est un client Mediawiki écrit en Perl; |
|---|
| 255 |
sur <ulink url="http://www.debian.org/"> Debian GNU/Linux</ulink>, le paquet |
|---|
| 256 |
associé est nommé |
|---|
| 257 |
<application>libwww-mediawiki-client-perl</application>; d'autres systÚmes |
|---|
| 258 |
dispose probablement d'une version packagée sous un nom similaire. </para> |
|---|
| 259 |
|
|---|
| 260 |
</sect2> |
|---|
| 261 |
</sect1> |
|---|