- Python 91.3%
- HTML 7.5%
- Shell 0.7%
- PLpgSQL 0.2%
- JavaScript 0.2%
fix: drop issue_id FK constraints on partitioned tables See merge request glitchtip/glitchtip-backend!2230 |
||
|---|---|---|
| .vscode | ||
| .zed | ||
| apps | ||
| assets/images | ||
| benchmarks | ||
| bin | ||
| bitfield | ||
| docs/ai | ||
| events/test_data | ||
| glitchtip | ||
| integration_tests | ||
| monitoring/prometheus | ||
| psql_partition | ||
| scripts | ||
| sentry | ||
| templates | ||
| test_api | ||
| uploads | ||
| .dockerignore | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .pre-commit-config.yaml | ||
| .pylintrc | ||
| AGENTS.md | ||
| AI_POLICY.md | ||
| CHANGELOG | ||
| CLAUDE.md | ||
| compose.cold-volume.yml | ||
| compose.e2e.no-valkey.yml | ||
| compose.e2e.web-worker.yml | ||
| compose.e2e.yml | ||
| compose.locust.yml | ||
| compose.metrics.yml | ||
| compose.minio.yml | ||
| compose.yml | ||
| CONTRIBUTING.md | ||
| Dockerfile | ||
| healthcheck.py | ||
| LICENSE | ||
| locustfile.py | ||
| Makefile | ||
| manage.py | ||
| NOTICE.md | ||
| pyproject.toml | ||
| README.md | ||
| renovate.json | ||
| uv.lock | ||
| vulture_whitelist.py | ||
GlitchTip Backend
GlitchTip is an open source, Sentry API compatible error tracking platform. It is a partial fork/mostly re-implementation of Sentry's open source codebase before it went proprietary. Its goals are to be a modern, easy-to-develop error tracking platform that respects your freedom to use it any way you wish. Some differences include:
- A modern development environment with Python 3, Django 6, async, and types.
- Simplicity over features. We use Postgres to store error data. Our code base is a fraction of the size of Sentry and looks like a typical Django app. We leverage existing open source Django ecosystem apps whenever possible.
- Lightweight - GlitchTip runs with as little as 512MB of ram. We use PostgreSQL. Valkey is optional improved performance.
- Respects your privacy. No massive JS bundles. No invasive tracking. No third party spying. Our marketing site runs the privacy-focused Plausible analytics. Self hosted GlitchTip will never report home. We will never know if you run it yourself.
- Commitment to open source. We use open source tools like GitLab whenever possible. With our MIT license, you can use it for anything you'd like and even sell it. We believe in competition and hope you make GlitchTip even better.
GlitchTip is a stable platform used in production environments for several years.
Developing
We use Docker for development. View our Contributing documentation if you'd like to help make GlitchTip better. See API Documentation
Run local dev environment
This repo is the backend API only. To get a working web UI, you also need the
GlitchTip Frontend.
Without the frontend, you will see TemplateDoesNotExist errors when opening the site in a browser.
- Ensure docker and docker-compose are installed
- Execute
docker compose up(ormake start) - Execute
docker compose run --rm web ./manage.py migrate(ormake migrate) - Clone and run the frontend with
npm start— it proxies API requests to the backend automatically
Run tests with docker compose run --rm web ./manage.py test (or make test) and see the logs with
docker compose logs -ft (or make logs).
Execute make help for more shortcuts.
Run HTTPS locally for testing FIDO2 keys
cp compose.yml compose.override.yml- Edit the override file and set
command: ./manage.py runsslserver 0.0.0.0:8000 - Restart docker compose services
Run with advanced partitioning
Using pg_partman requires the extension to be installed in postgres.
compose.part.yml offers an alternative image. Switching between advanced and default partitioning is not supported.
Execute the containers by running:
docker compose -f compose.yml -f compose.part.yml up
# or: make partman-start
This automatically configures pg_partman but you can update it manually with ./manage.py setup_advanced_partitions.
Default partitioning uses DATE partitions managed by Django. Advanced partitioning uses nested ORG_ID HASH > DATE
partitions managed by pg_partman.
Load testing
We use Locust to load test. It's built into the dev dependencies.
First, set the env var IS_LOAD_TEST to true in compose.yml, then run:
docker compose -f compose.yml -f compose.locust.yml up
# or: make locust-start
Now go to localhost:8089 to run the test.
Note: Locust will not be installed to production docker images and cannot be run from them.
Memory profiling
Use memray to profile. For example we can profile celery beat (bin/run-beat.sh) with
exec memray run /usr/local/bin/celery -A glitchtip beat -s /tmp/celerybeat-schedule -l info --pidfile=
Then run memray flamegraph file.bin on the above file output.
Observability metrics with Prometheus
- Edit
monitoring/prometheus/prometheus.ymland set credentials to a GlitchTip auth token - Execute
docker compose -f compose.yml -f compose.metrics.yml up
GCP Logging
In order to enable json logging, set the environment as follows::
DJANGO_LOGGING_HANDLER_CLASS=google.cloud.logging_v2.handlers.ContainerEngineHandler
UWSGI_LOG_ENCODER='json {"severity":"info","timestamp":${unix},"message":"${msg}"}}'
Acknowledgements
- Thank you to the Sentry team for their ongoing open source SDK work and formerly open source backend of which this project is based on.
- We use gitter for our public gitter room
- Plausible Analytics is used for analytics
- Django - no other web framework is as feature complete
- django-ninja/Pydantic - brings typed and async-first api design