systemx

Aller au contenu | Aller au menu | Aller à la recherche

mardi, novembre 3 2009

Configuration du plugin mysql pour nagios

Prérequis
J'ai déjà configuré mes hosts types, mes period, mes contacts. Je veux maintenant ajouter de facon simple le monitoring mysql pour certains hosts.

Pas à pas
  • Creation de l'utilisateur nagios sur la base cible
mysql> create database nagios ;
Query OK, 1 row affected (0.08 sec)
mysql> GRANT ALL ON nagios.* TO nagiosuser@ identified by '' ;
Query OK, 0 rows affected (0.23 sec)
mysql> flush privileges ;
Query OK, 0 rows affected (0.14 sec)
  • Verifier que le plugin fonctionne à partir du serveur nagios
nagios % check_mysql -P 3306 -u nagiosuser -p''  -H 
Uptime: 2753334 Threads: 2 Questions: 43815 Slow queries: 1196
Opens: 2889 Flush tables: 177 Open tables: 7 Queries per second avg: 0.15
  • configurer la 'command' avec les parametres ci dessus
define command{
command_name check_mysql
command_line $USER1$/check_mysql -H $HOSTADDRESS$ -P $ARG1$ -u $ARG2$ -p'$ARG3$'
}
  • Configurer la commande dans le service qui va bien
define service{
use local-service
hostgroup_name mysql-servers
service_description MYSQL
check_command check_mysql!3306!nagiosuser!MOTDEPASSE!
contact_groups mysql-services-admins
}
  • Enfin ajouter le service dans la definition du host (correspondance entre hostgroups)
define host{
host_name monhost
use mongroupe_primaire
hostgroups mysql-servers
check_period prod-period
address @IP
}

Voila qui fonctionne mais il serait préferable de pouvoir parametrer le plugin dans la definition du host final.
De plus le mot de passe apparait en clair lors de l'execution du plugin.
L'accès au serveur nagios étant restreint et les droits de nagiosuser limité ca devrait aller.

mercredi, juillet 29 2009

mysql et logadm

Logadm est l'équivalent de logrotate sous Solaris. Il a l'avantage d'avoir une syntaxe plus consise.
J'ai bêtement galéré avec l'archivage des logs de mysql. En effet la commande "flush logs" qui permet de recreer les logs de mysql crée un fichier logfile-old.
Le plus drole est que il ecrit dans ce fichier -old ! Je vous laisse admirer :
host admin : mysqladmin -u root -p flush-logs 
Enter password:
host admin : ls -l
total 5776
-rw-rw---- 1 mysql dba 0 Jul 29 14:39 myserver.log
-rw-rw---- 1 mysql dba 604 Jul 29 14:39 myserver-old
-rw-rw---- 1 mysql dba 16571 Jul 29 14:46 myserver.slowquery.log
On voit donc que :
  1. Le slowquery log est pas roté
  2. Le fichier de log mis à jour est myserver-old !
Le plus amusant est que si on fait comme suggéré dans la doc un mv des fichiers .log on se retrouve toujours avec 2 fichier (myserver.log et myserver-old)
La procédure semblait pourtant exact (doc mysql) :
shell> cd mysql-data-directory
shell> mv mysql.log mysql.old
shell> mv mysql-slow.log mysql-slow.old
shell> mysqladmin flush-logs
Mais finalement une option de logadm m'a sauvé la mise.
Cette option '-c' permet de copier le fichier (en rotant les numéro de version) puis trunquer le fichier ouvert.
On évite ainsi tout ce bazar. La ligne logadm :
/srv/mysq/admin/*.log -C 4 -c -s 1k
Puis on lance logadm pour avoir :
-rw-rw----   1 mysql dba            0 Jul 29 15:10 SESRBR.log
-rw-rw---- 1 mysql dba 323307 Jul 29 15:09 SESRBR.log.0
-rw-rw---- 1 mysql dba 0 Jul 29 15:10 SESRBR.slowquery.log
-rw-rw---- 1 mysql dba 43464 Jul 29 15:10 SESRBR.slowquery.log.0

PS : Cepedant pour rétablir les logs correctement après un flush log ... Il faut redémarrer mysql.
PS2 : Le -s 1k est pour les tests !
PS3 : Pour mettre le log en verbose manuellement : SET GLOBAL general_log = 'ON';