Logs is Now Available for Self-Hosted! 🪵🪵
Logs is now available for self-hosted deployments! To properly enable it on your instance, you'll need to update your sentry.conf.py
to match the example one – this step is essential for functionality.
ClickHouse Upgrade to 25.3
We've upgraded ClickHouse to 25.3, which should resolve that persistent connection closed prematurely error from Snuba consumers. We've confirmed it was a ClickHouse issue rather than Snuba's. As a standard precaution, please ensure you back up your server before upgrading – it's always the right move.
Updated Memory Requirements
We've had to increase the minimum requirements to 16 GB of swap file. That brings us to 32 GB total memory (16 GB physical RAM + 16 GB swap). If you're handling significant traffic though, you're likely already running well above these specifications.
PGBouncer Integration
We've integrated PGBouncer into the Docker Compose stack to better manage Postgres connections. The install script will handle your sentry.conf.py
updates automatically. For non-interactive-TTY users, please set the environment variable SKIP_USER_PROMPT=1
.
SeaweedFS for Nodestore (Opt-in)
We're introducing SeaweedFS with its S3-compatible API for storing Nodestore data. This is opt-in, and you'll see a prompt during installation, similar to PGBouncer.
For context: Nodestore manages raw events data, which can become substantial with high event volumes. Previously, self-hosted deployments stored this in Postgres (which we acknowledge wasn't ideal), while SaaS uses Google BigTable. We believe SeaweedFS provides a practical middle-ground solution.
Good news: you won't lose your existing event details from Postgres until the retention period passes, and there's no need to migrate your Nodestore data from Postgres to S3. We've included write_through
, read_through
, and delete_through
options for passing operations to Nodestore data in Postgres – these default to True
for new installations. After 90 days, we recommend setting these options to False
. Learn more: https://github.com/stayallive/sentry-nodestore-s3#installation
Enhanced Security Defaults
SENTRY_DISALLOWED_IPS
in sentry.conf.py
now includes more secure defaults. This enhancement prevents Sentry from making outbound connections to private/internal IPs in integration and webhook requests. If your integrations or webhooks require access to internal addresses, you can safely override this setting.
Taskbroker & Taskworker Replace Celery
Taskbroker & taskworker are now enabled to replace Celery – eliminating the outdated RabbitMQ and reducing Redis memory consumption. Please remove any options disabling taskbroker in your sentry.conf.py
. Next month, we'll be retiring the cron
and worker
containers as planned.
Other Notable Changes
- New feature flags: We've added several new feature flags to
sentry.conf.example.py
– please ensure these are included in yoursentry.conf.py
. Some of these flags indicate we're transitioning the Insights page to use theeap
dataset instead of the legacymetrics
dataset. - Air-gapped support: For air-gapped environments, please add
SENTRY_AIR_GAP = True
to yoursentry.conf.py
configuration. This ensures no unwanted outgoing HTTP calls are made to external services. - Vroom script fix: We've corrected an oversight in the Vroom
chmod
script that affected errors-only users. We've now properly addederrors-only
to the integration test matrix for both AMD64 and ARM64, ensuring full coverage going forward. - Dependency updates: We've updated patch versions for self-hosted dependencies (Postgres, Redis, and Kafka). Nginx received a minor version bump to the latest stable release, which maintains full compatibility.
Questions or need to discuss these changes? Join us on Sentry's Discord! We're always happy to help and discuss your setup.
Various fixes & improvements
- fix: able to setup nodestore multiple times (#3940) by @aldy505
- build(deps): bump actions/create-github-app-token from 2.1.1 to 2.1.4 (#3936) by @dependabot
- docs: provide information for SENTRY_AIR_GAP flag on Django config file (#3935) by @aldy505
- feat: Use S3 node store with seaweedfs (#3498) by @BYK
- feat(tasks): Remove taskworker option override and add worker healthcheck (#3933) by @markstory
- feat: install script to migrate sentry.conf.py config to use pgbouncer (#3898) by @aldy505
- chore(deps): bump clickhouse to 25.3 (#3878) by @aldy505
- feat: enable
issue-views
flag (#3922) by @aldy505 - feat: query against
eap
dataset instead ofmetrics
dataset for spans (#3923) by @aldy505 - build(deps): bump actions/setup-python from 5 to 6 (#3927) by @dependabot
- Add restart policy to pgbouncer service (#3925) by @frederikspang
- fix(tests): skip logs event test for errors-only (#3915) by @aldy505
- Improve nginx depends_on policy (#3914) by @aminvakil
- test: run errors-only integration tests (#3910) by @aldy505
- feat: enable Logs feature (#3912) by @aldy505
- fix: ensuring vroom permission should be skipped on errors-only (#3911) by @aldy505
- chore(deps): bump patches version (#3879) by @aldy505
- Revert "increase postgres max_connections above 100 connections (#2740)" (#3899) by @aminvakil
- Add pgbouncer (#3884) by @frederikspang
- chore: resolve GHA code scanning alerts (#3889) by @aldy505
- fix(enhancement): search for permissions on docker container instead of host and combine it in one command for performance enhancement (#3890) by @LvckyAPI
- build(deps): bump actions/create-github-app-token from 2.1.0 to 2.1.1 (#3885) by @dependabot
- build(deps): bump actions/checkout from 4 to 5 (#3883) by @dependabot