samedi 12 mai 2012

Installation & configuration de l'instant client Oracle

L'instant client Oracle, gratuit, est souvent la solution pour les machines qui doivent interroger des bases Oracle sans héberger de serveur, typiquement comme les machines de supervision.
L'installation est très simple lorsqu'on sait quels fichiers installer, quelles variables positionner et où placer les fichiers de configuration.
Ce post décrit rapidement les étapes d'installation et les chemins clefs, en se basant sur la version 11g.

Installation des binaires

Les binaires se téléchargent sur le site d'Oracle. Recherchez tout simplement dans les menus Downloads -> Instant Client pour trouver tout un listing de plateforme et d'architecture.

Attention au type d'architecture : même si les binaires 32 bits fonctionneront sur une machine 64 bits, le "linkage" d'une application 64 bits après compilation sur une librairie 32 bits ne fonctionnera pas. Ce cas de figure se rencontre en installant par exemple DBD::Oracle pour Perl : si votre machine est 64 bits, la compilation générera par défaut des binaires 64 bits et il vous faudra absolument les librairies Oracle 64 bits.
En cas de doute, une solution est de vérifier le format d'un fichier .o compilé récement. Par exemple pour DBD::Oracle :
# file Oracle.o
Oracle.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped

Pour ma part, pour une utilisation essentiellement via sqlplus et perl, je me contente de 3 packages :
  • Instant Client Package - Basic : les librairies de base de l'Instant Client
  • Instant Client Package - SQL*Plus : le fameux sqlplus, indispensable pour debugguer l'installation
  • Instant Client Package - SDK : le SDK qui nous permettera de compiler les librairies des autres langages, notamment DBD::Oracle de Perl
Je préfère récupérer les versions zip que rpm pour faire l'installation à la main, mais dans ce cas le suivi via le gestionnaire de package est impossible.

Une fois récupéré, l'installation est extrêmement simple : dézipper et déplacer les fichiers dans le dossier cible.
Exemple :
# unzip instantclient-basic-linux.x64-11.2.0.3.0.zip
# unzip instantclient-sdk-linux.x64-11.2.0.3.0.zip
# unzip instantclient-sqlplus-linux.x64-11.2.0.3.0.zip
# mkdir /opt/oracle/instantclient
# mv instantclient_11_2/* /opt/oracle/instantclient

Configuration des variables d’environnement

Deux variables sont indispensables pour faire fonctionner Oracle, en plus du PATH pour sqlplus :
  • ORACLE_HOME : utilisé par Oracle, doit pointer sur le dossier d'installation d'Oracle
  • LD_LIBRARY_PATH : utilisé par l'OS pour trouver les librairies partagées d'Oracle
Les deux doivent pointer sur le dossier d'installation de l'InstantClient.
Si LD_LIBRARY_PATH n'est pas ou mal positionné, le message est clair :
# sqlplus
sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
Dans l'exemple précédent, les deux variables doivent être positionnées sur /opt/oracle/instantclient.
Pour ne pas avoir à les redéfinir à chaque fois, ajoutez les dans /etc/profile.

Pour finir, tester en lançant sqlplus qui doit demander le login si tout est bien positionné :
# sqlplus

SQL*Plus: Release 11.2.0.3.0 Production on Tue May 12 20:34:35 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter user-name:

SQLPlus : petit rappel de syntaxe

Petit rappel de syntaxe de la commande sqlplus car je ne la trouve pas intuitive du tout. En cas de doute, sqlplus -h a la solution :)
  • sqlplus login/password@//ip:port/SID : pour entrer l'adresse complète de la base
  • sqlplus login/password@TNS : si la base est configurée dans un tnsname.ora (normalement ce n'est pas le cas à cette étape de l'installation)

Problème ORA-21561: OID generation failed

Il m'est arrivé plusieurs fois d'obtenir ce message lors du test d'installation en ouvrant réellement une connexion sur un serveur qui fonctionne :
# sqlplus login/password@//198.168.5.4/BASEDETEST

SQL*Plus: Release 11.2.0.3.0 Production on Tue May 12 20:36:22 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-21561: OID generation failed
Cette erreur apparaît car le nom d'hôte renseigné dans /etc/hosts n'est pas bon. Dans mon cas, j'avais :
127.0.0.1       localhost
Il faut que le nom qui apparait dans /etc/hosts soit le même que celui que renvoie la commande hostname.

Configuration des connexions (tnsnames.ora)

Ce fichier est bien pratique pour centraliser les paramètres de connexion et ne pas avoir à les retaper à de multiples endroits, encore faut-il placer le fichier au bon endroit...
Deux possibilités :
  • $ORACLE_HOME/network/admin/tnsnames.ora : c'est la solution que je préfère, il suffit de créer le dossier network/admin et aucune configuration supplémentaire n'est nécessaire
  • $TNS_ADMIN/tnsnames.ora : permet de mettre le tnsnames.ora n'importe où, éventuellement d'en avoir des différents par utilisateur, mais demande la configuration d'une variable d'environnement supplémentaire
Pour mémoire le format d'une ligne dans ce fichier (en italic orange les valeurs à modifier) :
nom_tns=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=community)(PROTOCOL=TCP)(HOST=adresse_ip_ou_hostname)(PORT=port_1521_par_defaut)))(CONNECT_DATA=(SID=sid)))
Une fois en place, il ne reste plus qu'à tester avec sqlplus (cf ci dessus pour la syntaxe) !

jeudi 3 mai 2012

Installation de PNP4Nagios sur Shinken

PNP4Nagios : pourquoi faire ?

Shinken (ou autres fork de Nagios) récupère les données de performance (perfdata) à chaque exécution de contrôle. Le traitement des perfdata n'est pas intégré dans le noyau, mais externalisé via des commandes externes : host_perfdata_command et service_perfdata_command, ou via un module (NEB pour Nagios, ou un module du broker pour Shinken).
Pnp4Nagios permet de stocker ces données en base RRD (Round-Robin Database) et propose une interface web de visualisation pour les afficher en couleur sur de jolis graphs.

Pnp4Nagios propose plusieurs mode d'interfaçage avec Nagios, très bien décrit sur le site officiel (http://docs.pnp4nagios.org/pnp-0.6/modes). Le plus simple à interfacer avec Shinken étant le 'Bulk Mode with npcdmod', puisque Shinken intègre un module de Broker jouant le même rôle que le NEB npcdmod de Nagios (appelé tout simplement... npcdmod).

Dans ce mode, Nagios (ou Shinken) log les données de performance dans un fichier plat via un Event Broker qui sont ensuite récupérées et traitées par un daemon PNP4Nagios qui consomme ces données. Schématiquement, l'architecture est la suivante :
Schéma d'architecture Shinken/PNP4Nagios
Coté Shinken, les étapes 1 et 2 sont le fonctionnement normal et l'étape 3 est réalisée par le module de Broker npcdmod. Coté PNP4Nagios, l'étape 4 est effectuée à intervale de temps régulier par le daemon npcd (ne pas oublier de le lancer !) qui dans la foulée lance le script process_perfdata.pl qui réalise l'étape 5.

Une fois en place, la console de Pnp4Nagios ressemble à ça :

Screenshot PNP4Nagios
Screenshot PNP4Nagios

Installation

Les étapes de l'installation de Pnp2Nagios, une fois Shinken fonctionnelle, peuvent dans les 5 suivantes :

  1. Compiler PNP4Nagios
  2. Configurer PNP4Nagios
  3. Configurer l'interface web de PNP4Nagios
  4. Execution du daemon npcd
  5. Mettre en place le module Shinken npcdmod

1. Compilation de Pnp4Nagios

La configuration est classique : ./configure; make all; make fullinstall.
Seule petit détail : les flags du configure à positionner selon la configuration de la machine.

Pour ma part, je n'aime pas trop les installations par défauts dans /usr/local, et j'utilise un user shinken plutôt que nagios, donc à indiquer au configure qui ne le devine pas tout seul :
./configure --prefix=/opt/pnp4nagios --with-nagios-user=shinken --with-nagios-group=shinken --with-rrdtool=/opt/rrdtool-1.4.7/bin/rrdtool
Configure indique si tout ce passe bien les paramètres utilisées pour la compilation et l'installation :
*** Configuration summary for pnp4nagios-0.6.17 03-25-2012 ***


  General Options:
  -------------------------         -------------------
  Nagios user/group:                shinken shinken
  Install directory:                /opt/pnp4nagios
  HTML Dir:                         /opt/pnp4nagios/share
  Config Dir:                       /opt/pnp4nagios/etc
  Location of rrdtool binary:       /opt/rrdtool-1.4.7/bin/rrdtool Version 1.4.7
  RRDs Perl Modules:                *** NOT FOUND ***
  RRD Files stored in:              /opt/pnp4nagios/var/perfdata
  process_perfdata.pl Logfile:      /opt/pnp4nagios/var/perfdata.log
  Perfdata files (NPCD) stored in:  /opt/pnp4nagios/var/spool


  Web Interface Options:
  -------------------------         -------------------
  HTML URL:                         http://localhost/pnp4nagios
  Apache Config File:               /etc/httpd/conf.d/pnp4nagios.conf

  Review the options above for accuracy.  If they look okay,
  type 'make all' to compile.


  WARNING: The RRDs Perl Modules are not found on your system

           Using RRDs will speedup things in larger installations.
Si tout est bon pour vous, il ne reste plus qu'à compiler et installer.
D'abord la compilation des binaires :
make all
Puis l'installation de tout ce qu'il faut :
make fullinstall
L'installation peut être faite étape par étape en utilisant make install, install-webconf, install-config, install-init, voir la doc du site officielle pour le détail.

2. Configuration de PNP4Nagios

Si tout s'est bien passé jusqu'ici, Pnp4Nagios est installé et prêt à être utilisé dans /opt/pnp4nagios.
Toute la configuration est effectuée via le fichier etc/npcd.conf qui contient trois sections :
  • Logging (section Logging Options)
  • Configuration du daemon (section NEEDED OPTIONS), notamment la directive perfdata_spool_dir qui indique où le daemon va scruter les fichiers à charger
  • Configuration du module Nagios ou Shinken (section NPCDMOD OPTIONS), notamment la directive perfdata_file qui indique où Nagios/Shinken va stocker les données de perfdata avant de déplacer à intervalle régulier (perfdata_file_processing_interval) le fichier dans le spool
Rien n'est vraiment à modifier par rapport aux fichier d'exemple, à part peut être le logging dans un fichier au lieu de syslog selon les goût

Le chemin des fichiers RDD est codé en dur dans le script ./process_perfdata.pl : var/perfdata relativement au dossier d'installation de Pnp4Nagios et ne peut pas être modifié.

3 Configuration de l'interface Web de PNP4Nagios

Le fichier de configuration d'Apache fourni par défaut utilise l'authentification de Nagios. l'UI de Shinken n'utilise pas Apache, ces directives doivent donc être adaptées en conséquence. Pour simplement supprimer l'authentification, commenter les lignes suivantes :
#       AuthName "Nagios Access"
#       AuthType Basic
#       AuthUserFile /usr/local/nagios/etc/htpasswd.users
#       Require valid-user
L'URL est configurée via la ligne d'alias dans ce même fichier et correspond aux paramètres du ./configure :
Alias /pnp4nagios "/opt/pnp4nagios/share"
Un premier accès au serveur (http://mon_serveur/pnp4nagios) va tomber sur la page de test qui doit être toute verte ;) Si tout est bon, supprimer simplement le fichier share/install.php dans le dossier d'installation de Pnp4Nagios pour accéder au service. Il n'y aura forcement rien à afficher pour l'instant puisque Shinken n'a encore rien envoyé.

4. Execution du daemon npcd

Rien de bien compliqué : le script d'installation a normalement dû déposer un script de démarrage dans /etc/init.d. Lancer donc le daemon classiquement :
/etc/init.d/npcd start
En fonction de la distribution Linux du serveur, ajoutez si nécessaire le lancement au démarrage à l'aide de chkconfig ou des dossier /etc/rcX.d add-hoc.

5. Configuration de Shinken pour alimenter Pnp4Nagios

Il ne reste plus qu'à dire à Shinken de stocker les données de perfdata dans un fichier dump et de l'envoyer dans le spool tel qu'indiqué dans etc/npcd.conf.

 Le module se configure via le fichier de configuration de l'Arbiter (shinken-specific.cfg par défaut) :

define module{
       module_name  NPCDMOD
       module_type  npcdmod
       config_file  /opt/pnp4nagios/etc/npcd.cfg
}
 Puis doit être ajouté dans les modules du broker :
define broker{
       broker_name      broker-1
       ...
       modules          Simple-log,NPCDMOD
 }
Stopper Shinken et le redémarrer : si tout va bien, tout marche bien !
Shinken doit enregistrer les perfdata dans le fichier dump de pnp4Nagios (pnp4nagios/var par défaut) puis déplacer ce dump dans le spool à interval régulier (pnp4nagios/var/spool par défaut) pour être consommé par le daemon ncp et finir en fichier RDD dans pnp4nagios/var/perfdata.

Si rien ne se passe, controler le log du broker qui donnera un indice. Par exemple, si le chemin du fichier npcd.conf dans la définition du module NPCDMOD n'est pas bon, on trouvera cette jolie erreur :
2012-05-03 17:34:52,240 [1336059292] [broker-1] Back trace of this remove : Traceback (most recent call last):
  File "/opt/shinken/shinken/modulesmanager.py", line 171, in get_instances
    inst = module.get_instance(mod_conf)
  File "/opt/shinken/shinken/modules/npcdmod_broker.py", line 55, in get_instance
    instance = Npcd_broker(plugin, config_file, perfdata_file, perfdata_spool_dir, perfdata_spool_filename, sleep_time)
  File "/opt/shinken/shinken/modules/npcdmod_broker.py", line 76, in __init__
    raise Exception('npcdmod: An error occurred process your config file. Check your perfdata_file or perfdata_spool_dir')
Exception: npcdmod: An error occurred process your config file. Check your perfdata_file or perfdata_spool_dir