Blog de dada

DevOps, bidouilleur et routard plein de logiciels libres

De l'alerting à base de logs

Rédigé par dada / 12 février 2020 / 2 commentaires


Cela fait un moment que je cherche un moyen de déclencher des alertes à partir d'erreurs spécifiques dans les logs. En fait, ça fait depuis la sortie de Loki que j'en rêve.



Pour rappel, le couple Loki/Promtail, permet de centraliser des logs dans Grafana pour les visualiser calmement plus tard. En gros, ça peut donner un truc comme ça, ou comme ça.
Après avoir mis tout ça en place, je trouvais dommage de ne pas pouvoir continuer l'intégration jusqu'au bout : repérer un message d'erreur dans des logs et transformer l'écran de monitoring en sapin de Noël.

En fait, c'était déjà possible, j'avais juste raté l'information !

Préambule

Ce dont je vais parler dans la suite du billet nécessite d'avoir déjà la stack Loki + Promtail + Grafana + Prometheus + Alert-manager. Ça demande un peu d'huile de coude et de temps mais ça s'installe très bien.

Les Pipelines

Promtail, comme tout exporter, expose des metrics de toute sorte. De base, il fait des choses simples, mais avec les Pipelines, on peut pousser le truc plus loin : ajouter le timestanp à une ligne de log, modifier des labels, ajouter clairement le numéro de ligne du log et, on y est, créer une metric custom !

Créer une metric custom

On va commencer par un exemple très simple :
scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*log
      hostname: diaspodon.fr
  pipeline_stages:
  - match:
      selector: '{job="varlogs"}'
      stages:
      - regex:
          expression: ".*(?P<error_message>error_message.*)"
      - metrics:
          error_total:
            type: Counter
            description: "total count of errors"
            source: error_message
            config:
              action: inc
Ceci est une partie de la configuration du Promtail en place sur mon serveur Mastodon. Ce n'est pas la plus propre du monde mais ça fera l'affaire.

Le job

On y voit la configuration qui permet de remonter les logs système de /var/log/*.log avec le label varlogs et un hostname forcé :
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*log
      hostname: diaspodon.fr

Le pipeline

On enchaîne ensuite avec le fameux pipeline, que je vais présenter en deux parties : le selector et les metrics 

- La partie selector
  pipeline_stages:
  - match:
      selector: '{job="varlogs"}'
      stages:
      - regex:
          expression: ".*(?P<error_message>error_message.*)"
Le selector permet de s'y retrouver. On va aller chercher à bidouiller les logs du job varlogs, pas ailleurs. Le stage permet de mettre en place une expression régulière en RE2, la version Google est regexp, pour filtrer l'information dont on a besoin.
Ici, je veux qu'une action soit déclenchée à chaque fois que error_message apparaît dans les logs. Celles et ceux qui ont une instance Mastodon savent de quoi je parle. Pour les autres, c'est quand un message ne peut pas atteindre son destinataire. C'est très courant.

- La partie metrics

Pour finir, la partie metrics est carrément celle qui nous intéresse le plus : elle va, comme son nom l'indique, créer une metric qui sera remontée à Prometheus.
      - metrics:
          error_total:
            type: Counter
            description: "total count of errors"
            source: error_message
            config:
              action: inc
On va lire la configuration lentement : La variable error_total sera de type Counter avec la description "total count of errors" et sera alimentée par error_message, défini dans la regexp précédente (entre les <>). De 0, la variable sera incrémentée de 1 à chaque match.

Prometheus

Vérifier la configuration

Vous voyez le truc ? On vient de mettre en place une metric custom qui sera remontée par Promtail vers Prometheus. À l'heure où j'écris ces lignes, cette metric ressemble à ça :
root@diaspodon ~ # curl -s http://localhost:9080/metrics   | grep custom
# HELP promtail_custom_error_total total count of errors
# TYPE promtail_custom_error_total counter
promtail_custom_error_total{filename="/var/log/daemon.log",hostname="diaspodon.fr",job="varlogs"} 92831
promtail_custom_error_total{filename="/var/log/syslog",hostname="diaspodon.fr",job="varlogs"} 50050
On retrouve bien la metric déclarée dans Promtail : error_total, avec son nom complet : promtail_custom_error_total.

Vous me direz que ce n'est pas très joli et vous aurez parfaitement raison. C'est un exemple, juste un exemple !

Mettre en place de l'alerting

Maintenant que vous avez des données dans Prometheus, rédiger une règle d'alerting est assez simple. On devrait s'en sortir avec ce type de chose :
  - alert: Error_total
    expr: promtail_custom_error_total > 1
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Instance {{ $labels.instance }} is invaded by custom errors!"
Simple, rapide, efficace. Si une erreur apparaît, elle sera repérée et une alerte sera déclenchée. Y'a plus qu'à faut qu'on vérifier que votre installation spamme correctement les développeurs pour les mettre sur le coup rapidement.

Pour aller plus loin

Je viens de rapidement parcourir le sujet pour vous donner envie d'y mettre le nez. En l'état, la configuration proposée a un gros problème : une fois qu'une erreur est détectée, le Counter sera incrémenté et rien ne lui permettre de revenir à 0. C'est assez chiant.

J'ai deux façons de contourner le problème : la première avec les développeurs, la deuxième avec ses seuls moyens.

Si les développeurs sont adorables, ils peuvent mettre en place un petit bout de code qui va écrire dans les logs que tout est revenu à la normale. En passant du Counter à une Gauge, on peut dire à Promtail d'incrémenter la metric quand un souci est détecté puis de la décrémenter quand tout redevient fonctionnel. Ça permet de jongler entre 0 et 1 et pas plus.

Par contre, si vous êtes tout seul, vous pouvez tricher en décidant de mettre en place une règle d'alerting qui fait un rate() sur 1h, ou la durée que vous voulez, pour avoir des passages à vide et des périodes de souci. Ça permet d'éviter de passer d'un Counter à une Gauge mais ça demande à mettre un délai de retour au calme long et d'être assidu sur les chan/salon/mail d'alerting.

Bref, c'est encore un point sur lequel je réfléchis. Si vous avez des idées, je prends.

Enfin voilà.

Des bisous

Comment faire comprendre à quelqu'un qu'il a tort

Rédigé par dada / 25 janvier 2020 / 1 commentaire


Maintenant que le titre vous a bien attiré par ici, le voici en entier : Comment faire comprendre à quelqu'un qu'il a tort (et pourquoi c'est une mauvaise question).

Nous devons cet incroyablement trop long titre de vidéo à Mr.Sam (Peertube, Youtube), vidéaste sceptique belge. Je suis encore dans une période de découverte de ce mouvement dit sceptique et je dois bien avouer que j'y trouve beaucoup de jus de cerveau. Du coup, je vous invite à vous y pencher aussi. L'instance Skeptikon est votre amie.

En prélude, le toot de Mathdatech qui me semble être une incroyablement bonne entrée en matière :


Il résume presque à lui tout seul ce que fait comprendre la vidéo de 2h ci-dessous. Presque, puisque Mr.Sam n'oriente absolument pas son discours autour du logiciel libre. Pas du tout même.

Bref, maintenant, la vidéo :


Si je vous en parle dans ce blog de libriste convaincu, c'est que je trouve que nous serions bien avisés de tous tirer des leçons de ce que ce vidéaste prend le temps de nous expliquer.

Se concentrer sur le logiciel libre, mettre de côté tout ce qui n'a pas la bonne licence, exclure l'achat d'outils qui ne respectent pas les libertés fondamentales : c'est une démarche impossible à faire comprendre dans un dialogue frontal. C'est un engagement qui peut être vu comme une fantaisie qui n'apporte que des contraintes si le ou la libriste s'y prend mal lors de son explication. Et c'est foutu. Définitivement.

Du coup, prendre le temps de s'intéresser à la rhétorique, à l'art oratoire et à la construction du dialogue avec son interlocuteur doit faire partie de notre bagage de compétences si nous voulons lutter à armes égales avec les discours des startups ou autres GAFAM. Ils ont le savoir "faire rêver", nous avons des choix de société : c'est un combat incroyablement délicat et difficile.

Bref, je vous encourage vraiment à aller voir le travail de Mr.Sam et bon week-end à vous.

Se faire un réveil 4.0 avec un Raspberry Pi

Rédigé par dada / 15 janvier 2020 / 10 commentaires


Je me suis toujours méfié des objets connectés. Ce n'est un secret pour personne : une grande partie des babioles vendues sous la bannière IoT ou objet connecté sont des machins non sécurisés, non maintenus, non écologiques et d'un intérêt plus que discutable.


Ceci dit, avec l'aide de la WebThings Gateway de Mozilla, il est possible de commencer à jouer avec son matériel existant pour le rendre connecté. Ce truc permet de garder le contrôle des-dits machins connectés puisque le cerveau de ces choses sera dans votre salon et pas sur des serveurs obscurs à l'autre bout du monde.

Un exemple que je vous propose : mettre de côté votre ancien réveil, qui marche très bien, pour le remplacer par un Raspberry Pi.

Les ingrédients

Pour ce faire, il vous faudra :
  • un Raspberry Pi (du Zero au RP4)
  • des enceintes classiques
  • un câble jack
  • l'URL de streaming de FranceInfo

Le Raspberry Pi

Vous allez commencer par utiliser WebThings Gateway comme système d'exploitation de votre Raspberry Pi. C'est une Rasbpian, basée sur Debian donc, modifiée par Mozilla, rien de plus.
Je ne vais pas m'éterniser sur la procédure d'installation : c'est très simple.
Il suffit d'aller télécharger l'image disponible ici, de flasher la carte SD avec et de placer cette-dite carte dans l'ordinateur.

Une fois que la bête a démarré, un nouveau réseau Wifi va apparaître. Connectez vous y depuis votre PC et suivez la procédure de configuration :
  • connectez-la au réseau wifi de votre box
  • créez un compte utilisateur
  • choisissez l'URL qui va bien
L'attribution de l'URL peut prendre du temps, ne paniquez pas, ne touchez à rien : Mozilla vous enverra un lien par mail quand tout sera effectif.

Installer l'extension Radio

Par défaut, WTG ne fait pas grand chose. Tout comme pour Firefox, Mozilla s'appuie sur les gens pour fournir des extensions en pagaille. Et ça marche plutôt pas mal si j'en crois le dépôt officiel.

Je vous laisse cliquer dans les menus pour installer Radio : Settings > Add-ons > le + en bas à droite -> Internet radio. 

L'add-on vient avec quelques webradios inconnues au bataillon. Pas grave, on va installer celle qui nous intéresse : la radio d'État.


Pour récupérer l'adresse de streaming, je suis passé par ce lien qui m'a permis de trouver ça :
  • http://direct.franceinfo.fr/live/franceinfo-midfi.mp3
Il est possible que le flux change ou qu'il ne soit pas vraiment fonctionnel alors prenez le temps de le vérifier. L'autre jour, par exemple, j'avais bien un flux lu mais il ne contenait pas le moindre son : méfiez-vous.

Maintenant, vous devriez avoir WTG correctement configuré dans votre Raspberry Pi. Il ne reste plus qu'à créer la règle qui va permettre d'allumer tout ça aux heures voulues.

Mettre en place le réveil 4.0

WTG fonctionne, en gros, avec deux principes : les choses (things) et les règles (rules).

Les règles permettent de faire faire des choses à vos choses. Vous suivez ?


Dans le cadre du réveil, on va s'amuser à dire à WTG d'activer la chose radio, avec le volume qui va bien, à l'heure qui va bien. Le panneau de création d'une règle est coupé en deux :
  • À gauche, la ou les conditions d'entrée
  • À droite, la ou les conditions de sortie


On va remarquer la complexité relative de la règle puisqu'il faut :
- Deux choses Clock qui déclenchent deux événements à 7h du matin
- Une chose Radio qui allume la radio
- Une chose Radio qui fixe le volume

En une seule phrase, la logique ressemble à ça : À 7h du matin, tu allumes la radio et à 7h du matin, tu montes le volume à 75.
La partie volume de ma règle n'est pas obligatoire. Elle est présente dans mon exemple parce que le volume de base, 50, est trop faible à mon goût.

Aller un peu plus loin

Dans mon cas personnel, j'ai décidé d'ajouter une règle qui arrête la radio à 8h. Pourquoi ? Parce que je dois impérativement décoller à 8h sans quoi je rate mon train.


Si vous avez capté la logique, j'ai utilisé une chose Clock qui se déclenche à 8h et une chose Radio qui arrête la boucle d'informations du matin.

Et voilà !

Conclusion

Vous n'avez plus qu'à laisser votre imagination tourner. Avec WTG, vous pouvez avoir des objets connectés qui se contrôlent depuis un ordinateur dans votre salon que vous pouvez arrêter quand vous le voulez et qui est entièrement open-source.

C'est sans intérêt, donc indispensable ! Bonne année !

Le Blog de dada en 2019

Rédigé par dada / 24 décembre 2019 / 4 commentaires


Comme en 2018, je vous propose de faire le tour rapide des statistiques que mon Matomo a récolté tout au long de l'année.

Pour l'histoire, j'ai décidé de ne plus analyser directement les logs du serveur. Je ne passe plus que part le script en JS chargé, ou non, par le visiteur. Du coup, les bloqueurs font leur boulot, rendant les stats à peine pertinentes. M'enfin, elles restent globalement marrantes à parcourir, et c'est déjà ça.

Les navigateurs



La famille Chrome regroupe 51% (34% bureau et 17% mobile) des navigateurs qui affichent mes bêtises. Firefox se cache derrière avec 22% des visites. Comme l'année dernière, même avec un lectorat très orienté logiciels libres, je n'arrive pas à faire passer Firefox devant la cochonnerie de Google.
Gageons que les récentes annoncent scandaleuses d'Alphabet inversent la tendance en 2020.

Les systèmes d'exploitation



Windows prend la première place avec 40% des visiteurs devant encore et toujours traîner ce boulet. Vient ensuite Android avec 22% puis GNU/Linux avec 21% et enfin MacOS avec 15%. On peut s'amuser à comparer avec les statistiques de 2018 qui affichaient clairement une domination de GNULinux. Faut croire que les linuxiens protègent bien plus leurs vie privée que les autres.

Les périphériques


Là, franchement, pas grand chose à raconter. Les gens sont devant leur PC quand ils lisent mes blablateries. En comparant à l'année dernière, on voit une augmentation des lecteurs sur Mobile. Bref.

Les moteurs de recherche


S'il vous fallait un dessin pour comprendre la domination de Google, vous l'avez.

Les réseaux sociaux.



Avec ses 61%, Twitter se balade en tête des réseaux sociaux qui m'apportent le plus de visiteurs. On trouve ensuite Facebook avec 30% et Mastodon avec 6%. Mon petit doigt me dit que le Journal du Hacker n'est pas innocent dans cette histoire. Personnellement, je ne suis utilisateur que de Mastodon et c'est là que vous devriez me suivre si ce que je raconte vous intéresse ;-)

Le top 3 des articles


Le reste du classement reflète ce que j'ai le plus bidouillé cette année : Kubernetes. Je regrette que mes articles de réflexion ne soient pas plus mis en avant mais les moteurs de recherche n'en ont visiblement rien à foutre. Tant pis.

Plus de chiffres

Matomo compte pas moins de 52 000 visites, bien loin des 1 900 000 recensées en 2018.
Pas loin de 70 000 pages vues.
J'ai réussi à pondre 22 billets.
Vous avez pondu de 128 commentaires.

Enfin voilà. Je vous laisse sur ces chiffres et vous souhaite de joyeuses fêtes de fin d'année à tous !

Merci et des bisous !

Classé dans : Non classé / Mots clés : aucun

Twitter, mon amour

Rédigé par dada / 18 octobre 2019 / 5 commentaires


En grand fan d'Arrêt sur Images, je n'ai pas raté la chronique de Daniel Schneidermann annonçant, heureux comme tout, qu'il avait décidé d'intégrer son flux Twitter à la page d'accueil de son site. L'utilisation du pronom possessif de cette première phrase est importante : on parle bien de son site. Il fait ce qu'il veut chez lui.
Chez moi, cette annonce m'a glacé le sang. Même si je sais très bien que c'est un accro de l'oiseau bleu et qu'il s'en sert pour nous fournir des articles critiques fabuleux, je ne peux m'empêcher d'être déçu.

@SI, comme on dit, est d'une qualité remarquable. J'adore tout y lire pour comprendre comment le monde tourne en décortiquant le traitement des sujets à la télévision, à la radio et sur les réseaux sociaux. Ceci-dit, je ne veux pas voir ces réseaux sociaux. Ils m'exaspèrent, me rendent furieux, me traumatisent. En lire les critiques en bien ou en mal, c'est ce que je viens chercher chez @SI. Les lire brutalement, sans recul : non. Pourquoi ? Parce que je sais très bien que ces sites sont calibrés pour me rentrer dans le crâne, pour me faire perdre mes repères et ma capacité critique : je ne suis pas taillé pour lutter contre leurs effets et c'est pour ça que j'ai décidé de les fuir.

En les fuyant, j'ai d'abord trouvé refuge sur diaspora* mais c'est sur Mastodon que je me sens le mieux. Ça va faire deux ans que je gère mon instance et que j'y traîne très régulièrement. Ce réseau n'est pas taillé pour me rentrer dans le crâne. Là-bas, rien n'est fait pour anesthésier ma fragile pensée critique et mon recul. Les infos circulent librement, les gens débattent, les points de vues se croisent : on y est bien malgré les seulement quelques millions d'utilisateurs à l'échelle de la planète.

Depuis quelques semaines, pourtant, j'ai le sentiment que nous sommes en train de perdre. Nous, les utilisateurs de Mastodon, n'avons pas réussi à clairement expliquer ce que nous y cherchions. Je me permets de dire ça en ayant un œil sur la timeline publique. Qu'est-ce que j'y vois ? Des messages provenant de Twitter.

Une quantité non négligeable de messages calibrés pour Twitter que des utilisateurs de Mastodon peu scrupuleux nous glissent sous les yeux.

Bien sur, ils ne sont pas triés par les algorithmes du géant américain avant de venir se caler sous nos yeux. Ça n'est pas possible. Par contre, ils sont calibrés, taillés, rédigés, construits pour bénéficier de cet algo magique dont seul Twitter a le secret. Et ça, pour moi, c'est non.


Je ne peux pas m'empêcher de vous refourguer cette vidéo de Datagueule. Elle nous rappelle le ciblage efficace des citoyens par le politique à travers des outils numériques. Tout le monde s'en sert, pas que les politiques. Ces derniers veulent simplement vous connaître pour mieux récupérer votre bulletin de vote. C'est le jeu, dirons-nous.
Par contre, avec l'aide des grandes plateformes, ils sont capable de vous retourner le cerveau avec une précision terrifiante. Quand les GAFAM s'amusent à récolter des données, c'est souvent pour les revendre à des statisticiens, qui feront des courbes, dégageront des tendances et refileront tout ça à ceux que ça intéresse : les producteurs de films, de musiques, des publicitaires, les constructeurs automobiles et, vous le devinez : les politiques.

Une discussion avec mon frère m'a fait comprendre que les gens restent persuadés d'avoir le contrôle sur ce qu'ils déballent dans l'Internet. J'ai mis du temps avant de comprendre qu'il ne pouvait tout simplement pas imaginer que Twitter, Facebook, Google et les autres ne peuvent être utilisés sereinement. C'est impossible. Vous ne pouvez pas avoir un usage serein des anciens réseaux sociaux tout comme vous ne pouvez pas voler avec une voiture. Ce n'est pas fait pour. Que vous le vouliez ou non, d'autres personnes que vous ont décidé de leur fonctionnement.

Twitter a permis l'émergence de choses fabuleuses : que ce soit le mouvement Metoo, les violences policières, les révolutions arabes et tous ces autres événements sociétaux passionnants dont les noms m'échappent. Malgré ça, j'ai besoin de calme et d'un traitement de fond comme sont capables de m'offrir les articles d'@SI ou des Jours.
La boite noire Twitter fait émerger des sujets puis les enterre. C'est son fonctionnement. C'est comme ça. Tant pis pour la diffusion de l'analyse de fond. Il faut renouveler l'engagement du twittos alors on met en avant ce qui provoque le plus de réactions sanguines, impulsives.

Il existe des vidéastes qui en jouent très bien, comme le patron de la chaîne Astronogeek. Il utilise des titres provocateurs pour sortir la tête de l'eau de Youtube et ça semble marcher. Il le fait d'une façon intelligente et de nombreux témoignages remercient ses coups de pubs sur le dos de l'algo de Youtube. M'enfin, à l'échelle de Youtube, cette intelligence ne pèse malheureusement pas grand chose.

C'est la masse des gens soumis à ces réseaux qui, je le crois, cassent en partie le fonctionnement de notre société. Ce n'est pas jouer au vieux con que de dire ça : il devient difficile de ne plus trouver d'article de presse en ligne populaire n'affichant pas le contenu d'un tweet ou d'un poste Instagram dans son corps. Ces réseaux deviennent le point de départ de sujet qui vous passeront sous les yeux et alimenteront les discussions autour de la machine à café. On est tous touchés par ces monstres, qu'on y ait un compte ou pas. Ils influencent massivement le débat public à cause de leurs utilisateurs. Ils déforment ce débat. Un sujet qui apparaît à la une de la presse en ligne, provenant d'un tweet, est affuté pour sortir la tête de l'eau de l'océan Twitter. Il est déjà sélectionné de par son respect des règles. C'est trop tard.

Je ne veux pas de ça sur Mastodon. Je veux que vous veniez débattre, échanger, râler mais je ne veux surtout pas du mode du fonctionnant d'un Twitter sous mes yeux. Si vous venez nous rejoindre, gardez ça a l'esprit et ne cherchez pas à devenir celui ou celle qui buzzera avec le bon mot. Devenez un passeur de connaissances, actif, c'est déjà énorme.

Ne vous méprenez pas : Les réseaux neutres comme Mastodon ne sont pas la solution à tous les problèmes qui traversent notre société. Ils sont simplement là pour vous rappeler que vous pouvez vous enfermer tout seul, sans l'aide de personne ni d'algos, comme un grand, dans votre bulle et l'assumer.

Des bisous