[{"data":1,"prerenderedAt":222},["ShallowReactive",2],{"seo-verification":3,"blog-grafana-tempo-and-opentelemetry-distributed-tracing-on-vps-ma-en":6,"promo-bar-likely":221},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-grafana-tempo-and-opentelemetry-distributed-tracing-on-vps-ma-en",{"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,"grafana-tempo-and-opentelemetry-distributed-tracing-on-vps",{"fr":12,"en":10,"ar":13,"es":14},"opentelemetry-grafana-tempo-vps","grafana-tempo-وopentelemetry-التتبع-الموزع-على-خادم-vps","grafana-tempo-opentelemetry-trazado-distribuido-vps","Grafana Tempo and OpenTelemetry: distributed tracing on VPS","Deploy OpenTelemetry + Grafana Tempo on your VPS: complete architecture, step-by-step setup, Node.js\u002FPython instrumentation, S3 retention, and TraceQL queries.",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,"Security & 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-observability","grafana","Tracking a request across multiple services without a tracing tool means manually sifting through thousands of log lines. OpenTelemetry and Grafana Tempo form an open-source duo that turns this investigation into a few clicks. This guide walks you through deploying the full stack on a VPS, instrumenting your applications, and using TraceQL to diagnose latency issues.",[38,42,53,56,59,84,87,90,93,142,145,149],{"type":39,"title":40,"body":41},"h2","Why choose OpenTelemetry over a proprietary agent","OpenTelemetry is a \u003Ca href=\"https:\u002F\u002Fwww.cncf.io\u002Fprojects\u002Fopentelemetry\u002F\">graduated CNCF project\u003C\u002Fa> that unifies the three pillars of observability — traces, metrics, and logs — under a vendor-neutral standard. Unlike Datadog or New Relic agents that lock you into a proprietary contract and format, the OTel Collector receives, transforms, and exports telemetry to any compatible backend. You can switch storage without changing a single line of application code.\n\nSDKs cover Node.js, Python, Go, Java, PHP, Ruby, and most modern languages. W3C TraceContext and B3 **context propagators** are included: they automatically forward the trace-id between your microservices via HTTP headers, with no extra configuration. The OTel Collector can run as a local agent on each VM or as a centralized gateway — you choose the topology that fits your infrastructure.",{"type":43,"title":44,"items":45},"ul","What the OTel + Grafana Tempo stack gives you",[46,47,48,49,50,51,52],"**Distributed tracing without an external index** — Grafana Tempo v2.x stores traces in compressed blocks (parquet) on local disk or object storage, with no Cassandra or Elasticsearch.","**TraceQL queries** — Tempo's dedicated language lets you filter traces by duration, service, error status, or custom attributes in seconds.","**Multi-protocol compatibility** — Tempo accepts OTLP, Zipkin, and Jaeger: your existing applications connect without full re-instrumentation.","**Lightweight on VPS** — 2 GB of RAM is sufficient for a dev or staging environment; in production under load, 4 GB provides a comfortable margin.","**Controlled cost** — a self-hosted VPS at 99 DH\u002Fmonth replaces a Datadog APM subscription billed at around $23 per host per month.","**Traces–logs–metrics correlation** — by linking Tempo to Loki and Prometheus in Grafana, you jump from a trace to its logs and metrics in a single click.","**No vendor lock-in** — if you migrate to Jaeger tomorrow, you reconfigure one exporter in the Collector; your SDKs and application code remain untouched.",{"type":39,"title":54,"body":55},"VPS prerequisites","Your VPS needs at least **2 GB of RAM** (4 GB recommended for production) and root or sudo access. Docker Engine ≥ 24 and Docker Compose v2 must be installed.\n\nPlan a dedicated subdomain — for example `grafana.your-domain.com` — to expose the Grafana interface behind a TLS reverse proxy (nginx or Caddy). Ports **4317** (OTLP\u002FgRPC) and **4318** (OTLP\u002FHTTP) must be open in your firewall on the private side to receive telemetry from your applications; do not expose them on the public interface. Tempo port **3200** and Grafana port **3000** remain internal to the Docker network.\n\nFor storage, plan for at least 10 GB of free space for trace blocks. The default mount at `\u002Ftmp\u002Ftempo` does not survive restarts: replace it with a named Docker volume or a dedicated disk mount before going to production.",{"type":39,"title":57,"body":58},"Stack architecture: from span to visualization","The data flow follows four steps:\n\n1. **Your application** instruments its requests with an OTel SDK and exports spans to the OTel Collector (OTLP gRPC port 4317 or HTTP port 4318).\n2. **The OTel Collector** receives, batches, then exports to Tempo via internal OTLP gRPC. It can simultaneously send metrics to Prometheus and logs to Loki.\n3. **Grafana Tempo** stores compressed trace blocks on disk (or S3). It exposes a TraceQL API on port 3200 for Grafana queries.\n4. **Grafana** queries Tempo with TraceQL, displays flamegraphs, service graphs, and span metrics. If Tempo is linked to Loki, clicking a span opens the logs for that service on the same time window.\n\n**TraceQL** is Tempo's native query language. A typical query looks like: `{service.name=\"api\" && status=error && duration>500ms}`. You filter by resource attribute, span attribute, status, or duration — and immediately get traces that cross a latency threshold.\n\n**Span Metrics** is a Tempo pipeline that automatically derives RED metrics (Rate, Error, Duration) from incoming traces, without adding a single counter to your code. These metrics can be scraped by Prometheus and displayed in standard Grafana dashboards.",{"type":60,"title":61,"steps":62},"steps","Deploy the OTel + Tempo stack in seven steps",[63,66,69,72,75,78,81],{"title":64,"body":65},"Create the directory structure","Set up an `otel-stack\u002F` folder on your VPS:\n\n```bash\nmkdir -p otel-stack\u002Fconfig\ncd otel-stack\n```\n\nYou will place three configuration files here: `tempo.yaml`, `otel-collector-config.yaml`, and `docker-compose.yml`.",{"title":67,"body":68},"Write the Tempo configuration (tempo.yaml)","Create `config\u002Ftempo.yaml` with local storage backend and TraceQL support:\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 days\n\nstorage:\n  trace:\n    backend: local\n    wal:\n      path: \u002Ftmp\u002Ftempo\u002Fwal\n    local:\n      path: \u002Ftmp\u002Ftempo\u002Fblocks\n```\n\nAdjust `block_retention` to match your desired retention period.",{"title":70,"body":71},"Write the OTel Collector configuration","Create `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```",{"title":73,"body":74},"Write the docker-compose.yml","Create `docker-compose.yml` at the root of `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\nStart the stack: `docker compose up -d` then verify all three services are healthy with `docker compose ps`.",{"title":76,"body":77},"Configure Grafana Tempo as a datasource","Open Grafana at `http:\u002F\u002Fyour-vps:3000`. Go to **Connections → Data sources → Add data source** and select **Tempo**. Set the URL to `http:\u002F\u002Ftempo:3200`. Enable **Service graph** and **Span metrics** to enrich the visualization with dependency graphs and automatically computed RED metrics. If your stack includes Loki, link both datasources in the **Linked data sources** field: you will be able to navigate from a span to its logs in one click.",{"title":79,"body":80},"Send your first test trace","Test that the stack receives traces using `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\nIn Grafana, open **Explore**, select the Tempo datasource, and run the query `{}` to see all received traces. If no traces appear, check the Collector logs: `docker compose logs otel-collector`.",{"title":82,"body":83},"Query your traces with TraceQL","In the Grafana Explore panel (Tempo datasource), enter a TraceQL query to filter your traces. Useful examples:\n\n- `{service.name=\"my-api\"}` — all traces from the `my-api` service\n- `{status=error}` — all traces in error state\n- `{duration>1s && service.name=\"my-api\"}` — slow traces taking more than one second\n- `{span.http.route=\"\u002Fapi\u002Forders\" && status=error}` — errors on a specific route\n\nClick on a trace to open the detailed flamegraph: each span shows its duration, attributes, and any errors.",{"type":39,"title":85,"body":86},"Configure trace retention and storage","By default, Tempo stores blocks locally in `\u002Ftmp\u002Ftempo`. For a durable installation, two options are available.\n\n**Local storage on a Docker volume**: this is the recommended configuration for a standalone VPS. The `tempo-data` volume defined in `docker-compose.yml` persists data across restarts. Adjust `block_retention` in `tempo.yaml` according to your needs: 72 h for a staging environment, 168 h (7 days) to 720 h (30 days) for production. Each hour of compressed traces occupies approximately 100–300 MB depending on span volume.\n\n**S3-compatible object storage**: for a multi-node stack or uncapped storage, replace the `local` backend with an `s3` backend in `tempo.yaml`:\n\n```yaml\nstorage:\n  trace:\n    backend: s3\n    s3:\n      bucket: my-traces-bucket\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 is compatible with AWS S3, MinIO, Scaleway Object Storage, and any S3 API-compatible backend. The WAL (Write-Ahead Log) always stays on local disk to ensure durability of in-flight traces.\n\nTempo's **compactor** merges small blocks and enforces the retention policy. It runs in the background and requires no manual intervention. Monitor the `blocks\u002F` folder size with `docker exec tempo du -sh \u002Ftmp\u002Ftempo\u002Fblocks` to anticipate storage needs.",{"type":39,"title":88,"body":89},"Instrument a Node.js application","OTel auto-instrumentation for Node.js automatically captures outgoing HTTP calls, Express\u002FFastify requests, database queries, and many other libraries without modifying your business logic.\n\nInstall the required packages:\n\n```bash\nnpm install @opentelemetry\u002Fsdk-node \\\n             @opentelemetry\u002Fauto-instrumentations-node \\\n             @opentelemetry\u002Fexporter-trace-otlp-grpc\n```\n\nCreate a `tracing.js` file to load first:\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\nStart your application with this file loaded first:\n\n```bash\nexport OTEL_SERVICE_NAME=my-api\nexport OTEL_EXPORTER_OTLP_ENDPOINT=http:\u002F\u002Fyour-vps:4317\nnode --require .\u002Ftracing.js app.js\n```\n\nFor Docker environments, pass the `OTEL_SERVICE_NAME` and `OTEL_EXPORTER_OTLP_ENDPOINT` variables in your `docker-compose.yml` or Kubernetes manifest. All incoming and outgoing HTTP calls will be automatically traced and correlated by the W3C TraceContext propagator.",{"type":39,"title":91,"body":92},"Instrument a Python application","The `opentelemetry-distro` package provides a bootstrap mechanism that automatically installs all instrumentation packages for libraries detected in your environment.\n\nInstall and bootstrap:\n\n```bash\npip install opentelemetry-distro opentelemetry-exporter-otlp\nopentelemetry-bootstrap -a install\n```\n\nLaunch your application prefixed with `opentelemetry-instrument`:\n\n```bash\nexport OTEL_SERVICE_NAME=my-python-service\nexport OTEL_EXPORTER_OTLP_ENDPOINT=http:\u002F\u002Fyour-vps:4317\nexport OTEL_EXPORTER_OTLP_PROTOCOL=grpc\nopentelemetry-instrument python app.py\n```\n\nDjango, Flask, FastAPI, SQLAlchemy, and HTTP clients (`requests`, `httpx`, `aiohttp`) are instrumented automatically. For containerized deployments, define the `OTEL_*` variables in your environment file and ensure port 4317 of the OTel Collector is accessible from your containers' network.\n\nFor manual instrumentation with finer control:\n\n```python\nfrom opentelemetry import trace\n\ntracer = trace.get_tracer(__name__)\n\nwith tracer.start_as_current_span(\"process-order\") as span:\n    span.set_attribute(\"order.id\", order_id)\n    # your business logic\n```",{"type":94,"title":95,"headers":96,"rows":101},"comparison","OTel + Tempo vs Jaeger vs Zipkin vs Datadog APM",[97,98,99,100],"Criterion","OTel + Grafana Tempo","Jaeger","Datadog APM",[102,107,112,117,122,127,132,137],[103,104,105,106],"Monthly cost","Hosting only (99 DH\u002Fmonth VPS)","Hosting only (similar)","~$23 per host per month",[108,109,110,111],"Storage backend","Local, S3, GCS, Azure Blob","Cassandra, Elasticsearch, Badger","Managed SaaS (opaque)",[113,114,115,116],"Query language","TraceQL (native, powerful)","Jaeger Query UI (basic)","APM Query Language (proprietary)",[118,119,120,121],"Auto-instrumentation","Universal OTel SDK","Jaeger libraries or OTel","Proprietary Datadog agent",[123,124,125,126],"Traces–logs correlation","Yes (Loki + Grafana)","Limited","Yes (integrated, paid)",[128,129,130,131],"Span Metrics (RED)","Yes (native Tempo pipeline)","Not native","Yes (computed by Datadog)",[133,134,135,136],"Vendor lock-in","None (CNCF standard)","Low (OTel compatible)","Strong (proprietary agent and format)",[138,139,140,141],"Installation complexity","Medium (3 containers)","Low to medium","Low (auto agent)",{"type":39,"title":143,"body":144},"Alerts and SLOs in Grafana","Grafana 10+ lets you define alerts directly on metrics derived from traces. Tempo's **Span Metrics** automatically generate three metrics per service: `traces_spanmetrics_calls_total` (request rate), `traces_spanmetrics_latency_bucket` (latency histogram), and the associated error counter.\n\nTo create an SLO on your API error rate:\n1. In Grafana, go to **Alerting → Alert rules → New alert rule**.\n2. Choose the Prometheus datasource (or Tempo via Span Metrics) and enter a query like `rate(traces_spanmetrics_calls_total{status_code=\"STATUS_CODE_ERROR\", service=\"my-api\"}[5m]) \u002F rate(traces_spanmetrics_calls_total{service=\"my-api\"}[5m])`.\n3. Set the alert threshold (for example `> 0.05` for an error rate above 5%) and the evaluation window.\n4. Configure a contact point: Alertmanager, PagerDuty, Slack, or webhook — all integrate from **Alerting → Contact points**.\n\nFor **P99 latency**, query `histogram_quantile(0.99, rate(traces_spanmetrics_latency_bucket{service=\"my-api\"}[5m]))` and trigger an alert if the value exceeds your error budget (for example 2 seconds). These trace-based alerts are far more precise than synthetic metric alerts, as they reflect the real experience of each individual request.",{"type":146,"title":147,"body":148},"tip","Combine traces, logs, and metrics in a single Collector","The OTel Collector is not limited to traces. By adding a **`filelog` receiver** to your configuration, you collect logs from your Docker containers and ship them to Loki. A **`prometheus` receiver** scrapes your `\u002Fmetrics` endpoints and exports them to Mimir or Prometheus. A single process handles all telemetry from your VPS.\n\nIn Grafana, link Tempo and Loki via **derived fields**: when a log contains a `trace_id`, a clickable link takes you directly to the corresponding flamegraph. Conversely, from a Tempo trace, a link opens the Loki logs for that service in the associated time window. This cross-navigation dramatically reduces diagnosis time: no more manually correlating timestamps across three separate tabs.",{"type":39,"title":150,"body":151},"Troubleshooting common issues","**No spans arriving in Tempo.** First check that the OTel Collector is reachable from your application (`telnet your-vps 4317`). Check the Collector logs (`docker compose logs otel-collector`): a `connection refused` error on `tempo:4317` indicates Tempo is not yet started or its internal port is not exposed on the Docker network. Ensure both services share the same network (`observability`).\n\n**Connection refused from application to Collector.** On a UFW or firewalld firewall, allow ports 4317 and 4318 only for your application IPs, not for the entire internet. In production, applications and Collector should be on the same private network; never expose the Collector on the public interface without authentication.\n\n**Truncated traces or missing spans.** The Collector's batch processor groups spans before sending. If your application sends few spans, traces can take up to `timeout` seconds (5 s by default) to appear in Grafana. For development, reduce `timeout: 1s` in the batch processor. If spans are systematically absent, verify the context propagator is activated in your SDK (`W3CTraceContextPropagator`) — without it, calls between services generate orphaned traces.\n\n**Tempo consuming too much disk space.** Reduce `block_retention` in `tempo.yaml` and restart Tempo. The compactor will apply the new policy on the next cycle (every 5 minutes by default). In an emergency, manually delete old blocks in `\u002Ftmp\u002Ftempo\u002Fblocks` while leaving the WAL intact.\n\n**Grafana can't find traces from Loki logs.** Verify that your applications inject `trace_id` into their logs (structured JSON format recommended) and that the **Derived fields** setting in the Loki datasource points to the correct pattern (`\"traceId\": \"(\\w+)\"`). The link URL must point to the Tempo datasource with the correct Grafana datasource identifier.","Host your observability stack on a VPS","Start from 99 DH\u002Fmonth — full root access, SSD storage, no vendor lock-in.","See VPS plans","\u002Fapplications\u002Fmonitoring-observability\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-on-a-vps-unified-logs-metrics-and-traces",{"fr":161,"en":159,"ar":162,"es":163},"self-host-openobserve-vps","استضافة-openobserve-على-vps-سجلات-ومقاييس-وتتبعات-موحدة","alojar-openobserve-en-un-vps","Self-Host OpenObserve on a VPS: Unified Logs, Metrics and Traces","Replace Elasticsearch + Grafana with OpenObserve: one Rust binary for logs, metrics, traces and dashboards at 140× lower storage cost. Full self-host guide.",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-on-a-vps-config-as-code-status-page-and-checks",{"fr":185,"en":183,"ar":186,"es":187},"self-host-gatus-vps","استضافة-gatus-على-vps-صفحة-حالة-بالكود-ومراقبة-شاملة","alojar-gatus-en-un-vps","Self-host Gatus on a VPS: config-as-code status page and checks","Deploy Gatus on your ServOrbit VPS: a public status page plus HTTP, TCP, DNS, ICMP and TLS-expiry checks from one YAML file, with 40+ alert integrations.",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-on-a-vps-llm-observability-no-saas-bill",{"fr":203,"en":201,"ar":204,"es":205},"self-host-langfuse-vps","استضافة-langfuse-على-vps-مراقبة-llm-بلا-فاتورة-saas","alojar-langfuse-en-un-vps","Self-Host Langfuse on a VPS: LLM Observability, No SaaS Bill","Self-host Langfuse on a VPS — trace every AI call, evaluate prompts, track LLM costs. Full guide: installation, nginx, TLS, Python\u002FJS SDK integration, troubleshooting.",11,"2026-07-12T00:00:00+00:00",{"id":191,"name":211,"slug":212,"color":213,"icon":214},"Artificial Intelligence","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":219,"appSlug":220},"artificial-intelligence","langfuse",true,1794270407695]