Sentry 自托管:Docker 部署实战与监控配置

张开发
2026/4/21 14:46:20 15 分钟阅读

分享文章

Sentry 自托管:Docker 部署实战与监控配置
1. 为什么选择Docker部署Sentry如果你正在寻找一个强大的错误监控工具Sentry绝对是个不错的选择。它不仅能帮你捕获应用程序中的异常还能提供详细的堆栈跟踪和环境信息。而使用Docker来部署Sentry可以说是最省心省力的方式了。我经历过从源码编译安装到各种依赖问题的折磨最终发现Docker部署才是王道。Docker部署最大的优势在于环境隔离。Sentry本身依赖PostgreSQL、Redis、ClickHouse等多个服务手动部署很容易出现版本冲突。用Docker的话所有服务都在独立的容器中运行互不干扰。官方提供的self-hosted仓库已经帮我们配置好了所有服务的最佳组合一键部署就能获得生产级可用的Sentry服务。我在实际项目中遇到过这样的情况团队需要在三天内搭建完整的监控系统。如果采用传统部署方式光是解决各个服务的依赖关系就够头疼了。而使用Docker方案我们只用了不到两小时就完成了从部署到接入第一个应用的全过程。这种效率提升对于需要快速搭建监控系统的团队来说简直是救星。2. 环境准备Windows和Linux双攻略2.1 Windows用户的WSL2配置虽然Docker可以在Windows上原生运行但我强烈建议Windows用户使用WSL2作为开发环境。这不仅因为Linux环境下Docker性能更好还因为很多部署脚本都是为Linux设计的。下面是我在Windows 11上配置WSL2的完整过程首先需要确保系统满足最低要求Windows 10版本2004或更高内部版本19041或者Windows 11。然后以管理员身份打开PowerShell执行以下命令wsl --install -d Ubuntu这个命令会自动完成三件事启用WSL功能、安装Ubuntu发行版、并设置为WSL2版本。安装完成后你会在开始菜单看到Ubuntu应用。首次启动时会要求创建UNIX用户这个用户不需要和Windows用户名相同。我遇到过的一个常见问题是WSL版本不对。可以通过以下命令检查和设置wsl -l -v # 查看已安装的发行版及其WSL版本 wsl --set-version Ubuntu 2 # 确保使用WSL2 wsl --set-default-version 2 # 设置默认版本为WSL22.2 Docker引擎的安装与验证无论使用Windows还是LinuxDocker都是必须的。对于WSL2用户我推荐直接在Ubuntu中安装Docker引擎而不是使用Docker Desktop。这样性能更好也更接近生产环境。以下是安装步骤# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置仓库 echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin安装完成后验证Docker是否正常工作sudo docker run hello-world为了避免每次都要加sudo可以把当前用户加入docker组sudo usermod -aG docker $USER newgrp docker # 立即生效3. 部署Sentry self-hosted仓库3.1 获取官方部署脚本Sentry官方已经把onpremise仓库更名为self-hosted这个仓库包含了完整的Docker Compose配置和安装脚本。我建议在用户主目录下创建工作目录mkdir -p ~/projects/sentry cd ~/projects/sentry git clone https://github.com/getsentry/self-hosted.git cd self-hosted这个仓库有几个关键文件需要注意docker-compose.yml定义了所有服务的配置install.sh自动化安装脚本.env环境变量配置文件3.2 解决常见权限问题第一次运行install.sh时很可能会遇到权限问题。最常见的错误是permission denied while trying to connect to the Docker daemon socket这是因为当前用户没有权限访问Docker socket。解决方法有三种使用sudo运行脚本不推荐可能导致文件权限问题确保用户已加入docker组前面已经介绍直接修改socket权限临时方案sudo chmod 666 /var/run/docker.sock我建议采用第二种方法因为它最安全也最持久。如果已经加入docker组但仍然报错可以尝试注销重新登录或者重启WSLwsl --shutdown3.3 执行部署命令一切准备就绪后运行安装脚本./install.sh这个脚本会做以下几件事检查Docker和Docker Compose是否可用拉取所有必要的镜像这可能会花费较长时间取决于网络速度创建并启动所有服务容器在部署过程中你可能会看到大量日志输出这是正常的。所有服务启动完成后可以通过http://localhost:9000访问Sentry Web界面。4. 初始配置与用户管理4.1 创建超级用户与旧版本不同新版的self-hosted部署默认不会创建管理员用户。我们需要手动创建docker compose run --rm web createuser --email adminexample.com --password yourpassword --superuser这里有几个参数需要注意--email管理员邮箱用于登录和接收通知--password密码建议设置强密码--superuser赋予超级管理员权限创建成功后就可以用这个账号登录Sentry了。我建议至少创建两个管理员账号以防主账号丢失时能有备用方案。4.2 基本系统配置首次登录后有几个关键配置需要立即设置组织名称这将是所有项目的顶级命名空间选择简洁明了的名称语言和时区在用户设置中切换为中文和上海时区Asia/Shanghai邮件设置Sentry需要发送告警邮件修改.env文件中的邮件配置SENTRY_EMAIL_HOSTsmtp.example.com SENTRY_EMAIL_USERuserexample.com SENTRY_EMAIL_PASSWORDyourpassword SENTRY_SERVER_EMAILfromexample.com SENTRY_EMAIL_PORT587 SENTRY_EMAIL_USE_TLStrue修改配置后需要重启服务docker compose down docker compose up -d4.3 监控第一个应用现在Sentry已经准备就绪让我们创建一个演示项目在控制台点击创建项目选择对应的平台如Python、JavaScript等按照指引安装SDK并发送测试错误以Python为例安装SDKpip install sentry-sdk然后在代码中初始化import sentry_sdk sentry_sdk.init( dsn你的DSN地址, traces_sample_rate1.0, )故意制造一个错误def divide(x, y): return x / y divide(1, 0) # 这将触发ZeroDivisionError几秒钟后你就能在Sentry控制台看到这个错误了。点击错误可以看到完整的堆栈跟踪、调用参数、环境变量等信息。5. 生产环境优化建议5.1 数据持久化配置默认情况下Sentry的数据存储在容器内部的卷中。为了确保数据安全我们应该配置外部存储创建数据目录mkdir -p ~/sentry-data/{postgres,redis,clickhouse,sentry}修改docker-compose.yml将卷映射到主机目录services: postgres: volumes: - ~/sentry-data/postgres:/var/lib/postgresql/data redis: volumes: - ~/sentry-data/redis:/data clickhouse: volumes: - ~/sentry-data/clickhouse:/var/lib/clickhouse sentry: volumes: - ~/sentry-data/sentry:/data5.2 性能调优随着错误量的增加你可能需要调整一些参数工作进程数在.env中增加SENTRY_WORKERS4 # 根据CPU核心数调整内存限制在docker-compose.yml中为关键服务设置资源限制services: sentry: deploy: resources: limits: cpus: 2 memory: 2G定期清理设置定时任务清理旧数据docker compose run --rm web cleanup --days 30 # 保留30天数据5.3 备份与恢复策略生产环境必须考虑备份方案。以下是简单的备份脚本#!/bin/bash BACKUP_DIR~/sentry-backups/$(date %Y%m%d) mkdir -p $BACKUP_DIR # 备份PostgreSQL docker compose exec postgres pg_dump -U postgres sentry $BACKUP_DIR/sentry.sql # 备份Redis docker compose exec redis redis-cli save cp ~/sentry-data/redis/dump.rdb $BACKUP_DIR/ # 备份ClickHouse docker compose exec clickhouse clickhouse-client --queryBACKUP DATABASE default TO Disk(backup, sentry_backup)恢复时可以按照相反的顺序操作。我建议至少每周执行一次完整备份并将备份文件复制到其他服务器。6. 常见问题排查6.1 服务启动失败如果某些容器无法启动首先检查日志docker compose logs service_name # 如postgres、redis等常见问题包括端口冲突确保9000、9001端口未被占用磁盘空间不足Docker需要足够的空间存储镜像和容器内存不足Sentry至少需要4GB内存才能稳定运行6.2 邮件发送失败如果收不到告警邮件检查以下几点确认.env中的邮件配置正确检查Sentry容器的日志docker compose logs sentry | grep email测试SMTP服务器是否可用docker compose exec sentry bash python -m smtplib -s -d smtp.example.com:5876.3 性能问题如果Sentry响应变慢可以增加工作进程数优化数据库查询docker compose exec postgres psql -U postgres sentry -c CREATE INDEX CONCURRENTLY IF NOT EXISTS event_message_idx ON sentry_message (message);考虑分离服务将数据库部署到独立服务器7. 进阶配置技巧7.1 集成第三方通知除了邮件Sentry还支持多种通知渠道。以Slack为例在Slack中创建Incoming Webhook在Sentry设置中添加Slack集成为项目配置告警规则我建议为关键错误设置即时通知普通错误可以设置每日摘要。7.2 自定义错误过滤有些错误可能不需要监控可以在初始化SDK时配置sentry_sdk.init( dsn你的DSN地址, before_sendlambda event, hint: None if ignored in event.get(message, ) else event )也可以在Sentry控制台设置全局过滤规则比如忽略特定HTTP状态码的错误。7.3 追踪性能指标Sentry不仅捕获错误还能监控性能。启用APM功能sentry_sdk.init( dsn你的DSN地址, traces_sample_rate1.0, profiles_sample_rate1.0, )这样可以看到请求的完整调用链和各阶段耗时对于性能优化非常有帮助。

更多文章