dimanche 6 janvier 2013

Monitoring & Raspberry Pi



Voici un petit outil de supervision, créé par Nicolargo dont voici le lien du blog : blog de nicolargo. Cet outil s'appelle Glances, et permet surveiller son système en mode console depuis un terminal. Cet outil est développé en python et utilise différentes librairies python, notamment psutil qui récupère les informations systèmes de la raspberry pi.





Les différentes statistiques sont classées et visibles grâce à différentes couleurs :

  • VERT :  la statistique est OK
  • BLEU : la statistique est à surveiller
  • VIOLET : la statistique est en alerte
  • ROUGE : la statistique est critique

De nombreux raccourci clavier permettent d'activer ou désactiver différentes fonctions, de trier certaines statistiques, etc ...

Voici un petit screenshot de cet utilitaire :




Deux nouveaux paquets sont à installer dans le dossier package de buildroot :

# mkdir -p BUILDROOT_PATH/package/python-psutil
# mkdir -p BUILDROOT_PATH/package/glances

Python-psutil


Le dossier python-psutil contient le fichier de configuration et son makefile :

# ls -al BUILDROOT_PATH/package/python-psutil
total 108
drwxr-xr-x   2 sinseman44 sinseman44  4096 2013-01-05 23:23 ./
drwxr-xr-x 553 sinseman44 sinseman44 77824 2013-01-06 18:45 ../
-rw-r--r--   1 sinseman44 sinseman44   469 2013-01-05 11:09 Config.in
-rw-r--r--   1 sinseman44 sinseman44  1136 2013-01-05 23:23 python-psutil.mk

Config.in :

config BR2_PACKAGE_PYTHON_PSUTIL
        bool "python-psutil"
        depends on BR2_PACKAGE_PYTHON
        help
          psutil is a module providing an interface for retrieving information on all running processes
          and system utilization (CPU, memory, disks, network, users) in a portable way by using Python,
          implementing many functionalities offered by command line tools such as
          (ps, top, df, kill, free, lsof, netstat, ifconfig, nice, etc ...)

          http://code.google.com/p/psutil

python-psutil.mk :

#############################################################
#
# python-psutil
#
#############################################################

PYTHON_PSUTIL_VERSION = 0.6.1
PYTHON_PSUTIL_SOURCE  = psutil-$(PYTHON_PSUTIL_VERSION).tar.gz
PYTHON_PSUTIL_SITE    = http://psutil.googlecode.com/files

PYTHON_PSUTIL_DEPENDENCIES = python

define PYTHON_PSUTIL_BUILD_CMDS
        (cd $(@D); $(HOST_DIR)/usr/bin/python setup.py build_py)

        (cd $(@D); \
                PYTHONXCPREFIX="$(STAGING_DIR)/usr/" \
                CC="$(TARGET_CC) -pthread" \
                LDSHARED="$(TARGET_CC) -pthread -shared -Wl,-O1,--sort-common,--as-needed" \
                CFLAGS="-fno-strict-aliasing -I$(STAGING_DIR)/usr/include/python2.7 $(CFLAGS)" \
                LDFLAGS="-L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib $(LDFLAGS)" \
                "$(HOST_DIR)"/usr/bin/python setup.py build_ext \
                --include-dirs="$(STAGING_DIR)"/usr/include \
                --library-dirs="$(STAGING_DIR)"/usr/lib)
endef

define PYTHON_PSUTIL_INSTALL_TARGET_CMDS
        (cd $(@D); PYTHONPATH=$(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages \
        $(HOST_DIR)/usr/bin/python setup.py install --prefix=$(TARGET_DIR)/usr)
endef

$(eval $(generic-package))

Glances 


Le dossier glances contient le fichier de configuration et son makefile :

# ls -al BUILDROOT_PATH/package/glances
total 108
drwxr-xr-x   2 sinseman44 sinseman44  4096 2013-01-06 18:43 ./
drwxr-xr-x 553 sinseman44 sinseman44 77824 2013-01-06 18:45 ../
-rw-r--r--   1 sinseman44 sinseman44   244 2013-01-06 18:38 Config.in
-rw-r--r--   1 sinseman44 sinseman44  1101 2013-01-06 18:43 glances.mk

Config.in :

config BR2_PACKAGE_GLANCES
        bool "glances"
        depends on BR2_PACKAGE_PYTHON_PSUTIL
        depends on BR2_PACKAGE_PYTHON_SETUPTOOLS
        help
          Glances is a CLI curses based monitoring tool for GNU/Linux and BSD OS

          http://nicolargo.github.com/glances

glances.mk :

#############################################################
#
# glances
#
#############################################################

GLANCES_VERSION = ebf8cf92d2520b2d5f815e6531b1a628f1e0dd6f
GLANCES_SITE_METHOD = git
GLANCES_SITE = https://github.com/nicolargo/glances.git

GLANCES_DEPENDENCIES = python

define GLANCES_BUILD_CMDS
        (cd $(@D); $(HOST_DIR)/usr/bin/python setup.py build_py)

        (cd $(@D); \
                PYTHONXCPREFIX="$(STAGING_DIR)/usr/" \
                CC="$(TARGET_CC) -pthread" \
                LDSHARED="$(TARGET_CC) -pthread -shared -Wl,-O1,--sort-common,--as-needed" \
                CFLAGS="-fno-strict-aliasing -I$(STAGING_DIR)/usr/include/python2.7 $(CFLAGS)" \
                LDFLAGS="-L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib $(LDFLAGS)" \
                "$(HOST_DIR)"/usr/bin/python setup.py build_ext \
                --include-dirs="$(STAGING_DIR)"/usr/include \
                --library-dirs="$(STAGING_DIR)"/usr/lib)
endef

define GLANCES_INSTALL_TARGET_CMDS
        (cd $(@D); PYTHONPATH=$(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages \
        $(HOST_DIR)/usr/bin/python setup.py install --prefix=$(TARGET_DIR)/usr)
endef

$(eval $(generic-package))

Il faut ensuite modifier le fichier de configuration général pour l'intégrer à buildroot :

# vim BUILDROOT_PATH/package/Config.in
270 if BR2_PACKAGE_PYTHON
271 menu "external python modules"
272 source "package/python-dpkt/Config.in"
273 source "package/python-id3/Config.in"
274 source "package/python-mad/Config.in"
275 source "package/python-netifaces/Config.in"
276 source "package/python-nfc/Config.in"
277 source "package/python-pygame/Config.in"
278 source "package/python-serial/Config.in"
279 source "package/python-setuptools/Config.in"
280 source "package/python-cheetah/Config.in"
281 source "package/python-openssl/Config.in"
282 source "package/python-sqlite/Config.in"
283 source "package/python-yenc/Config.in"
284 source "package/python-cherrypy/Config.in"
285 source "package/python-psutil/Config.in"
286 source "package/glances/Config.in"
287 endmenu
288 endif
289 source "package/ruby/Config.in"
290 source "package/tcl/Config.in"
291 endmenu

Une fois les modifications effectuées, selectionner l'utilitaire dans la section Interpreter languages and scripting -> external python modules, à l'aide de la commande :

# make menuconfig


Compilation de l'utilitaire et intégration de celui-ci au système de fichiers :

# make

Utilisation


l'option "-t" permet de choisir le temps de rafraîchissement (en seconde) qui est par défaut de 1 seconde.

# python /usr/bin/glances -t 5



Aucun commentaire:

Enregistrer un commentaire