Blog de dada

DevOps, bidouilleur et routard plein de logiciels libres

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,

Et si on parlait Fédiverse ?

Rédigé par dada / 14 juillet 2018 / 11 commentaires


De mon point de vue, ces derniers mois est apparue une dynamique incroyable dans le monde libriste. Le point de départ de cette dynamique ? Mastodon, le Twitter dont on peut se servir les yeux fermés. Le détail qui fait que ça tient dans la durée ? La langue utilisée : ActivityPub.

Au départ, nous n'avions que Mastodon, rejoint ensuite par Peertube, puis PixelfFed, puis Plume et enfin Prismo. Ces noms ne vous disent rien ? C'est normal, tout est encore en cours de développement et seuls les courageux font tourner ces applications. Patience.

Pourquoi je trouve que c'est une dynamique incroyable ? Quand Facebook parle le Facebook et Twitter le Twitter, les applications dont je vous parle se sont mises d'accord pour parler l'ActivityPub. Elles ont ceci de génial qu'elles parlent le même langage.

Une vidéo vous plaît ? Remerciez son créateur depuis votre Mastodon. Le résultat ?

Sur Framatube :


Sur Mindpalace :


Ce qu'il faut comprendre ?

- Les deux captures d'écran proviennent de deux instances Peertube différentes (Framatube / Mindepalace)
- Les commentaires proviennent de 3 instances Mastodon différentes ( Framapiaf / Mamot / Diaspodon )
- Ces commentaires sont visibles sur ces 5 bouts d'internet différents !

Et ça, c'est tout simplement incroyable. Le pire, c'est qu'il s'agit d'un exemple limité. Seulement 5 bouts d'Internet entrent en jeu. Seulement.

D'ici quelques jours, Pixelfed sortira de son autarcie pour rejoindre la Fédiverse. Même s'il est actuellement possible de s'en servir (depuis mon instance, par exemple, ou celle de Valère), l'application n'est pas bavarde sur la Fédiverse.
Lorsqu'un de vos amis postera une photo sur cet Instagram honnête, vous en serez averti sur Mastodon et vous pourrez interagir avec, toujours parce que ces deux choses parlent l'ActivityPub.

Que dire de Plume ? Ce moteur de blog vous permettra de partagez vos écrits sur la Fédiverse, de citer directement des gens dans vos billets et de laisser les gens publier des commentaires depuis Mastodon. Le tout en toute transparence.

Prismo devrait aussi entrer dans ce grand capharnaüm : un Reddit dans la Fédiverse ! Vous voulez partager mon article (parce qu'il est franchement génial, n'est-ce pas ?) sur Prismo, les utilisateurs de Mastodon seront au courant et pourrons interagir !

Ce qui se profile devant nous est tout simplement génial.

Bloquer les pubs : j'ai installé Pi-Hole derrière une Freebox

Rédigé par dada / 05 juin 2018 / 31 commentaires




Étant coincé pendant encore quelques temps dans la maison familiale, j'ai du trouver des occupations. Première idée : installer un Pi-Hole.

L'idée derrière tout ça ? Trouver une utilité à l'une de mes 3 Raspberry Pi.
L'utilité derrière tout ça ? Mettre en place un système simple permettant aux membres de ma famille, qui passent souvent par cette baraque, de ne plus être emmerdés par les pubs et autres.

Je suis le "toi qui t'y connais en informatique" local. Ça m'ouvre des droits et des devoirs. Avec des géniteurs frôlant les 70 ans, je me dois de prendre en main certaines choses. J'ai déjà réussi à passer un ordinateur portable sous Debian pour l'une mais l'autre doit continuer à se servir d'un Windows. Ils sont bien au courant des histoires de pubs, de flicages et de contenus sponsorisés, mais bon, autant prendre le temps de mettre en place une petite bête qui va s'occuper de tout ça pour eux. Et je ne parle pas d'une branche qui ne jure que par Apple et dont certaines notions citées juste avant n'allument aucune lanterne.

Installer Pi-Hole

Si vous passez par Raspbian, prenez le temps de flasher sa carte SD avec la version Stretch de l'OS sans quoi vous ne pourrez pas vous servir de l'outil. Une sombre configuration de dnsmask plante la chose si vous n'êtes pas à jour.
Pensez aussi à faire un "apt update" avant de lancer l'installeur : j'avais des soucis avec les dépôts et Pi-Hole, sans rien m'expliquer, refusait de s'installer.

Pas de blabla autour de l'installation. Si vous avez une Raspberry et que vous passez par ce blog, vous devriez réussir à faire un curl et appuyer 6 fois sur la touche entrée.

Ajouter la blacklist manquante

J'ai ajouté une blacklist orientée francophones en plus de celles activées par défaut : Liste_fr + Easylist

Ça ne fait pas de mal.

Configuration de la Freebox

Pour que la Freebox utilise Pi-Hole, il faut aller faire un tour dans l'interface de gestion de la bestiole de Free. La capture d'écran qui va bien :



Voyez l'adresse sur serveur DNS 1 : il s'agit de l'IP de la Rasbperry.

Éviter les emmerdes

Alors, quand on commence à faire ce genre de bêtise, il faut garder à l'esprit qu'une coupure de courant, ça arrive. Que ce passera-t-il si la Raspberry ne redémarre pas ? Plus "d'internet" pour les utilisateurs, le téléphone qui sonne, les "tu es responsable !".

- Configurer la réservation de l'adresse IP de la Raspberry pour ne pas perdre le Pi-Hole

Pour que l'IP de la Rasbperry ne change pas, vous devez impérativement la réserver. Ça se fait dans l'interface de la Freebox, dans la gestion de baux statiques.

- Activer la connexion SSH vers la Raspberry en cas de besoin

Cette configuration ne se fait pas depuis l'interface de la Freebox mais depuis le site Free.fr. Dans la rubrique de configuration du routeur, redirigez l'accès SSH depuis l'extérieur vers l'IP de la Rasbperry Pi et le port SSH que vous utilisez (22 par défaut).

- Préparer un mail avec des captures d'écran en cas de crash du Pi-Hole alors que vous faites le tour de la Jamaïque

Pour ce dernier point, je vous laisse aller à vote imagination pour trouver la solution la plus simple pour expliquer à des proches en colères comment corriger la situation en votre absence. C'est sportif, j'en suis conscient.

Notes étonnantes

  • L'utilisation d'une Raspberry Pi de vieille génération ne ralentie pas la navigation des 10 appareils branchés sur le réseau.
  • Si vous êtes utilisateurs de uBlock, sachez que ce dernier bloque directement depuis le navigateur les requêtes qui devraient être élimées par le Pi-Hole (cf ici).

Et voilà, fin du billet. Vous pouvez vous lancer dans l'aventure si ça vous chante et que vous êtes prêt à prendre des responsabilités dans le digital familiale. Moi, je vais jouer avec Funkwhale maintenant.

Des bisous

Il n'y a pas que le libre

Rédigé par dada / 14 mai 2018 / 18 commentaires


Au delà du libre, et j’exclus de facto l'open source que je conchie, il y a le monde dans lequel il évolue : le nôtre. Un système économique, une société, une République, le concept de Démocratie, etc. Ce monde là, il est impératif de le comprendre si nous voulons défendre les valeurs de notre idéal libriste.

Pourquoi ? Parce qu'il est primordial de s'armer contre l'argumentaire archaïque de celles et ceux qui n'en veulent pas ou qui simplement ne le comprennent pas, voire qui ne l'imaginent pas. Sans arme, le partage, le collectif et nos conditions de vie s’écrouleront dans un marasme égoïste où chacune et chacun ne pense qu'à sa gueule. Et le libre, là-dedans, disparaîtra. Je ne vous cache pas que si le libre en vient à disparaître, ça ne sera pas notre plus gros problème, mais quand même.

Pour s'armer, il n'y a pas 36 000 possibilités : il faut lire, il faut regarder des choses que j'apparente à de la bouffe pour le cerveau. Au diable les émissions relaxantes, la soupe Netflix, les Youtubeurs à la con et le reste. Allez chercher de quoi comprendre.

Du Droit, de la Philosophie, de la Sociologie, de l'Histoire ou encore de l'Économie, du Marketing, du Management : c'est tout cela et bien plus encore dont vous avez besoin pour ne pas vous laisser aller.

Ça vous emmerde déjà ? Dites vous que celui ou celle qui comprend ces choses là vous emmerde déjà bien plus.

Voici une liste de choses et d'autres que je vous conseille de lire ou de regarder :
Il y en a d'autres, c'est certain. Trouvez-les et partagez-les !

Allez donc fermer le clapet de ceux et celles qui vous disent que prendre du temps pour lire et regarder des documentaires, c'est de la merde, que ça ne sert à rien dans la vie. Montrez-leur que c'est important, si vous en avez le courage. Vous, par contre, votre petite personne, faites l'effort d'apprendre et surtout de comprendre.

Perdu ? Vous ne savez pas par où commencer ? Trouvez le sujet du moment qui vous plaît et regardez s'il est traité quelque part. Il l'est sans doute. Vous déroulerez la pelote de laine tout naturellement, comme disent les anciens.

Un dernier détail : pas d'extrémisme, pas de haine. Ne vous enfermez pas dans une idéologie unique : continuez à regarder et à lire ce que les intellectuels à deux balles appellent le « mainsteam ». C'est ce que les gens autour de vous connaissent. Ne vous déconnectez pas de leur vision du monde si vous voulez pouvoir continuer à les comprendre.

Des bisous,

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