[{"data":1,"prerenderedAt":221},["ShallowReactive",2],{"seo-verification":3,"blog-opentelemetry-grafana-tempo-vps-ma-fr":6,"promo-bar-likely":220},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-opentelemetry-grafana-tempo-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":152,"ctaBody":153,"ctaButton":154,"ctaUrl":155,"relatedPosts":156},220,"opentelemetry-grafana-tempo-vps",{"fr":10,"en":12,"ar":13,"es":14},"grafana-tempo-and-opentelemetry-distributed-tracing-on-vps","grafana-tempo-وopentelemetry-التتبع-الموزع-على-خادم-vps","grafana-tempo-opentelemetry-trazado-distribuido-vps","Grafana Tempo et OpenTelemetry : traçage distribué sur VPS","Déployez OpenTelemetry + Grafana Tempo sur votre VPS : architecture, configuration complète, instrumentation Node.js\u002FPython, rétention S3 et TraceQL.",12,2,false,"2026-08-04T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fopentelemetry-grafana-tempo-vps-poster.svg",{"categorySlug":34,"appSlug":35},"monitoring","grafana","Suivre une requête à travers plusieurs services sans outil de traçage, c'est trier des milliers de lignes de logs à la main. OpenTelemetry et Grafana Tempo forment un duo open-source qui transforme cette investigation en quelques clics. Ce guide vous explique comment déployer la stack complète sur un VPS, instrumenter vos applications et exploiter TraceQL pour diagnostiquer vos lenteurs.",[38,42,53,56,59,84,87,90,93,142,145,149],{"type":39,"title":40,"body":41},"h2","Pourquoi adopter OpenTelemetry plutôt qu'un agent propriétaire","OpenTelemetry est un projet \u003Ca href=\"https:\u002F\u002Fwww.cncf.io\u002Fprojects\u002Fopentelemetry\u002F\">CNCF graduaté\u003C\u002Fa> qui unifie les trois piliers de l'observabilité — traces, métriques et logs — sous un standard vendor-neutral. Contrairement aux agents Datadog ou New Relic qui vous enferment dans un contrat et un format propriétaire, l'OTel Collector reçoit, transforme et exporte la télémétrie vers n'importe quel backend compatible. Vous changez de stockage sans retoucher une ligne de votre code applicatif.\n\nLes SDKs couvrent Node.js, Python, Go, Java, PHP, Ruby et la plupart des langages modernes. Les **propagateurs de contexte** W3C TraceContext et B3 sont inclus : ils transmettent automatiquement le trace-id entre vos microservices via les headers HTTP, sans configuration supplémentaire. Enfin, l'OTel Collector peut tourner en tant qu'agent local sur chaque VM ou en mode gateway centralisé — vous choisissez la topologie qui convient à votre infrastructure.",{"type":43,"title":44,"items":45},"ul","Ce que la stack OTel + Grafana Tempo vous donne",[46,47,48,49,50,51,52],"**Tracing distribué sans index externe** — Grafana Tempo v2.x stocke les traces en blocs compressés (parquet) sur disque local ou objet storage, sans Cassandra ni Elasticsearch.","**Requêtes TraceQL** — le langage dédié de Tempo permet de filtrer les traces par durée, service, statut d'erreur ou attributs personnalisés en quelques secondes.","**Compatibilité multi-protocoles** — Tempo accepte OTLP, Zipkin et Jaeger : vos applications existantes s'y connectent sans ré-instrumentation complète.","**Stack légère sur VPS** — 2 Go de RAM suffisent pour un environnement de dev ou staging ; en production avec charge, 4 Go assurent une marge confortable.","**Coût maîtrisé** — un VPS à 99 DH\u002Fmois self-hosted remplace un abonnement APM Datadog facturé environ 23 $ par hôte et par mois.","**Corrélation traces–logs–métriques** — en liant Tempo à Loki et Prometheus dans Grafana, vous passez d'une trace à ses logs et ses métriques en un seul clic.","**Pas de vendor lock-in** — si vous migrez vers Jaeger demain, vous reconfigurez un exporter dans le Collector ; vos SDKs et votre code ne bougent pas.",{"type":39,"title":54,"body":55},"Prérequis VPS","Votre VPS doit disposer d'au moins **2 Go de RAM** (4 Go recommandés en production) et d'un accès root ou sudo. Docker Engine ≥ 24 et Docker Compose v2 doivent être installés.\n\nPrévoyez un sous-domaine dédié — par exemple `grafana.votre-domaine.com` — pour exposer l'interface Grafana derrière un reverse proxy TLS (nginx ou Caddy). Les ports **4317** (OTLP\u002FgRPC) et **4318** (OTLP\u002FHTTP) doivent être ouverts dans votre pare-feu côté privé pour recevoir la télémétrie depuis vos applications ; ne les exposez pas sur l'interface publique. Le port **3200** de Tempo et le port **3000** de Grafana restent internes au réseau Docker.\n\nCôté stockage, prévoyez au minimum 10 Go libres pour les blocs de traces. La valeur montée par défaut dans `\u002Ftmp\u002Ftempo` ne survit pas aux redémarrages : remplacez-la dès la mise en production par un volume Docker ou un montage sur un disque dédié.",{"type":39,"title":57,"body":58},"Architecture de la stack : du span à la visualisation","Le flux de données suit quatre étapes :\n\n1. **Votre application** instrumente ses requêtes avec un SDK OTel et exporte des spans vers l'OTel Collector (OTLP gRPC port 4317 ou HTTP port 4318).\n2. **L'OTel Collector** reçoit, met en tampon par batch processor, puis exporte vers Tempo via OTLP gRPC interne. Il peut simultanément envoyer les métriques vers Prometheus et les logs vers Loki.\n3. **Grafana Tempo** stocke les blocs de traces compressés sur disque (ou S3). Il expose une API TraceQL sur le port 3200 pour les requêtes de Grafana.\n4. **Grafana** interroge Tempo avec TraceQL, affiche les flamegraphs, les service graphs et les span metrics. Si Tempo est lié à Loki, un clic sur un span ouvre les logs du service concerné sur la même fenêtre temporelle.\n\n**TraceQL** est le langage de requête natif de Tempo. Une requête typique ressemble à : `{service.name=\"api\" && status=error && duration>500ms}`. Vous filtrez par attribut de ressource, attribut de span, statut ou durée — et vous obtenez immédiatement les traces qui franchissent un seuil de latence.\n\nLes **Span Metrics** sont un pipeline Tempo qui dérive automatiquement des métriques RED (Rate, Error, Duration) à partir des traces entrantes, sans que vous n'ajoutiez un seul compteur dans votre code. Ces métriques peuvent être scrappées par Prometheus et affichées dans des tableaux de bord Grafana standard.",{"type":60,"title":61,"steps":62},"steps","Déployer la stack OTel + Tempo en sept étapes",[63,66,69,72,75,78,81],{"title":64,"body":65},"Créer la structure de répertoires","Organisez un dossier `otel-stack\u002F` sur votre VPS :\n\n```bash\nmkdir -p otel-stack\u002Fconfig\ncd otel-stack\n```\n\nVous y placerez trois fichiers de configuration : `tempo.yaml`, `otel-collector-config.yaml` et `docker-compose.yml`.",{"title":67,"body":68},"Écrire la configuration Tempo (tempo.yaml)","Créez `config\u002Ftempo.yaml` avec le backend de stockage local et le support de TraceQL :\n\n```yaml\nserver:\n  http_listen_port: 3200\n\ndistributor:\n  receivers:\n    otlp:\n      protocols:\n        grpc:\n          endpoint: 0.0.0.0:4317\n\ningester:\n  max_block_bytes: 1_000_000\n  max_block_duration: 5m\n\ncompactor:\n  compaction:\n    block_retention: 168h   # 7 jours\n\nstorage:\n  trace:\n    backend: local\n    wal:\n      path: \u002Ftmp\u002Ftempo\u002Fwal\n    local:\n      path: \u002Ftmp\u002Ftempo\u002Fblocks\n```\n\nAjustez `block_retention` selon la durée de rétention souhaitée (voir la section dédiée plus bas).",{"title":70,"body":71},"Écrire la configuration de l'OTel Collector","Créez `config\u002Fotel-collector-config.yaml` :\n\n```yaml\nreceivers:\n  otlp:\n    protocols:\n      grpc:\n        endpoint: 0.0.0.0:4317\n      http:\n        endpoint: 0.0.0.0:4318\n\nprocessors:\n  batch:\n    timeout: 5s\n    send_batch_size: 1000\n\nexporters:\n  otlp:\n    endpoint: tempo:4317\n    tls:\n      insecure: true\n\nservice:\n  pipelines:\n    traces:\n      receivers: [otlp]\n      processors: [batch]\n      exporters: [otlp]\n```\n\nPour ajouter les métriques vers Prometheus et les logs vers Loki, ajoutez les receivers et exporters correspondants dans les pipelines `metrics` et `logs`.",{"title":73,"body":74},"Écrire le docker-compose.yml","Créez `docker-compose.yml` à la racine de `otel-stack\u002F` :\n\n```yaml\nservices:\n  otel-collector:\n    image: otel\u002Fopentelemetry-collector-contrib:latest\n    volumes:\n      - .\u002Fconfig\u002Fotel-collector-config.yaml:\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml\n    ports:\n      - \"4317:4317\"\n      - \"4318:4318\"\n    networks:\n      - observability\n    depends_on:\n      - tempo\n\n  tempo:\n    image: grafana\u002Ftempo:latest\n    command: [\"-config.file=\u002Fetc\u002Ftempo.yaml\"]\n    volumes:\n      - .\u002Fconfig\u002Ftempo.yaml:\u002Fetc\u002Ftempo.yaml\n      - tempo-data:\u002Ftmp\u002Ftempo\n    ports:\n      - \"3200:3200\"\n    networks:\n      - observability\n\n  grafana:\n    image: grafana\u002Fgrafana:latest\n    ports:\n      - \"3000:3000\"\n    environment:\n      - GF_AUTH_ANONYMOUS_ENABLED=true\n      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin\n    networks:\n      - observability\n    depends_on:\n      - tempo\n\nvolumes:\n  tempo-data:\n\nnetworks:\n  observability:\n```\n\nLancez la stack : `docker compose up -d` puis vérifiez que les trois services sont `healthy` avec `docker compose ps`.",{"title":76,"body":77},"Configurer Grafana Tempo comme datasource","Ouvrez Grafana sur `http:\u002F\u002Fvotre-vps:3000`. Naviguez vers **Connections → Data sources → Add data source** et sélectionnez **Tempo**. Renseignez l'URL `http:\u002F\u002Ftempo:3200`. Activez **Service graph** et **Span metrics** pour enrichir la visualisation avec des graphiques de dépendances et des métriques RED calculées automatiquement. Si votre stack inclut Loki, liez les deux datasources dans le champ **Linked data sources** : vous pourrez naviguer d'un span à ses logs en un clic.",{"title":79,"body":80},"Envoyer votre première trace de test","Testez que la stack reçoit bien des traces avec l'outil `telemetrygen` :\n\n```bash\ndocker run --rm --network otel-stack_observability \\\n  ghcr.io\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib\u002Ftelemetrygen:latest \\\n  traces \\\n  --otlp-endpoint otel-collector:4317 \\\n  --otlp-insecure \\\n  --duration 5s \\\n  --rate 10\n```\n\nDans Grafana, ouvrez **Explore**, sélectionnez la datasource Tempo et lancez la requête `{}` pour voir toutes les traces reçues. Si aucune trace n'apparaît, vérifiez les logs du Collector : `docker compose logs otel-collector`.",{"title":82,"body":83},"Requêter vos traces avec TraceQL","Dans le panneau Explore de Grafana (datasource Tempo), saisissez une requête TraceQL pour filtrer vos traces. Exemples utiles :\n\n- `{service.name=\"mon-api\"}` — toutes les traces du service `mon-api`\n- `{status=error}` — toutes les traces en erreur\n- `{duration>1s && service.name=\"mon-api\"}` — traces lentes de plus d'une seconde\n- `{span.http.route=\"\u002Fapi\u002Forders\" && status=error}` — erreurs sur une route précise\n\nCliquez sur une trace pour ouvrir le flamegraph détaillé : chaque span affiche sa durée, ses attributs et les erreurs éventuelles.",{"type":39,"title":85,"body":86},"Configurer la rétention et le stockage des traces","Par défaut, Tempo stocke les blocs localement dans `\u002Ftmp\u002Ftempo`. Pour une installation durable, deux options s'offrent à vous.\n\n**Stockage local sur volume Docker** : c'est la configuration recommandée pour un VPS standalone. Le volume `tempo-data` défini dans le `docker-compose.yml` ci-dessus persiste les données entre les redémarrages. Ajustez `block_retention` dans `tempo.yaml` selon votre besoin : 72 h pour un environnement de staging, 168 h (7 jours) à 720 h (30 jours) pour la production. Chaque heure de trace compressée occupe environ 100–300 Mo selon le volume de spans.\n\n**Stockage objet S3-compatible** : pour une stack multi-nœuds ou un stockage sans plafond, remplacez le backend `local` par un backend `s3` dans `tempo.yaml` :\n\n```yaml\nstorage:\n  trace:\n    backend: s3\n    s3:\n      bucket: mon-bucket-traces\n      endpoint: s3.amazonaws.com\n      region: eu-west-1\n      access_key: ${S3_ACCESS_KEY}\n      secret_key: ${S3_SECRET_KEY}\n    wal:\n      path: \u002Ftmp\u002Ftempo\u002Fwal\n```\n\nTempo est compatible avec AWS S3, MinIO, Scaleway Object Storage et tout backend qui implémente l'API S3. La WAL (Write-Ahead Log) reste toujours sur disque local pour garantir la durabilité des traces en cours d'ingestion.\n\nLe **compacteur** de Tempo fusionne les petits blocs et applique la politique de rétention. Il tourne en arrière-plan et ne nécessite aucune intervention manuelle. Surveillez la taille du dossier `blocks\u002F` avec `docker exec tempo du -sh \u002Ftmp\u002Ftempo\u002Fblocks` pour anticiper un éventuel manque d'espace.",{"type":39,"title":88,"body":89},"Instrumenter une application Node.js","L'auto-instrumentation OTel pour Node.js capture automatiquement les appels HTTP sortants, les requêtes Express\u002FFastify, les requêtes de base de données et bien d'autres bibliothèques sans modifier votre code métier.\n\nInstallez les packages nécessaires :\n\n```bash\nnpm install @opentelemetry\u002Fsdk-node \\\n             @opentelemetry\u002Fauto-instrumentations-node \\\n             @opentelemetry\u002Fexporter-trace-otlp-grpc\n```\n\nCréez un fichier `tracing.js` à charger en premier :\n\n```js\nconst { NodeSDK } = require('@opentelemetry\u002Fsdk-node');\nconst { getNodeAutoInstrumentations } = require('@opentelemetry\u002Fauto-instrumentations-node');\nconst { OTLPTraceExporter } = require('@opentelemetry\u002Fexporter-trace-otlp-grpc');\n\nconst sdk = new NodeSDK({\n  traceExporter: new OTLPTraceExporter({\n    url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'grpc:\u002F\u002Flocalhost:4317',\n  }),\n  instrumentations: [getNodeAutoInstrumentations()],\n});\n\nsdk.start();\n```\n\nDémarrez votre application en chargeant ce fichier en premier :\n\n```bash\nexport OTEL_SERVICE_NAME=mon-api\nexport OTEL_EXPORTER_OTLP_ENDPOINT=http:\u002F\u002Fvotre-vps:4317\nnode --require .\u002Ftracing.js app.js\n```\n\nPour les environnements Docker, passez les variables `OTEL_SERVICE_NAME` et `OTEL_EXPORTER_OTLP_ENDPOINT` dans votre `docker-compose.yml` ou votre manifest Kubernetes. Tous les appels HTTP entrants et sortants seront automatiquement tracés et corrélés par le propagateur W3C TraceContext.",{"type":39,"title":91,"body":92},"Instrumenter une application Python","Le package `opentelemetry-distro` fournit un mécanisme de bootstrap qui installe automatiquement tous les packages d'instrumentation pour les bibliothèques détectées dans votre environnement.\n\nInstallez et bootstrappez :\n\n```bash\npip install opentelemetry-distro opentelemetry-exporter-otlp\nopentelemetry-bootstrap -a install\n```\n\nLancez votre application en la préfixant avec `opentelemetry-instrument` :\n\n```bash\nexport OTEL_SERVICE_NAME=mon-service-python\nexport OTEL_EXPORTER_OTLP_ENDPOINT=http:\u002F\u002Fvotre-vps:4317\nexport OTEL_EXPORTER_OTLP_PROTOCOL=grpc\nopentelemetry-instrument python app.py\n```\n\nLes frameworks Django, Flask, FastAPI, SQLAlchemy et les clients HTTP (`requests`, `httpx`, `aiohttp`) sont instrumentés automatiquement. Pour un déploiement en conteneur, définissez les variables `OTEL_*` dans votre fichier d'environnement et assurez-vous que le port 4317 de l'OTel Collector est accessible depuis le réseau de vos conteneurs.\n\nSi vous préférez une instrumentation manuelle pour un contrôle plus fin, utilisez directement l'API OTel :\n\n```python\nfrom opentelemetry import trace\n\ntracer = trace.get_tracer(__name__)\n\nwith tracer.start_as_current_span(\"traitement-commande\") as span:\n    span.set_attribute(\"commande.id\", commande_id)\n    # votre logique métier\n```",{"type":94,"title":95,"headers":96,"rows":101},"comparison","OTel + Tempo vs Jaeger vs Zipkin vs Datadog APM",[97,98,99,100],"Critère","OTel + Grafana Tempo","Jaeger","Datadog APM",[102,107,112,117,122,127,132,137],[103,104,105,106],"Coût mensuel","Hébergement seul (99 DH\u002Fmois VPS)","Hébergement seul (similaire)","~23 $ par hôte par mois",[108,109,110,111],"Stockage backend","Local, S3, GCS, Azure Blob","Cassandra, Elasticsearch, Badger","SaaS managé (opaque)",[113,114,115,116],"Langage de requête","TraceQL (natif, puissant)","Jaeger Query UI (basique)","APM Query Language (propriétaire)",[118,119,120,121],"Auto-instrumentation","OTel SDK universel","Bibliothèques Jaeger ou OTel","Agent Datadog propriétaire",[123,124,125,126],"Corrélation traces–logs","Oui (Loki + Grafana)","Limitée","Oui (intégré, payant)",[128,129,130,131],"Span Metrics (RED)","Oui (pipeline Tempo natif)","Non natif","Oui (calculé côté Datadog)",[133,134,135,136],"Vendor lock-in","Aucun (standard CNCF)","Faible (compatible OTel)","Fort (agent et format propriétaires)",[138,139,140,141],"Complexité d'installation","Moyenne (3 conteneurs)","Faible à moyenne","Faible (agent auto)",{"type":39,"title":143,"body":144},"Alertes et SLOs dans Grafana","Grafana 10+ permet de définir des alertes directement sur les métriques dérivées des traces. Les **Span Metrics** de Tempo génèrent automatiquement trois métriques par service : `traces_spanmetrics_calls_total` (taux de requêtes), `traces_spanmetrics_latency_bucket` (histogramme de latence) et leur compteur d'erreurs associé.\n\nPour créer un SLO sur le taux d'erreur de votre API :\n1. Dans Grafana, allez dans **Alerting → Alert rules → New alert rule**.\n2. Choisissez la datasource Prometheus (ou Tempo via Span Metrics) et saisissez une requête comme `rate(traces_spanmetrics_calls_total{status_code=\"STATUS_CODE_ERROR\", service=\"mon-api\"}[5m]) \u002F rate(traces_spanmetrics_calls_total{service=\"mon-api\"}[5m])`.\n3. Définissez le seuil d'alerte (par exemple `> 0.05` pour un taux d'erreur supérieur à 5 %) et la fenêtre d'évaluation.\n4. Configurez un contact point : Alertmanager, PagerDuty, Slack ou webhook — tout s'intègre depuis **Alerting → Contact points**.\n\nPour le **P99 de latence**, interrogez `histogram_quantile(0.99, rate(traces_spanmetrics_latency_bucket{service=\"mon-api\"}[5m]))` et déclenchez une alerte si la valeur dépasse votre budget d'erreur (par exemple 2 secondes). Ces alertes basées sur des traces sont bien plus précises que des alertes sur des métriques synthétiques, car elles reflètent le vécu réel de chaque requête.",{"type":146,"title":147,"body":148},"tip","Combiner traces, logs et métriques dans un seul Collector","L'OTel Collector n'est pas réservé aux traces. En ajoutant un **receiver `filelog`** dans votre configuration, vous collectez les logs de vos conteneurs Docker et les expédiez vers Loki. Un **receiver `prometheus`** scrape vos endpoints `\u002Fmetrics` et les exporte vers Mimir ou Prometheus. Un seul processus gère ainsi l'intégralité de la télémétrie de votre VPS.\n\nDans Grafana, liez Tempo et Loki via des **derived fields** : quand un log contient un `trace_id`, un lien cliquable vous amène directement au flamegraph correspondant. À l'inverse, depuis une trace Tempo, un lien vous ouvre les logs Loki du service et de la fenêtre temporelle associés. Cette navigation croisée réduit considérablement le temps de diagnostic : vous n'avez plus à corréler manuellement des timestamps entre trois onglets distincts.",{"type":39,"title":150,"body":151},"Résoudre les problèmes courants","**Aucun span n'arrive dans Tempo.** Vérifiez d'abord que l'OTel Collector est joignable depuis votre application (`telnet votre-vps 4317`). Consultez les logs du Collector (`docker compose logs otel-collector`) : une erreur `connection refused` sur `tempo:4317` indique que Tempo n'est pas encore démarré ou que son port interne n'est pas exposé sur le réseau Docker. Assurez-vous que les deux services sont sur le même réseau (`observability`).\n\n**Connexion refusée depuis l'application vers le Collector.** Sur un pare-feu UFW ou firewalld, autorisez les ports 4317 et 4318 uniquement pour les IP de vos applications, pas pour l'ensemble d'Internet. En production, les applications et le Collector doivent être sur le même réseau privé ; n'exposez jamais le Collector sur l'interface publique sans authentification.\n\n**Traces tronquées ou spans manquants.** Le batch processor du Collector regroupe les spans avant de les envoyer. Si votre application envoie peu de spans, les traces peuvent mettre jusqu'à `timeout` secondes (5 s par défaut) pour apparaître dans Grafana. Pour le développement, réduisez `timeout: 1s` dans le batch processor. Si des spans sont systématiquement absents, vérifiez que le propagateur de contexte est activé dans votre SDK (`W3CTraceContextPropagator`) — sans lui, les appels entre services génèrent des traces orphelines.\n\n**Tempo consomme trop d'espace disque.** Réduisez `block_retention` dans `tempo.yaml` et relancez Tempo. Le compacteur appliquera la nouvelle politique au prochain cycle (toutes les 5 minutes par défaut). En cas d'urgence, supprimez manuellement les anciens blocs dans `\u002Ftmp\u002Ftempo\u002Fblocks` tout en laissant la WAL intacte.\n\n**Grafana ne trouve pas les traces depuis les logs Loki.** Vérifiez que vos applications injectent bien le `trace_id` dans leurs logs (format structuré JSON recommandé) et que le champ **Derived fields** dans la datasource Loki pointe vers le bon pattern (`\"traceId\": \"(\\w+)\"`). L'URL du lien doit pointer vers la datasource Tempo avec le bon identifiant de datasource Grafana.","Grafana est dans le catalogue ServOrbit","Déployez Grafana en un clic depuis notre Marketplace et connectez-y votre stack OTel + Tempo sans configuration manuelle.","Déployer Grafana sur VPS","\u002Fapplications\u002Fmonitoring\u002Fgrafana",[157,181,199],{"id":158,"slug":159,"slugs":160,"title":164,"excerpt":165,"readTime":166,"views":167,"isPinned":19,"noindex":19,"publishedAt":168,"updatedAt":169,"category":170,"categories":176,"featuredImage":30,"bgImage":31,"posterImage":178,"relatedSolution":179},176,"self-host-openobserve-vps",{"fr":159,"en":161,"ar":162,"es":163},"self-host-openobserve-on-a-vps-unified-logs-metrics-and-traces","استضافة-openobserve-على-vps-سجلات-ومقاييس-وتتبعات-موحدة","alojar-openobserve-en-un-vps","Héberger OpenObserve sur un VPS : logs, métriques et traces","Remplacez Elasticsearch + Grafana par OpenObserve : un seul binaire Rust pour logs, métriques, traces et tableaux de bord, avec un stockage 140× moins cher.",6,0,"2026-07-10T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":171,"name":172,"slug":173,"color":174,"icon":175},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[177],{"id":171,"name":172,"slug":173,"color":174,"icon":175},"\u002Fblog\u002Fcovers\u002Fself-host-openobserve-vps-poster.svg",{"categorySlug":34,"appSlug":180},"openobserve",{"id":182,"slug":183,"slugs":184,"title":188,"excerpt":189,"readTime":190,"views":191,"isPinned":19,"noindex":19,"publishedAt":192,"updatedAt":21,"category":193,"categories":194,"featuredImage":30,"bgImage":31,"posterImage":196,"relatedSolution":197},209,"self-host-gatus-vps",{"fr":183,"en":185,"ar":186,"es":187},"self-host-gatus-on-a-vps-config-as-code-status-page-and-checks","استضافة-gatus-على-vps-صفحة-حالة-بالكود-ومراقبة-شاملة","alojar-gatus-en-un-vps","Héberger Gatus sur un VPS : page de statut config-as-code","Déployez Gatus sur votre VPS ServOrbit : page de statut publique et checks HTTP, TCP, DNS, ICMP et expiration TLS pilotés par un seul fichier YAML, 40+ canaux d'alerte.",4,1,"2026-08-02T00:00:00+00:00",{"id":171,"name":172,"slug":173,"color":174,"icon":175},[195],{"id":171,"name":172,"slug":173,"color":174,"icon":175},"\u002Fblog\u002Fcovers\u002Fself-host-gatus-vps-poster.svg",{"categorySlug":34,"appSlug":198},"gatus",{"id":200,"slug":201,"slugs":202,"title":206,"excerpt":207,"readTime":208,"views":18,"isPinned":19,"noindex":19,"publishedAt":209,"updatedAt":21,"category":210,"categories":215,"featuredImage":30,"bgImage":31,"posterImage":217,"relatedSolution":218},177,"self-host-langfuse-vps",{"fr":201,"en":203,"ar":204,"es":205},"self-host-langfuse-on-a-vps-llm-observability-no-saas-bill","استضافة-langfuse-على-vps-مراقبة-llm-بلا-فاتورة-saas","alojar-langfuse-en-un-vps","Héberger Langfuse sur un VPS : observabilité LLM sans SaaS","Auto-hébergez Langfuse sur un VPS : traçage, évaluation de prompts et suivi des coûts LLM. Guide complet : installation, nginx, TLS, SDK Python\u002FJS, dépannage.",11,"2026-07-12T00:00:00+00:00",{"id":191,"name":211,"slug":212,"color":213,"icon":214},"Intelligence Artificielle","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400","ia",[216],{"id":191,"name":211,"slug":212,"color":213,"icon":214},"\u002Fblog\u002Fcovers\u002Fself-host-langfuse-vps-poster.svg",{"categorySlug":214,"appSlug":219},"langfuse",true,1794270764632]