Sohoes
Router certaines URL hors VPN avec un script PAC et px
J’utilise une connexion VPN sortante depuis mon pare-feu routeur (pfSense): tous les périphériques qui se connectent dans mon réseau local passent donc par ce VPN de façon indiscriminée (ou presque). Je le fais parce que ça embête un peu les trackers. Ceux qui utilisent la localisation de l’adresse IP m’affichent leur publicité (quand elle n’est pas simplement bloquée) en allemand ou en néerlandais, en fonction du VPN utilisé (il y en a plusieurs). C’est particulièrement utile sur certains sites où le contenu est mélangé à de la publicité, le changement de langue le rend immédiatement visible (je ne parle ni allemand, ni néerlandais).
Observabilité d'un cluster Kubernetes avec OpenTelemetry
Surveiller de nombreuses applications déployées dans Kubernetes peut devenir fastidieux si on ne centralise pas la télémétrie de manière unifiée.
Pour le rendre plus digeste, j’ai divisé cet article en deux parties:
- Partie 1 (cet article): OpenTelemetry Collector pour collecter les logs de tous les containers de manière générique, et de métriques système.
- Partie 2: présentation de OTTL et des stanza operators pour une configuration avancée d’OpenTelemetry Collector qui améliore le parsing des logs.
Si une introduction à OpenTelemetry est nécessaire, je suggère cette entrée en matière.
OpenTelemetry Collector: OTTL et stanza operators à la rescousse d'un parsing imparfait
Cet article est la suite directe du précédent: Observabilité d’un cluster Kubernetes avec OpenTelemetry que j’ai séparé en deux pour le rendre plus digeste.
Les sujets traités (stanza et OTTL) sont indépendants du premier article, mais leur intérêt est directement lié à l’imperfection du parsing effectué par le File Log Receiver présenté en Partie 1 comme solution générique pour parser les logs de tous les containers du cluster Kubernetes. Dans un monde idéal, l’application source supporte nativement OpenTelemetry (il y a plein de manières différentes de rendre cela possible mais toutes supposent une intervention des développeurs de l’application). Actuellement, OpenTelemetry n’est pas encore suffisamment répandu au niveau des applications et c’est là que la flexibilité du collecteur peut élégamment compenser le manque d’intégration d’OpenTelemetry dans l’application source.
Backup de volumes dans Kubernetes avec K8up
K8up est un Kubernetes Operator (c’est-à-dire qu’il ajoute des CRDs ) conçu pour faire des backups de volumes dans Kubernetes vers une API S3, et leur restauration dans le sens inverse. L’outil est donc utile pour automatiser les backups, mais s’avère également très pratique pour certaines opérations telles que déplacer une application qu’on aurait déployé dans un namespace (comme celui par défaut « default » de Kubernetes), et qu’on voudrait mettre dans autre namespace (en fait on ne déplace pas, on crée des ressources, on copie des données, puis on supprime les anciennes ressources).
Prometheus Alertmanager à partir de notifications par email (partie 2)
Dans un précédent article, j’abordais l’utilisation de l’API d’Alertmanager pour convertir une notification par email en alerte (pouvant aussi être notifiée par email). Cet article est à la fois un retour d’expérience et la suite du premier article, avec une nouvelle amélioration de LocalSmtpRelay.
La gestion d’alertes via l’API d’Alertmanager s’est montrée efficace
partiellement. Une alerte a deux états: « Firing » et « Resolved ». Si de
nombreux emails sont routés vers le même état d’alerte (par exemple « Firing »,
« Firing », « Firing », etc.), Alertmanager remplit son rôle de throttling en
réduisant le nombre de notifications par email issues de cette alerte (et en
répétant périodiquement l’alerte tant qu’elle n’est pas résolue). C’est contrôlé
via ses paramètres
group_by, group_wait, group_for, group_interval, repeat_interval.
En revanche, en cas de « flapping », c’est-à-dire si la source envoie des
alertes qui changent d’état de manière rapide et répétée (par exemple « Firing
», « Resolved », « Firing », « Resolved », etc.), dans ce cas le « flapping
detection »
n’est pas prévu pour être géré par Alertmanager mais par Prometheus
(ce que je trouve contre-intuitif). En effet, ce serait le paramètre
keep_firing_for
de Prometheus (et non d’Alertmanager malheureusement) qu’il faudrait utiliser,
pour lui indiquer de considérer un temps de latence avant de résoudre une
alerte, même si la condition de l’alerte n’est plus remplie temporairement.
Modifier une URL avec un middleware Traefik
J’héberge sur mon réseau le projet Redlib. Celui-ci est un remplacement du frontend de Reddit afin de rendre le site davantage utilisable quand on ne souhaite pas créer un compte sur cette plateforme.
L’idée principale du projet est qu’on peut s’abonner à des contenus sans avoir besoin d’être connecté. On peut ainsi tout explorer depuis RedLib. On peut aussi rechercher directement une page à partir de l’URL officielle dans l’UI de Redlib.
Exposer un service TCP via Traefik dans K3S avec IngressRouteTCP
Après 2 mois d’utilisation, je peux dire que la synchronisation avec gmail fonctionne de manière très efficace. Pour me connecter au serveur IMAP dovecot (avec le client Thunderbird), j’estimais ne pas avoir besoin d’exposer le service lorsque je ne l’utilisais pas, et qu’une redirection de port ponctuelle me suffisait. En pratique, je vérifie de temps en temps cette boîte gmail à partir de mon serveur local (puisque la boîte gmail est vidée après chaque synchronisation), et devoir ouvrir la redirection de port est finalement déplaisante (même si ce n’est qu’à un clic de bouton dans l’outil Kube Forwarder).
Copier et vider une boîte gmail avec imapsync et dovecot dans Kubernetes
En 2020, j’ai choisi de ne plus gérer mes e-mails via Gmail et j’ai redirigé mon ancienne adresse vers une nouvelle (avec les filtres de Gmail, pour éviter de rediriger tout le spam).
Entre temps, j’ai aussi atteint la limite fatidique des 15 Go au delà de laquelle il faut souscrire un abonnement pour une extension d’espace ou faire le ménage parmi les tous les emails accumulés (ce qui me semble être à la limite de l’impossible quand on tient à sa santé mentale, même si ces 15 Go incluent les autres services de Google).
Générer automatiquement des certificats TLS avec Traefik dans K3S en intranet
Jusqu’à maintenant je générais manuellement mes certificats TLS via Let’s Encrypt avec certbot. Et je configurais ces certificats via un reverse proxy nginx au sein de mon réseau local. Comme un certificat Let’s Encrypt expire au bout de 3 mois, il faut gérer le renouvellement manuellement un peu avant 3 mois, ce que j’ai fini par trouver fastidieux.
Prometheus Alertmanager à partir de notifications par email
Alertmanager est principalement conçu pour être déclenché par Prometheus. On peut également déclencher (et résorber) des alertes à partir d’un client HTTP via l’API.
Cela m’a donné l’idée d’adapter LocalSmtpRelay, un petit programme que j’ai réalisé il y a 3 ans, par lequel passent toutes les notifications par email de mon réseau local. Ces notifications viennent typiquement de mon NAS ou de mon pare-feu pfSense par exemple, et plus généralement de n’importe quel service déployé qui émet des emails (tel qu’Alertmanager lui-même). L’idée est de rediriger certaines notifications email vers l’API d’Alertmanager, et ainsi de bénéficier de sa fonction principale qu’est le throttling des alertes: la même « alerte » peut se déclencher des dizaines de fois, très peu d’emails seront envoyés. Dans la continuité de ce travail, j’ai dû intégrer un petit serveur LLM (basé sur Llma.cpp) afin de déduire une description courte et intelligible à partir du contenu des notifications parfois verbeux et technique.
Vos dashboards Grafana racontent-ils l'histoire que vous croyez ?
Quand je me suis auto formé sur Grafana, afin de créer un dashboard pour mon projet Livebox Exporter pour Prometheus, j’ai lu une phrase qui m’a bien plu: un dashboard doit d’abord raconter une histoire. L’idée première est qu’il ne faut pas tomber dans le piège de vouloir tout afficher. Un peu comme sur un CV!
Il faut donc, pour créer un dashboard utile, être un minimum inspiré pour savoir à quelles questions on souhaite répondre (si possible à peu de questions).
Argo CD, 1Password et... Forgejo
Jusqu’à présent, Argo CD me semblait être une complication inutile dans mon cluster Kubernetes utilisé au sein de mon réseau local. Puis… je n’ai pas changé d’avis, mais j’ai eu un besoin mineur comme bonne excuse pour me former sur le sujet.
Contexte (pourquoi ?)
Je vais être un peu long sur le contexte, mais ça me semble important tellement il y a de situations différentes, et de fonctionnalité possibles, parfois très poussées, dans la mise en oeuvre d’Argo CD. Mon cas d’usage est probablement le plus simple qui soit.
Livebox Exporter pour Prometheus
Ayant récemment changé de fournisseur d’accès internet et (jusqu’à maintenant) heureux nouvel abonné Orange avec une Livebox 5, je me suis lancé dans un petit projet pour monitorer la qualité de mon accès internet avec Prometheus et Grafana.
Pour le contexte, je suis tombé un peu par hasard sur ce projet LiveboxMonitor d’un autre développeur français (cocorico!). Un bel outil fait en Python, qui fonctionne très bien mais c’est un client lourd avec une UI conçue pour être interactive. Grâce à ce projet, j’ai pu voir que l’API de la Livebox était facilement accessible.
Dropbox sur Linux
J’ai eu besoin d’installer Dropbox sur un serveur Rocky Linux pour effectuer périodiquement des copies de sauvegarde de certains répertoires (des backups) avec l’outil Borg.
Bien que Linux ne soit pas le marché cible de Dropbox, ils proposent quand même un support basique composé de deux programmes: un démon, et un script client pour contrôler le démon.
Les choses à savoir
Le support de Dropbox sur Linux est minimal car leur outil est peu configurable.
En particulier, la synchronisation se fait dans le répertoire $home de
l’utilisateur et cela n’est pas modifiable. Dans mon cas, mon ordinateur est un
mini serveur avec un disque SSD pour le système et un disque dur classique pour
les données. Je souhaitais donc que la synchronisation Dropbox se fasse sur la
bonne partition du disque dur.
Outil d'import de fichiers syslog vers une base PostgreSql
N’ayant pas trouvé d’outil, gratuit, pour importer des fichiers syslog dans une base de données, j’ai développé le mien.
Les suites type Elastic sont bien trop riches et gourmandes en ressources pour mes besoins.
Pour quel usage ?
Mon réseau local est constitué de quelques équipements qui génèrent classiquement des messages syslog. Ces équipements sont principalement un pare-feu (pfSense), un NAS de marque QNAP, un switch managé. Les fichiers syslog sont stockés sur le NAS.
Installer un registre privé d'images docker (registry)
Cet article décrit comment mettre en place un docker registry local, exposé en HTTPS avec un certificat TLS officiel grâce à Let’s Encrypt, permettant de déployer des conteneurs à partir d’images hébergées sur son réseau local.
J’ai un NAS (QNAP) sur lequel tourne un mini cluster Kubernetes (K3s) qui héberge des applications internes qui tournent en permanence sur mon réseau local. J’ai aussi un ordinateur de travail sur lequel j’effectue ponctuellement des tests avec un autre cluster Kubernetes plus standard, qui me sert pour de la formation et de la veille. Ce cluster n’est pas allumé en permanence. Et il est possible que ponctuellement je veuille utiliser Docker depuis d’autres mini-pc (voire sur un Raspberry).