👀 OpenObserve : les logs.

👋 Présentation
C'est quoi l'observabilité ?
L'observabilité en informatique, c'est la capacité à comprendre l'état interne d'un système complexe (comme une application ou un serveur) à partir des données qu'il génère. Cela inclut généralement trois types de données :
- Les logs : Enregistrements d'événements qui se passent dans le système.
- Les métriques : Données chiffrées qui mesurent des aspects comme la performance ou l'utilisation des ressources.
- Les traces : Suivi des requêtes ou des transactions à travers les différents composants du système.
L'objectif est de pouvoir détecter, diagnostiquer et résoudre des problèmes rapidement en analysant ces données. Plus un système est observable, plus il est facile de comprendre son comportement et d'intervenir en cas d'anomalie.
Xavki en parle très bien dans ses vidéos : C'est quoi l'OBSERVABILITE ??? logs, tracing et monitoring
OpenObserve est une plateforme d'observabilité open source. Elle peut être utilisée à travers la version cloud de la plateforme ou en l'hébergeant soi-même. Dans cet article, je vais déployer OpenObserve avec Docker, puis envoyer des données vers OpenObserve en utilisant OpenTelemetry. Je déploierai OpenObserve en version autonome (avec SQLite comme stockage des métadonnées et un stockage persistant pour le stockage des données).
Un des avantages très intéressant d'OpenObserve c'est sa faible consommation des ressources notamment de la RAM mais aussi de l'espace disque. Un de ses points faibles est le manque de retour d'usage mais aussi sa documentation que je trouve un peu légère.
🎯 Objectif
Ayant plusieurs reverse-proxy Traefik, je souhaite commencer par quelque chose de basique : récupérer les logs de ces derniers afin de voir les pays d'origine des requêtes.
🧰 Installation
L'installation a été réalisée sur mon serveur à la maison qui n'a pas beaucoup de ressources. J'ai mis en place un conteneur LXC basé sur Debian sur Proxmox VE avec Docker installé dessus.
---
services:
openobserve:
image: public.ecr.aws/zinclabs/openobserve:latest
restart: always
container_name: openobserve
environment:
ZO_ROOT_USER_EMAIL: "VOTRE_EMAIL"
ZO_ROOT_USER_PASSWORD: "VOTRE_MOT_DE_PASSE"
ZO_TCP_PORT: 5514
ZO_UDP_PORT: 5514
# Cette ligne est important si vous souhaitez utiliser l'option geoIP
ZO_MMDB_DISABLE_DOWNLOAD: false
ports:
- protocol: udp
published: 5514
target: 5514
- protocol: tcp
published: 5514
target: 5514
- protocol: tcp
published: 5080
target: 5080
- protocol: tcp
published: 5081
target: 5081
volumes:
- ./data:/data
Une fois le conteneur lancé, il suffit de se rendre sur https://ip_openobserve:5080 puis de se connecter avec les credentials renseignés dans le compose.yaml.

🧾 Envoi des logs avec OpenTelemetry avec Traefik
OpenTelemetry
OpenTelemetry est un ensemble d'outils et de normes open source qui permet de collecter, traiter et exporter des données de télémétrie (comme les logs, les métriques et les traces) provenant d'applications et de systèmes. L'idée est d'avoir une manière uniforme et standardisée de mesurer et de suivre le comportement d'une application ou d'un service à travers différents environnements (cloud, serveurs, etc.).
OpenTelemetry permet de surveiller et de tracer tout ce qui se passe dans ton application pour mieux comprendre son fonctionnement et repérer rapidement les problèmes.
Sur OpenObserve, rendez-vous sur "Sources de données" > "Personnalisé" > "Logs" > "OTEL Collector"

Copiez le token, puis éditez le fichier de configuration de Traefik :
---
api:
dashboard: true
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
file:
directory: /dyn_traefik/
watch: true
entryPoints:
web:
address: ":80"
(...)
accessLog:
filePath: "/var/log/access.log"
format: json
fields:
names:
StartUTC: drop
# Configuration pour envoyer les logs à OpenObserve
otlp:
http:
endpoint: http://IP_OPENOBSERVE:5080/api/default/v1/logs
headers:
Authorization: "Basic VOTRE_TOKEN"
# Le nom du stream qui nous permettra de lire les logs sur OpenObserve
stream-name: traefik_logs
tls:
insecureSkipVerify: true
experimental:
# Activation d'OTEL
otlpLogs: true
Relancez le conteneur Traefik puis rendez-vous sur OpenObserve.
👨🏻💻 Consulter les logs sur OpenObserve
Sur OpenObserve, rendez-vous sur "Logs", puis sélectionnez votre stream

Pour voir le détail d'une connexion, il suffit de cliquer sur la ligne en question. On peut également créer des filtres en cliquant sur une ou plusieurs valeurs des champs voire masquer des champs également.
Maintenant je vais mettre en place l'enrichissement des logs afin d'y préciser la géolocalisation.
📝 Enrichissement des logs
Par défaut, OpenObserve ne fournit pas l'origine des IP. Pour cela, il faut définir une fonction permettant d'enrichir les logs avec ces informations puis appliquer celle-ci dans un pipeline.
Pour cela, rendez-vous sur "Canalisations" puis Fonctions et cliquez sur "Créer une nouvelle fonction"

- Renseignez le nom de votre fonction (ce que vous voulez)
- Renseignez la fonction elle-même (celle-ci se base sur le langage VRL)
- Sauvegardez votre fonction
Les tables d'enrichissement dans OpenObserve vous permettent d'ajouter un contexte significatif à vos données en les joignant avec des données de référence externes. Ces tables sont téléchargées sous forme de fichiers CSV et peuvent être utilisées lors de l'ingestion ou au moment de la requête pour ajouter ou modifier des champs. Ici on récupère la table d'enrichissement automatiquement par le biais de la variable d'environnement renseignée dans le fichier compose.yaml.
Il faut maintenant créer le pipeline.
Rendez-vous sur "Canalisations" puis Canalisations fluviaux (oui traduit en français c'est bizarre) et cliquez sur "Ajouter un pipeline".
Voici celle que j'ai testé :

- La source provient de mon stream.
- J'applique une condition enlevant des IP locales ou utilisées par des applications de monitoring externes à mon réseau comme Uptime Kuma.
- J'applique ensuite la fonction de geolocalisation des IP.
- Je renvoie le tout vers un autre stream mais on peut envoyer cela vers le stream d'origine.
Rendez-vous maintenant sur "Logs" et vous verrez alors les logs enrichis avec les données de géolocalisation.

Nous pouvons maintenant créer un dashboard avec une map.
🌍 Création du dashbord
Rendez-vous sur "Tableaux de bord" puis cliquez sur "Nouveau tableau de bord".

Une fois votre dashboard créé, cliquez sur "Ajouter un panneau".

- Sélectionnez votre stream
- Cliquez sur l'icône Maps

Ensuite placez la souris sur le champs "geo_city_country_name" et cliquez sur "+N" et "+V"

Sélectionnez la dernière heure, puis cliquez sur "Appliquer" :

Renseignez le nom du panel puis sauvegardez.
Et voilà un premier dashboard avec les pays ayant consulté vos ressources en ligne.

🚀 Et les ressources ?

