Un important rappel que, quand bien même les interfaces disponibles dans nos navigateurs sont standardisées, leur implémentation ne l'est pas et dépend souvent de services privés dont l'éthique peut ne pas être ce que l'on imagine (la géolocalisation dans Chrome, par exemple).
Si l'article est trop long pour vous, lisez au moins la section Why This Matters.
Un important rappel que, quand bien même les interfaces disponibles dans nos navigateurs sont standardisées, leur implémentation ne l'est pas et dépend souvent de services privés dont l'éthique peut ne pas être ce que l'on imagine (la géolocalisation dans Chrome, par exemple).
Si l'article est trop long pour vous, lisez au moins la section Why This Matters.
Si vous développez un logiciel open source auto-hébergé, vous connaissez sûrement ce dilemme qui est de comment savoir si votre projet est réellement utilisé sans devenir l'affreux Big Brother que vous combattez ? Soit vous ne mesurez rien et vous codez dans le vide, soit vous collez du Google Analytics ou assimilé et vous trahissez l'esprit même du self-hosting.
Benjamin Touchard (que certains d'entre vous connaissent peut-être via son projet
Ackify
) a décidé de résoudre ce problème avec SHM, pour Self-Hosted Metrics. Son idée c'est de proposer une télémétrie respectueuse de la vie privée, où chaque instance génère sa propre identité cryptographique dès le premier démarrage.
Concrètement, quand vous intégrez le SDK dans votre application (dispo en Go et Node.js 22+), chaque installation génère une paire de clés Ed25519, un peu comme quand vous générez vos clés SSH pour la première fois. Tous les échanges avec votre serveur SHM sont ensuite signés cryptographiquement, ce qui garantit l'intégrité des requêtes et leur origine. L'instance a une identité persistante (pseudonyme), mais ça n'identifie pas l'utilisateur final.
Côté données collectées, ensuite c'est vous qui décidez. Votre app envoie périodiquement un JSON avec les métriques que vous avez définies, et le dashboard s'adapte dynamiquement. Y'a pas de schéma imposé, pas de PII (données personnellement identifiables) et par défaut, le SDK collecte aussi des infos système (OS, CPU, RAM), mais c'est désactivable.
Pour ceux qui veulent héberger le bouzin, c'est du Docker classique... Vous créez un fichier compose.yml, vous configurez le DSN PostgreSQL, vous récupérez les migrations SQL, et hop un docker compose up -d. Le dashboard est alors accessible par défaut sur le port 8080 et affiche automatiquement vos métriques métier, la distribution des versions, le nombre d'instances actives, etc.
Et pour les utilisateurs finaux qui ne veulent vraiment pas participer, un simple DO_NOT_TRACK=true dans les variables d'environnement désactive complètement la télémétrie.
Le code du serveur est sous licence AGPL
(les SDKs ont leur propre licence, vérifiez sur le dépôt) et y'a aussi des badges SVG à coller dans vos pages README pour afficher fièrement le nombre d'instances de votre app qui tournent.
Bref, si vous distribuez un logiciel auto-hébergé et que vous voulez savoir combien d'instances sont actives sans compromettre la vie privée des utilisateurs, c'est le top !
La philosophie de CoMaps en matière de respect de la vie privée, qui est notamment le domaine dans lequel elle s'éloigne du projet dont elle est issue : Organic Maps.
La philosophie de CoMaps en matière de respect de la vie privée, qui est notamment le domaine dans lequel elle s'éloigne du projet dont elle est issue : Organic Maps.
Bon, si vous êtes dev ou admin sys, vous connaissez forcément ce moment de solitude. Celui où VS Code se fige pendant 3 minutes parce que vous avez eu l'audace d'ouvrir un fichier de logs de 2 Go. Ou pire, Notepad qui vous affiche un joli message d'erreur en guise de bienvenue.
Bref, la galère classique du lundi matin.
Heureusement, je viens de tomber sur
Log Voyager
, un outil open source qui analyse des fichiers de logs massifs... directement dans votre navigateur Chrome ou Firefox sans faire exploser votre RAM.
Log Voyager en action - navigation fluide dans un fichier de logs massif (
Source
)
Son secret ?
Toniglandil bien sûr ! Non, je plaisante ! En fait ce truc utilise la File Slicing API pour lire vos fichiers par petits bouts de 50 Ko. C'est comme du streaming, sauf que c'est pour vos logs. Du coup, que votre fichier fasse 500 Mo ou 10 Go, seul le chunk visible est chargé en RAM. C'est chouette non ?
D'ailleurs, par conception ("by design" comme disent les titi consultants), toute l'analyse se fait côté client dans votre navigateur. Vous pouvez vérifier dans le code source sur GitHub : aucune requête réseau pour vos fichiers. Du coup, ça fonctionne même hors connexion et pour ceux qui bossent avec des logs contenant des données sensibles (genre des infos clients ou des tokens), c'est plutôt rassurant.
Côté fonctionnalités, y'a aussi de quoi faire. Le scroll infini permet de naviguer dans des fichiers énormes sans que le navigateur ne bronche. Il y a un système de filtrage par regex pour trouver exactement ce que vous cherchez, un prettifier JSON intégré qui formate automatiquement les lignes JSON dans vos logs (super pratique quand vous avez du JSON imbriqué partout), et un système de bookmarks avec position en octets pour retrouver facilement un endroit précis dans le fichier.
Pour l'installer, soit vous passez par Docker. Notez que j'ai du nettoyer un peu le Dockerfile car y'a des choses mal comitée dedans... Breeeef...
git clone https://github.com/hsr88/log-voyager.git
cd log-voyager
docker build -t log-voyager .
docker run -d -p 8080:80 log-voyager
Et hop, vous accédez à http://localhost:8080. Sinon, pour bidouiller en local avec npm :
git clone https://github.com/hsr88/log-voyager.git
cd log-voyager
npm install && npm run dev
L'outil est développé en React et TypeScript par hsr88, avec Vite et Tailwind CSS pour le front et c'est gratuit et open source, comme il se doit !
Perso, ça m'aurait évité pas mal de galères sur certains projets où les logs de prod faisaient plusieurs Go. Mais maintenant vous savez que ça existe et au lieu de faire du grep dans le terminal en croisant les doigts, là vous avez une vraie interface pour explorer tout ça proprement.