PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Thuban : Par quoi remplacer xscreensaver?

mardi 5 avril 2016 à 18:02
Nous avons récemment eu la mauvaise surprise de recevoir un avertissement injustifié de xscreensaver. Sans parler du manque de respect que représente cette agression à l'utilisateur, la meilleure solution reste la suppression pure et simple de xscreensaver.

Plusieurs personnes vous rappeleront qu'il n'est plus nécessaire "d'économiser les écrans" récents. Mais on peut souhaiter vouloir faire défiler les photos de famille ou simplement bloquer l'écran après quelques minutes d'inactivité pour éviter des manipulations indésirées pendant la pause café.

Mais par quoi le remplacer?

Nous allons utiliser des petits outils KISS pour ça. Je vous invite à installer le paquet xautolock, qu'on lancera en début de session. Il se chargera de lancer une application après un certain temps d'inactivité. Il s'utilise ainsi pour lancer une commande après 5 minutes d'inactivité :
xautolock -time 5 -locker commande_à_lancer


Voyons quelques cas :

** Je veux seulement bloquer l'écran après 10 minutes d'inactivité : vous pouvez utiliser le petit outil slock disponible dans le paquet suckless-tools. Il se contente de mettre l'écran en noir. Tapez votre mot de passe et valider pour débloquer
xautolock -time 10 -locker slock

** Je veux voir un diaporama après 5 minutes d'inactivité (méthode KISS) : Installez le paquet qiv, qui se chargera du diaporama. Au début de la session, lancez la commande suivante :
xautolock -time 5 -locker "qiv -u -s -r -d 3 -i -c -f /home/moi/Images"

Remplacez /home/moi/Images vers le dossier contenant vos photos.
(-u va chercher dans les sous-dossiers, -s lance le diaporama, -r le rend aléatoire, -d 3 change les photos toutes les 3 secondes, -i cache la barre d'information, -c lit les images en boucle, -f met en plein écran)
** Je veux voir un diaporama après 5 minutes d'inactivité (méthode bidouille) : Vous pouvez utilisez ce que vous préférez pour le diaporama. Je vais ici créer un script qui s'en charge avec cyclope, la visionneuse d'image disponible sous handylinux.
On enregistre le script suivant dans /home/utilisateur/scripts/diaporama. Ce script a besoin du paquet xdotool
#!/bin/sh
# dépendance : xdotool

# répertoire contenant les photos
PHOTOS=/home/xavier/Images
cyclope "$PHOTOS" &
sleep 1
xdotool search --class cyclope key --window %@ f p

exit 0


On n'oublie pas de rendre le script éxécutable :
chmod +x /home/utilisateur/scripts/diaporama


Enfin, en début de session, on lance la commande suivante :
xautolock -time 10 -locker /home/utilisateur/Scripts/diaporama

Oui, cyclope n'est certainement pas le plus adapté pour cette tâche, mais vous aurez compris le principe

** À ce stade, toutes les folies sont permises. Par exemple, on peut lancer un film tiens :
xautolock -time 10 -locker "vlc -f /home/moi/Vidéos/film.mp4


Je vous laisse imaginer les choses les plus folles.

Dernière astuce avant de vous laisser : vous pouvez conserver xscreensaver sans le démarrer en début de session. PAr contre, il vous est possible de lancer votre écran de veille favori en allant directement le chercher dans /usr/lib/xscreensaver. Par exemple en lançant :
/usr/lib/xscreensaver/xmatrix


On peut même les mettre en fond d'écran :
/usr/lib/xscreensaver/glmatrix -root

— (permalink)

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

Marco : Django: enregistrer une entité en utilisant plusieurs pages

mardi 5 avril 2016 à 16:43

Le but de cet article est de vous présenter la méthode que j’ai utilisée pour enregistrer une entité en plusieurs étapes, donc en utilisant plusieurs pages. La sauvegarde en base de données s’effectue seulement lors de la dernière étape.

Contexte technique: Django 1.9.5, Python 3.5.1

Cas concret: enregistrement d’un profil utilisateur sur plusieurs pages. Ici nous nous limiterons à deux pages mais il est très facile de l’étendre à n pages. Donc sur la page 1 nous permettrons à l’utilisateur de saisir certains champs. Ensuite sur la page 2 il renseignera les champs restants et l’enregistrement en base de la totalité des éléments (page 1 + page 2) s’effectuera.

Installation de l’application django

pip install django django-countries
django-admin start project user_profile_several_pages
cd user_profile_several_pages
# Notre application de création de profil utilisateur s'appelle ici website
./manage.py startapp website
# Création du super utilisateur pour la partie admin
./manage.py createsuperuser
INSTALLED_APPS = [
    ...
    'website',
]
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('website.urls', namespace='website')),
]

Le modèle (fichier website/models.py)

from django.db import models
from django.contrib.auth.models import User as DjangoUser
from django_countries.fields import CountryField

class UserProfile(models.Model):
    user = models.OneToOneField(DjangoUser, on_delete=models.CASCADE)
    sex = models.CharField(
        u"Sexe", max_length=1, choices=(('m', u'Masculin'), ('f', u'Féminin'))
    )
    city = models.CharField(u"Ville", max_length=20)
    country = CountryField(verbose_name=u"Pays", default="FR")
    web_site = models.URLField(u"Site web", blank=True, null=True)
    age = models.PositiveSmallIntegerField(u"Age", null=True, blank=True)
    information = models.TextField(u"Autres informations", null=True, blank=True)

    class Meta:
        verbose_name = u"Profil utilisateur"
        verbose_name_plural = u"Profils utilisateur"

    def __str__(self):
        return "%s %s" % (self.user.first_name, self.user.last_name)

Rien de bien compliqué dans ce modèle. On notera simplement la référence vers django.contrib.auth.models.User pour les éléments spécifiques au compte utilisateur « système » (first_name, last_name, email, password).

Les forms (fichier website/forms.py)

from django import forms
from django.utils.translation import ugettext, ugettext_lazy as _
from website.models import DjangoUser, UserProfile


class DjangoUserForm(forms.ModelForm):
    error_messages = {
        'password_mismatch': _("The two password fields didn't match."),
    }
    first_name = forms.CharField(required=True, label=u'Nom')
    last_name = forms.CharField(required=True, label=u'Prénom')
    email = forms.EmailField(required=True, label=u'Mail')
    password = forms.CharField(required=True, label=u'Password', widget=forms.PasswordInput)
    password_conf = forms.CharField(required=True, label=u'Password (confirmation)', widget=forms.PasswordInput)

    def clean_password_conf(self):
        """
        Cette méthode est exécutée automatiquement
        lorsque form.is_valid() est invoquée dans la vue
        """
        password = self.cleaned_data.get('password')
        password_conf = self.cleaned_data.get('password_conf')
        if password and password_conf:
            if password != password_conf:
                raise forms.ValidationError(
                    self.error_messages['password_mismatch'],
                    code='password_mismatch',
                )
        return password_conf

    class Meta:
        model = DjangoUser
        fields = ['first_name', 'last_name', 'email',]

class UserProfileFormStep1(forms.ModelForm):
    class Meta:
        model = UserProfile
        exclude = ['user', 'web_site', 'age', 'information']

class UserProfileFormStep2(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ['web_site', 'age', 'information']

On peut noter ici la présence de trois formulaires:

La vue (fichier website/views.py)

On utilise ici une vue générique basique pour bénéficier d’un minimum de traitements automatiques du framework Django. J’hérite ici de la TemplateView qui est assez rudimentaire. Je n’ai pas utilisé de vue de plus « haut niveau » (type FormView) car j’avais besoin d’effectuer des traitements manuels pour coller à mes besoins.

from django.core.urlresolvers import reverse
from django.db import transaction
from django.views.generic.base import TemplateView
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.contrib import messages
from django.contrib.auth.models import User

from website.forms import *


class ProfileAdd(TemplateView):
    template_name = 'website/profile_edit.html'

    def get(self, request, step, **kwargs):
        context = super(ProfileAdd, self).get_context_data(**kwargs)
        if step == '1':
            context['up_form'] = UserProfileFormStep1(prefix='user_profile')
            context['user_form'] = DjangoUserForm(prefix='user')
        elif step == '2':
            context['up_form'] = UserProfileFormStep2()
        else:
            logger.error("Step number invalid: '%s'" % step)

        context['step'] = step
        return render(
            request,
            self.template_name,
            context,
        )

    def post(self, request, step, **kwargs):
        context = super(ProfileAdd, self).get_context_data(**kwargs)
        context['step'] = step
        if step == '1':
            user_form = DjangoUserForm(request.POST, prefix='user')
            up_form = UserProfileFormStep1(
                request.POST, prefix='user_profile'
            )
            context['user_form'] = user_form
            context['up_form'] = up_form
            if up_form.is_valid() and user_form.is_valid():
                user = User.objects.filter(email=user_form.cleaned_data['email'])
                if user.exists():
                    user_form.add_error('email', u'Ce mail existe déjà.')
                    return render(
                        request,
                        self.template_name,
                        context,
                    )
                request.session['user_form'] = user_form.cleaned_data
                request.session['up_form'] = up_form.cleaned_data
                return HttpResponseRedirect(
                    reverse('website:profile_add', args=[2])  # step=2
                )
            else:
                return render(
                    request,
                    self.template_name,
                    context,
                )
                
        elif step == '2':
            up_form2 = UserProfileFormStep2(
                request.POST
            )
            context['up_form'] = up_form2
            if up_form2.is_valid():
                user_form = DjangoUserForm(
                    request.session['user_form']
                )
                up_form1 = UserProfileFormStep1(request.session['up_form'])
                with transaction.atomic():
                    user = user_form.save(commit=False)
                    # Dans notre système le mail est aussi le nom d'utilisateur
                    user.username = user_form.cleaned_data['email']
                    # Le formulaire contient un mot de passe en clair
                    unencrypter_pass = user.password
                    # Donc on utilise set_password pour le chiffrer
                    # Afin qu'il ne soit pas en clair dans la base de données
                    user.set_password(unencrypter_pass)
                    user.save()
                    user_profile = up_form1.save(commit=False)
                    user_profile.user = user
                    user_profile.web_site = up_form2.cleaned_data['web_site']
                    user_profile.age = up_form2.cleaned_data['age']
                    user_profile.information = up_form2.cleaned_data['information']
                    user_profile.save()

                return HttpResponseRedirect(
                    reverse('website:user_profile_created')
                )

        return render(
            request,
            self.template_name,
            context,
        )

La méthode get

Elle est appelée lorsqu’on accède à la première ou seconde page. Le paramètre step est passé en paramètre lorsqu’on appelle cette vue (voir plus loin la configuration des urls). Cette méthode effectue essentiellement deux choses:

La méthode post

Elle est évidemment un peu plus compliquée et comme son nom l’indique récupère les données saisies dans la première page et dans la seconde page suite à l’envoi du formulaire.

Les urls (fichier website/urls.py)

from django.conf.urls import url
from django.views.generic import TemplateView

from website import views

urlpatterns = [
    url(
        r'^$', TemplateView.as_view(
            template_name='website/index.html'
        ),
        name="home"
    ),
    url(
        r'^profile_add/(?P\\d+)/$',
        views.ProfileAdd.as_view(), name="profile_add"
    ),
    url(
        r'^user_profile_created/$', TemplateView.as_view(
            template_name='website/user_profile_created.html'
        ),
        name="user_profile_created"
    ),
]

On a trois urls qui correspondent aux trois vues qui nous redirigent vers trois templates:

Les templates

website/templates/index.html


    
        Page d'accueil
    
    
        

Créer un nouveau profil utilisateur

website/templates/profile_edit.html

Il est commun pour la saisie des données en page 1 et en page 2.

{% csrf_token %}   {% if up_form.errors or user_form.errors %}     

Le formulaire contient des erreurs :

  {% endif %} {% if step == "1" %} {{ user_form.as_table }} {{ up_form.as_table }} {% endif %} {% if step == "2" %} {{ up_form.as_table }} {% endif %}
{% if step == "1" %}Suivant{% elif step == "2" %}Enregistrer{% endif %}>

A noter qu’à la limite on aurait pu se passer du test sur la variable step pour l’affichage des formulaires. A l’étape 2 user_form n’est pas instancié donc il n’aurait pas été affiché. Mais une des règles de Python est bien « explicite est mieux qu’implicite » non ?

website/templates/user_profile_created.html


    
        Création utilisateur
    
    
        

L'utilisateur a bien été créé

Création du module d’administration (fichier website/admin.py)

Il est simplement utilisé ici pour vérifier que la création du profil utilisateur s’est effectuée correctement.

from django.contrib import admin

from website.models import UserProfile


admin.site.register(UserProfile)

Lancement de l’application

./manage.py makemigrations
./manage.py migrate
./manage.py runserver

Remarques sur cet article

Voilà j’espère que cet article a pu vous être utile. Ceci dit en aucun cas je ne prétends que c’est la meilleur façon de faire, que c’est la solution la plus rapide. D’ailleurs si vous avez des remarques je suis preneur, car parfois quand on code et qu’on souhaite à tout prix résoudre un problème, on a du mal à prendre du recul.

Gravatar de Marco
Original post of Marco.Votez pour ce billet sur Planet Libre.

Thuban : Blogotext mis à jour

mardi 5 avril 2016 à 11:40
Je suis totalement passé à côté de la nouvelle version de blogotext.
Alors que tout le monde parle de PluXML en version 5.5, je passe ce blog sous blogotext en version 3.2.8 sortie en mars 2016. Toutes les informations pour mettre à jour sont disponible ici.

J'adore blogotext. Pour avoir testé les 2, il est nettement mieux que PluXML. Oui, je le dis carrément, mais je justifie :

** Pluxml est vendu comme génial car sans bases de données. Ouais, ok, ça simplifie les choses à côté d'un wordpress et son gros MySQL. MAIS, pour un blog, qui va contenir des commentaires, une base de données est tout à fait adaptée pour éviter une surcharge du serveur. Car sinon, c'est php qui se charge d'aller parser un tas de fichiers XML. Alors même si c'est bien fait sous pluxml, je rappelle que blogotext utilise la base SQLite. En gros, vous n'avez rien à faire pour l'installer. SQlite est génial pour ça, c'est blogotext qui se charge de l'installer, et la sauvegarde de la base tient en un seul fichier.
De toutes façons, blogotext intègre tout ce qu'il faut pour sauvegarder un site sous forme de .zip.
** Dans blogotext, tout est intégré pour faire une veille efficace : flux rss, partage de liens à la shaarli, hébergement de fichiers, prise de note. Et franchement, même si on n'utilise peut-être pas tout tous les jours, ça dépanne. Et dans une archive de 482ko, pourquoi s'en priver?
** La gestion des commentaires est à mon avis nettement plus simple.
** Il s'agit d'un ensemble de petites choses bien pensées, peaufinées comme il faut. Bref, Timo fait vraiment du bon boulot!

Blogotext, je t'aime! ❤
— (permalink)

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

genma : Yunohost - Comment installer Spip

mardi 5 avril 2016 à 09:00

Prérequis :
- Avoir YunoHost d'installer et savoir utiliser "la moulinette"
- Connaître SPIP (savoir l'installer)
- Savoir taper quelques commande shell

Spip n'est pas une application officielle. Comme indiquée dans la documentation Ces applications n'ont pas été validées par l'équipe YunoHost et ne sont pas officiellement prises en charge. Vous pouvez les tester et les utiliser à vos risques et périls.

Ce qui signifie qu'il faudra veiller à ce que ces applications soient bien à jour (pour éviter les failles de sécurité potentielles).

Installation

Pour installer, SPIP, conformément à la documentation de YunoHost, on passera par le dépôt git :
https://github.com/magikcypress/spip_ynh
et la commande
yunohost app install https://github.com//

Ce dépôt n'était pas à jour, j'ai interagi avec Cyp pour qu'il le soit.

Une fois SPIP installé, on y aura donc accès via mondomaine.tld/spip/ sur le même principe que pour les autres applications YunoHost. Le script aura crée le répertoire /var/www/spip/ avec les droits qui vont bien (appartient à l'utilisateur www-data)

Rq : Cela reste SPIP et il fonctionnera comme n'importe quel SPIP. Il faudra finaliser l'installation etc. via son navigateur avec l'url du type https://mondomaine.tld/spip/ecrire/

MySQL

Le script d'installation de SPIP crée automatiquement une base de données SPIP dans Mysql. J'ai choisi, via phpmyadmin, de créer un utilisateur dédié pour cette base SPIP (avec les bons droits). Lors de la configuration de l'installation de SPIP, on choisit donc "localhost" pour le serveur de la base de données, "SPIP" pour la base de données, l'utilisateur et le mot de passe crée spécifiquement et éventuellement un prefixe si on souhaite héberger plusieurs instances SPIP dans la même base de données.

Migration d'un SPIP existant

Rq : cette partie est indépendante du fait que ce soit SPIP est peut être appliquée à d'autres "logiciels".

La version de SPIP installée est la version par défaut. Il faut donc transférer les fichiers images, squelettes etc. si on veut migrer un SPIP existant.

Rq : on ne peut pas se connecter en ssh à son serveur avec les utilisateurs YunoHost. Seul l'utilisateur admin peut se connecter en ssh aux serveur YunoHost (ce que j'ai désactivé par sécurité), j'ai donc créer un utilisateur dédié pour ssh, qu'on appellera ryoga pour la suite

Pour ce faire, je me connecte avec "ryoga" via sftp (FTP + SSH via Filezilla) et je dépose les fichiers dans /home/ryoga. On peut également le faire par "scp", la commande de copie via ssh.

Ensuite on doit changer le propriétaire de ces fichiers et les déplacer au bon endroit.

ryoga@yunohost$chown -R www-data:www-data ./css/* #par exemple pour les css
# On déplace ensuite les fichiers dans le répertoire de spip.
ryoga@yunohost$sudo mv ./css /var/www/spip/

Une fois que j'ai les fichiers, je peux réimporter un dump de base de données (que j'ai déposé dans /var/www/spip/tmp/dump selon les quelques commandes données ci dessus).

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Monitoring-FR : Netdata : Real-Time performance monitoring

lundi 4 avril 2016 à 08:30

 

Le monitoring est l’un des enjeux actuels des outils de supervision (ici, le terme supervision est pris dans son sens le plus large possible). Pour rappel, le monitoring consiste à récolter des données numériques et tracer leur évolution dans le temps sur des graphiques. Ceci est pour le cas d’utilisation le plus simple. Cependant, le cas d’utilisation actuel est plus complexe :

Ceci vaut notamment pour les infrastructures disposant de nombreux équipements. Est-ce que cela est nécessaire pour tout le monde? C’est oublié la maxime less is more : en faire moins, retirer tout ce qui n’est pas utile pour extraire l’intérêt premier d’un outil. Netdata est un outil libre (GPLv3) de ce type. Son intérêt est qu’il convient parfaitement à des parcs informatiques de quelques dizaines de serveurs.

Netdata, le monitoring pour les « petits » parcs informatiques

Netdata convient parfaitement aux petits parcs informatiques. Petit, ici, n’est pas péjoratif mais réaliste : est-il nécessaire de passer plusieurs jours à installer puis configurer un outil de monitoring en essayant de comprendre les différentes fonctions de consolidations et leurs différentes subtilités lorsqu’on est en équipe réduite, avec un budget et un temps limités ? Non, évidemment ! Netdata permet de disposer d’un outil relativement simple à installer et configurer et disposant de fonctionnalités intéressantes.

Netdata, le monitoring en temps-réel

Netdata n’est pas forcément dédié aux petits parcs informatiques. Il convient parfaitement aux grands parcs informatiques : dans ceux-ci, généralement, un outil de gestion de configuration est utilisé et peut permettre de déployer un logiciel et sa configuration sur l’ensemble des serveurs GNU/Linux. La philosophie de Netdata est le monitoring en temps-réel. Cela signifie que vous ne disposez pas d’une centralisation de toutes les informations mais d’une information en temps-réel sur chaque équipement. Vous devez vous connecter sur chaque équipement pour visualiser ses informations.

Il est à noter que la durée de rétention est paramétrable mais l’outil n’est pas conçu pour stocker les informations sur une longue période de temps. Augmenter de manière significative cette durée de rétention peut faire exploser la mémoire du serveur ou influer négativement sur ses performances.

Installation sur chaque équipement monitoré

Netdata s’installe sur chaque serveur monitoré. L’installation de Netdata nécessite une compilation des outils. Pour le moment, la procédure est documentée pour Debian, Ubuntu, RedHat, CentOs et ArchLinux. À la vue de celle-ci, elle peut aussi être adaptée pour d’autres distributions GNU/Linux et, pourquoi pas, pour les BSD voire les Unix propriétaires, si les dépendances sont disponibles. D’ailleurs, Netdata indique que l’outil a été testé avec succès sur Fedora et Gentoo.

Netdata ne gère pas le monde Windows pour le moment. Cela ne semble pas être prévu et nécessiterait une réécriture quasi-complète de l’outil.

Auto-détection et dashboard par défaut

Lors de son démarrage, Netdata va détecter automatiquement certaines informations et collecter les données. Il n’est pas nécessaire de déclarer toutes les interfaces réseaux, tous les disques, le nombre de CPU, la taille de la mémoire vive, … Il va aussi détecter automatiquement les processus « courants » (cron, ntp, named, ssh, nfs, nginx, …) et les grouper par « fonction » pour tracer la consommation CPU de chacun.

Par contre, il ne va pas détecter quelles sont les applications installées et activer automatiquement le « plugin » nécessaire. Par exemple, si vous souhaitez disposer d’indicateurs spécifiques sur MySQL ou NGinx, vous devrez activer le « plugin » et le configurer.

Un dashboard par défaut est proposé. Celui-ci contient tous les indicateurs. La configuration est complète, voire trop complète mais la configuration par défaut convient parfaitement.

Interface attrayante

L’interface est plutôt attrayante et les graphiques ressemblent, par certains aspects (couleurs, design, légende, …), à Grafana. Vous pouvez survoler les graphiques pour obtenir les valeurs mesurées. Sur des graphiques avec plusieurs valeurs tracées, il est possible de choisir quel élément sera tracé en cliquant sur la légende pour les afficher/cacher.

netdata : exemple de graphiques

netdata : exemple de graphiques

La première partie de l’écran est composé d’indicateurs globaux du système comme la moyenne des taux d’occupation des CPU, les écritures disques, le taux d’occupation de la swap, …

Netdata : overview

Netdata : overview

Pour naviguer dans les indicateurs disponibles, le menu se trouve à droite de l’écran et est composé en deux niveaux. Le premier niveau se replie automatiquement pour éviter de prendre trop de place et il est en position fixe, donc toujours visible : très pratique pour naviguer efficacement dans les indicateurs. Certains outils de supervision plus mainstream devraient s’en inspirer (suivez mon regard 😉 ).

netdata : menu des indicateurs

Il est possible de revenir dans le passé, en cliquant avec la souris sur le graphique, en maintenant le click puis en se déplaçant vers la gauche. C’est le même mouvement que pour se déplacer dans un outil en ligne de cartographie comme Google Maps par exemple.

L’interface permet de zoomer dans les graphiques, en enfonçant et en maintenant enfoncée la touche SHIFT du clavier puis sélectionnant la zone sur laquelle vous souhaitez zoomer à l’aide de la souris et en relâchant. Lorsque le bouton de la souris est relâché, tous les autres graphiques sont mis à jour à la même période : pratique.

Il est possible de zoomer dans le graphique différemment. Pour cela, il faut toujours enfoncer et maintenir la touche SHIFT du clavier, placer le pointeur de la souris sur un graphique et utiliser la roulette de la souris pour zoomer ou dé-zoomer. Problème : cette fonction n’est disponible que sur Chrome, pas sur Firefox ni sur IE/Edge. Aucune information n’est disponible pour les autres navigateurs (Safari par exemple) et n’en ayant aucun à ma disposition, je ne peux le vérifier.

Pour revenir à un « état normal » de l’interface c’est à dire à la visualisation temps-réel et un rafraîchissement automatique des graphiques, il suffit de double-cliquer sur un graphique.

Limites

Comme tout outil, Netdata a ses limites. Il est bon de connaître les points forts d’un outil mais aussi ses limites pour vérifier si celui-ci correspond à vos besoins.

Netdata est limité au monde GNU/Linux. Si votre parc informatique est composé de serveurs Windows, vous ne pourrez pas l’installer sur ceux-ci. Il est peut-être possible qu’il fonctionne sur *BSD, mais vous ne disposerez pas de tous les indicateurs collectés. Cela peut-être bloquant pour vous (ou pas!).

Netdata nécessite d’être installé sur tous les serveurs, contrairement à certains outils qui requiert uniquement l’installation d’un agent spécifique ou l’activation de SNMP. Cela peut-être très gênant sur les serveurs exposés sur Internet : il faut bien vérifier les règles de sécurité pour s’assurer qu’un potentiel attaquant n’aura pas d’accès à l’interface de Netdata et voir en temps réel quelles sont les meilleures actions pour « DOSer » votre serveur. Cependant, l’installation de Netdata sur chaque serveur se justifie dans le sens où l’outil a pour but de monitorer « en temps-réel » les serveurs.

L’intégration de Firefox et de IE/Edge n’est pas parfaite : il est impossible de faire un zoom arrière sur ses navigateurs. Cela n’est peut-être pas de la responsabilité des développeurs de Netdata car Firefox utilise SHIFT+mollette de la souris pour naviguer dans l’historique. Il est presque obligatoire d’utiliser Google Chrome pour utiliser Netdata : dommage!

Il manque un raccourci sous forme de boîte de sélection qui afficherait « la dernière heure », « les 3 dernières heures », … et qui permettrait de choisir la durée d’affichage par défaut.

La documentation est un peu fouillis : il est difficile de s’y retrouver lorsque l’on cherche un sujet précis. Elle est aussi incomplète sur certains sujets.

Gravatar de Monitoring-FR
Original post of Monitoring-FR.Votez pour ce billet sur Planet Libre.