Omeganoc : ajustements (2)

Omeganoc : ajustements (2) jpp

L'affichage réalisé "en direct" par Hokuto ne montre pas une chose très intéressante/amusante : il est possible de faire calculer des prévisions par le module "Nanto" qui s'affichent comme les données de mesure, presque, elles sont grisées et font de petits panaches du plus bel effet. 
Nanto est réalisé en "R", ce qui m'a donné l'occasion de rentrer un peu dans ce système de calcul pour réussir à la faire tourner. Cette fonctionnalité est plus ou moins expérimentale, mais un peu "coton" à installer. 
Au premier essai "Nanto" refuse de se lancer :

File "/usr/local/nanto/service.py", line 34, in <module> 
from lockfile.pidlockfile import PIDLockFile 
ImportError: No module named pidlockfile

Simple probleme de version entre les modules "lockfile" et "python-daemon" 
Je désinstalle et réinstalle les deux dans les versions suivantes : 
python-daemon 2.1.0 
lockfile-0.12.2 
Ensuite copier ...../omeganoc/nanto/etc/nanto.cfg dans /etc/nanto.cfg 
Après cette petite cure le process "nanto" démarre, mais il lui manque des tas de choses : 
ImportError: No module named rpy2.rinterface 
Pas de "R" non plus ! 
Cela se résout par "apt-get install python-rpy2" qui charge tout ce qui semble nécessaire (entre autres les packages "R") :

  bzip2-doc cdbs gfortran gfortran-4.9 libblas-dev libbz2-dev 
  libgfortran-4.9-dev libjpeg-dev libjpeg62-turbo-dev 
  liblapack-dev liblzma-dev libncurses5-dev libpcre3-dev 
  libpng12-dev libreadline-dev libreadline6-dev libtcl8.5 
  libtinfo-dev libtk8.5 r-base-core r-base-dev r-cran-boot 
  r-cran-class r-cran-cluster r-cran-codetools r-cran-foreign 
  r-cran-kernsmooth r-cran-lattice r-cran-mass r-cran-matrix 
  r-cran-mgcv r-cran-nlme

soit 47Mo d'archives. 
Auxquels il faut ajouter "r-cran-segmented" ? et "r-cran-fimport" ? ainsi que   r-cran-nnet r-cran-rpart r-cran-spatial r-cran-survival r-doc-html r-recommended ... 
En modifiant le fichier de config "/etc/nanto/cfg" et en décommentant le "debug_worker" on peut déclencher un calcul immédiat et non en attendant l'horaire planifié. 
J'obtient une nouvelle erreur :

ERROR - An error occured while executing the R script "/usr/local/nanto/timewindow.r": Error in library("forecast") : there is no package called ‘forecast’ 
Malgré cette erreur le programme continue et calcule plein de trucs (selon le log) avec toutefois de nouveaux messages d'erreur : 
 An exception occured while computing the timewindow predictions for component gwadsl.__HOST__.pl: global name 'save_error' is not defined

Dans quel paquet Debian se trouve cette librairie ? 
   "apt-get install r-cran-fimport" 
qui installe en outre : 
   lynx lynx-cur r-cran-fimport r-cran-timedate r-cran-timeseries 
Cette installation ne fournit pas la librairie "forecast" car les messages d'erreur sont toujours présents ! 
Une recherche donne la possibilité que ces paquets soient disponibles grâce à l'archive : "http://cran.univ-paris1.fr/" (ou lyon1.fr), ajouter dans votre "sources.list" : 
deb http://cran.univ-paris1.fr/bin/linux/debian jessie-cran3/

Le message sur la librairie "forecast" est toujours présent, il faut installer le paquet ? On lance "R" :

R 
R version 3.1.1 (2014-07-10) -- "Sock it to Me" 
Copyright (C) 2014 The R Foundation for Statistical Computing 
Platform: x86_64-pc-linux-gnu (64-bit) 
.... 
Type 'demo()' for some demos, 'help()' for on-line help, or 
'help.start()' for an HTML browser interface to help. 
Type 'q()' to quit R. 
install.packages("forecasting") 
Installing package into ‘/usr/local/lib/R/site-library’ 
(as ‘lib’ is unspecified) 
--- Please select a CRAN mirror for use in this session ---


------ cela ouvre une fenêtre pour choisir le serveur CRAN, ici on choisit "France (Lyon 1)"

package ‘forecasting’ is not available (for R version 3.1.1) 
install.package("forecast") 
....... charge beaucoup de choses, compile et se termine par : 
installing to /usr/local/lib/R/site-library/forecast/libs 
** R 
** data 
*** moving datasets to lazyload DB 
** inst 
** byte-compile and prepare package for lazy loading 
** help 
*** installing help indices 
** building package indices 
** testing if installed package can be loaded 
* DONE (forecast)

The downloaded source packages are in 
    ‘/tmp/RtmpEYBidC/downloaded_packages’ 
>q() 
Save workspace image? [y/n/c]: n

On ne sauvegarde pas le "workspace", On reteste le lancement de "nanto" et cette fois cela a l'air de mieux fonctionner, le service se lance et lance immédiatement le calcul. Le log ne présente plus de message d'erreur et on peut penser que le calcul est réussi ! 
Toutefois quelques messages d'erreur sont présents sur quelques catégories :

016-01-13 17:38:49,496 - root - DEBUG - [nanto:timewindow] Found 0 data points for node filtre.NetworkUsage.br0_in_octet.1452616033 
2016-01-13 17:38:49,496 - root - INFO - [nanto:timewindow]  Skipped time series on filtre.NetworkUsage.br0_in_octet.1452616033: not enough data (0 points) 
2016-01-13 17:38:49,496 - root - WARNING - [nanto:timewindow]  An exception occured while computing the timewindow predictions for component filtre.NetworkUsage.br0_in_octet.1452616033: global name 'save_error' is not defined 
2016-01-13 17:38:49,496 - root - DEBUG - [nanto:timewindow]  Exception details: Traceback (most recent call last): 
  File "/usr/local/nanto/timewindow_worker.py", line 61, in internal_run 
    success = self.__go(c, checkinterval) 
  File "/usr/local/nanto/timewindow_worker.py", line 94, in __go 
    save_error(target, "There is not enough data to have make accurate predictions") 
NameError: global name 'save_error' is not defined

Remarque : 
Cela consomme pas mal de CPU : 50 à 98% de ma VM (en monoprocesseur). 
Le volume de la base de données sqlite "/var/lib/shinken/nanto.db" augmente sérieusement et dépasse 1,5 mégaoctet sur mon petit test ne comportant que 8 machines et environ 30 services.

Dans mon cas le calcul a duré de : 17:37:47 à 17:54:34 soit environ 17 minutes. 
La consommation mémoire reste très raisonnable : moins de 450M hors buffers et cache, environ 896M de mémoire devraient suffire largement dans mon cas. 
Test avec 1024Mo de mémoire et 2 CPU. 
Remarques : 
1) Nanto n'utilise qu'un seul processeur ! 
2) Consommation mémoire < 1024Mo y compris buffers et cache. 
3) Durée du traitement : 
    19:21:07 à 19:37:35, 1050 secondes soit un peu plus de 17 minutes 
    21:37:41 à 21:53:11, 930 secondes soit un peu plus de 15 minutes.

Charger aussi "apt-get install libopenblas-base " pour augmenter les performances en multithread; cela n'est pas évident, même avec deux processeurs attribués à la MV. En fait avec 1 processeur et 1024Mo de mémoire tout se passe bien et le fichier "nanto.db" s'est stabilisé à moins de 300Ko.