How rehansxcbom/fastapi-observability works
This repository is a containerized FastAPI observability demo: clients submit metrics or exercise instrumented endpoints; the application stores metric records in TimescaleDB and emits telemetry for collection and exploration. The principal ingestion flow is client → FastAPI → TimescaleDB, with separate traces/metrics and container-log paths into Tempo, Prometheus, and Loki, then Grafana. The excerpts establish application behavior, while the README documents the broader stack; configuration files are represented as service nodes, not as inspected runtime code.
Main entry points: main.py FastAPI API · datasources.yaml Grafana · otel-collector-config.yaml OTel Collector · config.alloy Alloy Log Agent
Components 13
Application
- FastAPI API
main.py - Request Metrics
main.py - Metric Ingestion
main.py - TimescaleDB
Telemetry Collection
- OpenTelemetry SDK
main.py - OTel Collector
etc/otel-collector/otel-collector-config.yaml - Alloy Log Agent
etc/alloy/config.alloy
Observability Backends
- Tempo Traces
etc/tempo/tempo.yml - Prometheus Metrics
etc/prometheus/prometheus.yml - Loki Logs
etc/loki/loki.yml
Visualization
- Grafana
etc/grafana/provisioning/datasources/datasources.yaml - Dashboards
etc/grafana/provisioning/dashboards
Other components
- API Client
Connections 17
- API Client → FastAPI API: sends HTTP
- FastAPI API → Metric Ingestion: dispatches metric routes
- Metric Ingestion → TimescaleDB: writes records
- FastAPI API → Request Metrics: records requests
- Request Metrics → TimescaleDB: writes asynchronously
- FastAPI API → TimescaleDB: initializes schema
- FastAPI API → OpenTelemetry SDK: emits telemetry
- OpenTelemetry SDK → OTel Collector: exports OTLP
- OTel Collector → Tempo Traces: exports traces
- OTel Collector → Prometheus Metrics: exports metrics
- FastAPI API → Alloy Log Agent: writes container logs
- Alloy Log Agent → Loki Logs: pushes logs
- Grafana → Tempo Traces: queries traces
- Grafana → Prometheus Metrics: queries metrics
- Grafana → Loki Logs: queries logs
- Grafana → TimescaleDB: queries SQL
- Dashboards → Grafana: provisions dashboards