Blog de dada

DevOps, bidouilleur et routard plein de logiciels libres

Archives 2018

Google, le web et le Reste

Rédigé par dada / 08 août 2018 / 11 commentaires


C'est étonnant. Parfaitement étonnant. Un nombre non négligeable de geeks libristes se servent encore et toujours de Google Chrome/Chromium. Une frange énorme de la population se sert de Google Mail. Et que dire de Google Search ? Pas grand chose. Android ? Bah.

Dans un billet intitulé "Il était une fois le web : la guerre" datant d'il y a un peu plus de 2 ans, je vous partageais une vidéo d'un gars expliquant calmement la direction dans laquelle le web se dirigeait. Il a le regard d'un bonhomme de son temps, un geek de 2016, et tout au long de sa conférence, il nous parle de Chrome comme du nouveau IE 6. Ça parait difficilement croyable quand on a vécu cette période. Les moins de 30 ans ne doivent pas être capable d'imaginer ce que c'est. Et pourtant. Allez donc voir cette conférence.

Aujourd'hui, en 2018, les statistiques de mon blog me traumatisent. Google est partout en majorité. J'ai la chance de drainer des visiteurs plus alertes que les autres : Firefox est loin, mais bien moins loin que chez les autres. Ce que je comprends ? Que personne ne s'intéresse à la diversité, à l'égalité, à l'équité. Google : ça marche, c'est efficace et c'est compatible avec tout ce qu'on peut voir.

Je lisais un article : Google a-t-il ralenti YouTube sur les navigateurs rivaux de Chrome ? On va me dire que c'est normal, que le nom complet de Youtube, c'est Google, et que rien n'empêche le propriétaire d'une plateforme d'en faire ce que bon lui semble. Pourtant, en 2018, pour profiter de Youtube, pour pouvoir nous en servir avec les mêmes droits que les utilisateurs de Google Chrome, nous devons installer une extension.

Imaginez, une seconde, qu'on vous dise que vous ne pouvez pas accéder à l'autoroute parce que votre voiture n'est pas du bon constructeur. On vous balance sur une départementale pendant que les voitures Google, autonomes ou pas, continuent tranquillement leur chemin. La seule solution qui s'offre à vous pour enfin profiter des 130km/h, c'est de passer par un garage pour modifier votre bagnole. Ça vous énerverait. La situation actuelle du web devrait vous énerver, vous faire peur.

Je vous invite à visionner la conférence de XavCC à Pas Sage en Seine de cette année :


Au delà de l'influence de Google sur le web, il y a l'influence de Google sur le loyer de votre appartement, sur l'emploi, sur le type de société, sur l'éducation et j'en passe.

Si vous ne savez pas vraiment pourquoi vous être en train de me lire à l'aide de Google Chrome, allez télécharger Mozilla Firefox.
Si vous connaissez des gens qui ne savent pas pourquoi ils utilisent Google Chrome, sortez vôtre bleu de travail pour aller leur installer Mozilla Firefox.

Redevenez des acteurs du web et plus seulement des utilisateurs.

L'alerting avec Prometheus

Rédigé par dada / 02 août 2018 / 4 commentaires


Depuis le temps que je devais l'écrire, ce billet, le voici : comment mettre en place un système d'alerting avec Prometheus !

Pour celles et ceux qui ne sont pas familiers avec ce vocabulaire : l'alerting est une notion d'administrateur système qui consiste à prévenir les équipes en charge du bon fonctionnement d'un service qu'il est en train de se casser la figure. Ou qu'il s'est déjà vautré.

En avant-propos, je vous invite à aller faire un tour du côté de mes différents billets sur Prometheus.

L'alerting, c'est une brique en plus

Prometheus est une bête idiote, les exporters sont des bêtes idiotes, Grafana est une bête idiote, l'alerting est lui aussi une bête idiote. Pour le faire fonctionner, à la manière d'un exporter, il vous faut installer l'Alertmanager.

L'installation de l'Alertmanager est identique à celle des autres exporter : téléchargez le binaire ou le conteneur Docker, lancez tout ça en lui passant en paramètre son fichier de configuration.

Toujours comme un simple exporter, ou presque, faites comprendre à Prometheus qu'il est là en ajoutant ces quelques lignes dans prometheus.yml, en dessous de la configuration globale :
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - localhost:9093
    scheme: http
    timeout: 10s

N'oubliez pas de reload la configuration de Prometheus :

curl -X POST http://localhost:9090/-/reload

Configurer la détection des problèmes

Les alertes se présentent sous forme de fichiers que vous allez placer dans le répertoire rules/ de Prometheus :
root@server /etc/prometheus/rules # ls
memory  up
Il va ensuite falloir les déclarer dans Prometheus :
# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
  - '/etc/prometheus/rules/up'
  - '/etc/prometheus/rules/memory'
Pour faire simple et rapide, voici des exemples d'alertes qui pourraient vous servir :

- Service disponible
ALERT InstanceDown
  IF up == 0
  FOR 1m
  LABELS { severity = "page" }
  ANNOTATIONS {
    summary = "Instance {{$labels.instance}} is down",
    description = "{{$labels.instance}} of job {{$labels.job}} has been down for more than 1 minutes"
  }
- L'utilisation de la RAM
ALERT MemoryUsage
  IF ((node_memory_MemTotal-node_memory_MemFree-node_memory_Cached)/(node_memory_MemTotal)*100) > 95
  FOR 10m
  LABELS { severity = "warning" }
  ANNOTATIONS {
    summary = "Instance {{$labels.instance}} is in danger",
    description = "RAM of {{$labels.instance}} has been too used for more than 10 minutes"
  }
Avant de vous lancez dans le copier/coller du code exposé ci-dessus, prenez le temps de lire les quelques lignes suivantes :

- ALERT : il s'agit d'un nom arbitraire que vous donnez à votre alerte
- IF : c'est la condition qu'il faut respecter pour déclencher l'alerte
- FOR : la durée pendant laquelle le IF doit être valide
- LABEL : ça permet de donner un poids à votre alerte (osef, warning, critical, etc)
- ANNOTATIONS : ce que vous voulez afficher quand l'alerte est déclenchée

Normalement, à ce niveau là, vous avez un Alertemanager capable de détecter si vous avez des soucis de RAM ou si vos serveurs/services sont fonctionnels ou HS. C'est bien beau, mais ça ne vous réveillera pas en cas de pépin.

Un rapide tour sur l'interface web de Prometheus devrait vous le confirmer. En exemple, voici la liste des alertes que j'utilise :

Configurer l'envoi d'emails d'alerte

Le fichier de configuration que vous passerez en paramètre au lancement de l'Alertmanager doit lui dire que faire quand une alerte est détectée. Il est possible de lui dire de vous envoyez un message sur Telegram, Mattermost, ou, simplement, de vous envoyer un mail. C'est la solution la plus simple, alors allons-y.

Les possibilités étant énormes, je ne vais vous proposer qu'un exemple de configuration simple :
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: 'alertmanager@mon.email'

route:
  receiver: 'team-mails'
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h

receivers:
- name: 'team-mails'
  email_configs:
  - to: 'ladestination@email.mail'
Avec cette configuration, vous allez recevoir un mail en cas de souci. Sans intervention de votre part, le mail sera renvoyé au bout de 3h.

Cette conf est très simple. Je n'explique pas tout. Juste, elle marche. Si vous souhaitez en savoir plus, comme l'organisation de groupes qui recevront des alertes spécifiques ou la gestion des "warning" ou des "critical", je vous encourage à prendre un peu de temps pour lire l'exemple assez complet qu'on peut trouver par ici.

Et voilà ! Je suis loin d'avoir fait le tour des possibilités de Prometheus mais les différents billets que vous trouverez sur ce blog devraient vous permettre de mettre les doigts dedans et de vous en sortir.

Des bisous !

On va tous mourir

Rédigé par dada / 29 juillet 2018 / 23 commentaires


Oui, c'est du Cyrille BORNE. Complètement, même.

Je lisais son article autour de la vie des blogueurs libristes et des sites francophones traitants de Linux et du Libre. Il revient sur la difficulté de trouver des nouveaux acteurs dans la francophonie libriste. Les anciens blogueurs disparaissent, les nouveaux n'émergent pas vraiment et plus personne n'aborde les sujets simples comme l'arrivée de la dernière version de bidule ou la mise à jour de machin. Bref, on va tous mourir.

L'anglais

L'anglais est devenu un problème : les nouveaux francophones qui débarquent dans la jungle d'Internet et qui décident de prendre leur courage à deux mains pour y pondre des billets ne le font plus en français. C'est l'anglais qu'ils utilisent. On a perdu le combat de la langue. Écrire en français n'intéresse plus grand monde. C'est triste mais ça se confirme assez facilement. J'ai en tête la venue du jeune Angristan dans la blogosphère et dont le dernier billet en français date de février alors que le dernier billet en anglais date de ce chaud mois de juillet. C'est un exemple, mais ça illustre l'idée que j'ai des nouveaux arrivants : pas de français, c'est lu par trop peu de monde, place à l'anglais.
Est-ce que c'est un mal ? J'en sais rien. Je sais que ça m'attriste terriblement. Personnellement, je me force toujours à tout écrire en français par simple esprit de provocation. Ma série d'articles sur Prometheus n'a aucun intérêt pour celles et ceux qui maîtrisent la langue de Shakespeare. Même si je vulgarise à mort, rien de ce que j'écris n'est difficilement trouvable sur des sites anglophones.
J'ajoute qu'il ne faut pas oublier qu'on vit dans ce que certains appellent maintenant une Startup Nation. Alors, doucement, ce vocabulaire et cette déclaration sont très récents, mais ces idées se sont imposées par des années de mode à 2€ : on va speaker l'anglich plutôt que le français. La force de frappe culturelle de la Silicon Valley a fait mal, très mal.

L'admin et l'élitisme

L’activité de la blogosphère francophone est effectivement marquée par l'administration système. La faute à quoi ? J'en sais rien. Les blablateurs dont je fais partie sont issus d'une génération formée à l'administration ? Le français est-il plus intéressé par la mise en place de briques logiciels que par l'analyse de la position d'un bouton ou du choix du dernier thème pour Ubuntu ? Aucune idée. Ce que je remarque, c'est que l'activité autour de l'ActvityPub prend vraiment chez nous, mais là encore, les gens en parlent en anglais.
Bon, la presse classique et grand public en parle dans notre bonne vieille langue : Le Monde, 20Minutes, etc. Mais là, on sort de l'ambiance blog.

L'élitisme ? Je me souviens avoir lu des articles autour de cette théorie qu'on appelle "La peur du professeur". Je ne retrouve plus mes sources, tant pis pour moi mais je vais tout de même en parler. En France, l'erreur est vue comme un danger dès le plus jeune âge. Les enfants sont rabroués quand ils se trompent. Durement. À la longue, on se retrouve avec des jeunes adultes qui n'osent plus prendre une plume ou lever la main pour dire ce qu'ils ont à dire : la peur de se faire éclater est vive, bloquante. Ce n'est pas la raison ultime qui explique l'absence de nouveaux venus, mais ça doit fortement jouer. Tout blogueur s'est pris des volées de bois verts. Faut s'accrocher pour continuer et assumer. Il faut croire que nos amis anglo-saxons n'ont pas ce problème, ou dans une proportion moindre. Le français est autant attaché à la forme qu'au fond. Les anglo-saxons tolèrent peut-être mieux une forme maladroite quand le fond est bon. Qui sait ?

Les réseaux sociaux

Grand débat que l'usage des réseaux sociaux. Je sais que je suis un gros consommateur de Mastodon. Je n'ai jamais accroché à Twitter, mais Mastodon : oui. Pourquoi ? L’administration : j'ai monté mon instance, du coup, je m'en sers.
Les autres, je les vois de temps en temps passer dans mes statistiques. La dernière fois, c'était de la faute de Korben. Il a partagé un de mes billets sur ses machins et je me suis retrouvé avec des visiteurs venant de Facebook. Ils sont arrivés comme ils sont partis, sans trop penser à demain (Miossec). Un coup d’œil à mes graphiques sur mon Matomo (anciennement Piwik) me laisse de marbre : même pas un petit pic alors qu'ils ont débarqués par centaines. Qu'en conclure ? Les gens restent dans leurs Timelines et n'en sortent pas, ou peu. C'est un problème si on se met à considérer qu'un utilisateur de Facebook ou de Twitter est un gars ou une nana issu du libre, mais non. Les gens vont et viennent quand un titre est assez vague ou provocateur pour les attirer. Il n'y a que le Journal du Hacker pour vraiment drainer du monde. Là, ça vient pour de vrai. On ne peut pas voir les réseaux sociaux comme quelque chose de bon ou de mauvais. On ne peut que simplement dire qu'ils sont cloisonnants et peu enclin à créer du lecteur. On lit ce qu'on voit passer sur Facebook et Twitter dans Facebook et Twitter. On n'en sort que par accident.
Avec le protocole ActivityPub et toutes les interactions qui sont en train de se mettre en place, je pense qu'on va pouvoir dire qu'une partie du problème est en phase d'être résolu. Dans mon billet sur la Fédiverse, j'ose dire que ce langage commun va permettre des passerelles entre plusieurs mondes : les amateurs de photos vont passer par Pixelfed pour échouer sur Mastodon et y découvrir des instances Peertubes. J'en suis persuadé. Là où ça coince, c'est, comme toujours, le contenu. J'en parlais ici. Il faut que nous mettions tout ça en branle. Ça ne tient qu'à nous, vraiment. Est-ce qu'on va rameuter la Terre entière sur Mastodon ? Je ne l'espère pas, y'a bien trop de choses dont je me fous royalement, mais on peut espérer un peu plus de diversité quand même. Qu'on se le dise, il y en a, de la diversité, sur Mastodon : du dessinateur à la cosplayeuse en passant par l'administrateur ou le fan de moto, on en trouve. La norme reste tout de même l'utilisateur de Linux, le libriste.

Avenir

Ma boule de cristal me laisse entrevoir une chose : l'ActivityPub. Ce machin peut être à l'origine d'une synergie de dingue. Ce que je veux dire, c'est que nous devons être à l'origine d'une mode, une nouvelle mode, qui sera à l'origine d'un renouveau. J'en rêve. On a déjà le microblogging avec Mastodon, la musique avec Funkwhale, les photos avec Pixelfed et bientôt Reddit avec Prismo, les simples blogs avec Plume. On a vraiment de quoi remuer la torpeur dans laquelle la blogosphère francophone s'est installée.

Enfin voilà, j'ai éclaté mon record de mots. C'est du gros blablatage. Je vais m'arrêter là. Au plaisir de vous lire depuis Mastodon.

Classé dans : Édito / Mots clés : aucun

Un Exporter Prometheus pour Mastodon

Rédigé par dada / 27 juillet 2018 / Aucun commentaire


English ? Run to my Gitlab. Comments are in english.


Mon dernier billet ne laissait pas trop de doute sur mes activités du moment : du python, Prometheus et l'API de Mastodon sont bien les signes avant-coureurs de l'arrivée d'un Exporter ! Dans cette liste, j'ai pris le temps d'ajouter un peu de Grafana et du Docker, histoire de bien faire les choses, avant de vous ouvrir l'accès à mon dépôt Git.

Le poids des mots, le choc des photos

Pour reprendre le slogan de Paris-Match, voici une capture d'écran de la bête dans Grafana :

Ce que vous voyez ci-dessus est un exemple de dashboard Grafana. Un exemple. Vous pouvez faire bien mieux, j'en suis certain, et le partager.

Ce que l'Exporter permet de récupérer

  • Les comptes actifs
  • Le nombre d'instances connues
  • Le nombre total de comptes sur l'instance
  • Le nombre total de toots
  • Le nombre d'inscriptions pour la semaine courante
  • Le nombre de toots par semaine
Alors, oui, ce n'est pas grand chose, mais ça nous permet de récupérer des statistiques publiques et d'en faire des beaux graphiques avec la stack la plus chouette du moment ! J'ai enfin viré Munin :-)

Utilisation sans Docker

Clonez les sources où bon vous semble :
git clone http://git.dadall.info/prometheus/mastodon.git
Installez les dépendances :
pip3 install -r requirements.txt
Lancez la bête en ayant bien défini l'URL de votre instance dans les sources :
python3 instance_exporter.py

Utilisation avec Docker

Il va vous falloir créer l'image Docker :
docker build -t mastodon-exporter .
Et vous pourrez lancer un conteneur en ajoutant l'URL de votre instance en paramètre :
docker run -d -e MASTODON_HOST="https://instance.url/" -p 9410:9410 mastodon-exporter
Vous trouverez un exemple de dashbord pour Grafana, histoire de tout mettre en couleur, dans le dépôt.

Vous pouvez maintenant suivre l'activité de votre instance : foncez mettre ça en place avant le prochain afflux d'utilisateurs pour voir les courbes réagir : les données qui transitent sur Mastodon sont tellement nombreuses qu'il faut vraiment qu'il y ait une vague de nouveaux pour faire visiblement bouger les lignes !

Voilà

Si vous avez des retours, n'hésitez pas à passer par les commentaires ou Mastodon, à lâcher des pouces bleus et partager la vidéo.

Des bisous,

Comment prendre un peu de Python pour faire un Exporter Prometheus

Rédigé par dada / 20 juillet 2018 / 4 commentaires



Faire un Exporter Prometheus, c'était un défi qui traînait dans ma longue-liste-des-choses-à-faire depuis longtemps. J'ai enfin mis les mains dedans. C'est moins terrifiant qu'on le croit, à condition de vouloir faire des choses simples. Voici donc quelques lignes pour vous expliquer comment s'en sortir.

Du Python 3

Il est possible de faire des Exporters dans un nombre dingue de langages. Pour des questions de curiosité et d'envie, j'ai choisi de le faire en Python, version 3. En plus, Prometheus fournit une bibliothèque qui va bien.

Une API

Un Exporter est capable d'interroger, entre autre, des API. Pour l'exemple et parce ce que j'avais envie de mieux connaître mon instance Mastodon, c'est l'API de l'alternative à Twitter que vous allez croiser ci-dessous.

La logique globale

Un Exporter, pour faire très simple, c'est un bout de code coincé dans une boucle infinie.
Oui, très simple.
Il va récupérer de l'information et la transmettre à Prometheus, puis récupérer de l'information et la transmettre à Prometheus, puis récupérer de l'information...

Exemple

Ici, on va pondre un bout de code qui va aller récupérer le nombre de comptes que je follow sur Mastodon :
r = requests.get("https://diaspodon.fr/api/v1/accounts/1")
data = json.loads(r.content.decode())
metric = Metric('following_count', 'Number of following account', 'gauge')
metric.add_sample('following_count', value=data["following_count"], labels={})
yield metric
Ce qu'il faut comprendre :
- La variable r contient le retour de l'appel à l'API Mastodon.
- La variable data contient en utilisable le JSON contenu dans r.
- La variable metric contient les données exploitables par Prometheus.

C'est la ligne qui est vraiment cruciale :
metric.add_sample('following_count', value=data["following_count"], labels={})
Les choses importantes :

- following_count sera le nom que vous pourrez retrouver dans Prometheus pour afficher la donnée
- value sera la valeur retournée quand vous appelez following_count

Lancer la boucle infinie

On va coincer ce bout de code dans une boucle :
class JsonCollector(object):
    def __init__(self):
        pass

    def collect(self):

        url = mastodon_host + 'api/v1/accounts/1'
        r = requests.get(url)
        data = json.loads(r.content.decode())
        metric = Metric('following_count', 'Number of following account', 'gauge')
        metric.add_sample('following_count', value=data["following_count"], labels={})
        yield metric

if __name__ == "__main__":
    start_http_server(9400)
    REGISTRY.register(JsonCollector())
    while True: time.sleep(1)
Et c'est tout quant à la création d'un Exporter ! Retrouvez le lien vers le code complet en fin de ce billet. Ou . Pour plus de visibilité, j'ai volontairement caché les modules à inclure.

Comment valider que ça fonctionne ?

Un curl et tout va :
root@server ~ # curl localhost:9400
# HELP following_count Number of following account
# TYPE following_count gauge
following_count 552.0

Brancher l'exporter à Prometheus

Tout va se faire, comme d'habitude, dans le prometheus.yml.

  - job_name: 'mastodon'
    static_configs:
      - targets: ['localhost:9400']
On ajoute le job, la target avec son port et on reload la bête.

Notez que j'ai utilisé le port 9400 dans mon exemple. C'est un choix personnel : vous pouvez le changer s'il est déjà utilisé par un de vos services.

Enfin, si tout s'est bien passé, vous devriez pouvoir appeler la variable following_count dans Prometheus !


Vous trouverez un snippet avec l'intégralité du code par ici.

Je retourne à mon code. Vous vous doutez bien qu'avez tout ça, il y a moyen de faire un bel Exporter complet pour Mastodon !

Des bisous,