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) The downloaded source packages are in |
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.