Sentry 是一个免费和开源的错误跟踪平台,可以实时监控和修复崩溃。它使软件开发人员能够看到重要的东西,更快地解决问题,并不断了解他们的应用程序。这个平台提供了对生产部署的实时洞察力,并提供了重现和修复崩溃的信息。Sentry 支持所有主要的语言和框架,并与你喜欢的应用程序和服务集成。
1. 前提条件 一台运行 Ubuntu 22.04 的服务器。 一个有效的域名被指向你的服务器 IP。 在你的服务器上配置了一个根密码。 2. 硬件配置要求 安装 self-hosted sentry 需要的硬件配置取决于您的应用程序的大小和复杂性。以下是一些一般建议:
CPU: 至少 2 核。如果您的应用程序非常复杂,则需要更多核。 内存: 至少 4GB。如果您的应用程序生成大量日志,则需要更多内存。 存储: 至少 20GB。如果您的应用程序生成大量日志,则需要更多存储空间。 网络: 至少 100Mbps。如果您的应用程序生成大量日志,则需要更高的网络带宽。
以下是一些具体的配置建议:
对于小型应用程序(<100 个用户), 您可以使用以下配置:
CPU:2 核 内存:4GB 存储:20GB 网络:100Mbps 对于中型应用程序(100-1,000 个用户), 您可以使用以下配置:
CPU:4 核 内存:8GB 存储:60GB 网络:500Mbps 对于大型应用程序(>1,000 个用户), 您可以使用以下配置:
CPU:8 核 内存:16GB 存储:120GB 网络:1Gbps 可以根据需要调整这些建议。例如,如果希望 sentry 能够处理更高的并发连接,则需要更多的 CPU 和内存。如果希望 sentry 能够存储更长时间的日志,则需要更多的存储空间。
您可以使用 Sentry 提供的 性能指南 来帮助您确定适合您应用程序的硬件配置。
3. 环境 本教程实验环境
Ubuntu 22.04.1 Docker 24.0.5 Docker-Compose 2.22.0 Sentry 23.11.0
3.1. 安装所需的依赖项 在开始之前,建议将你的软件包更新到最新版本。你可以用以下命令来更新它们:
配置国内的镜像源, 并更新.
如果您以前安装过 containerd 或 runc,请卸载它们以避免与 Docker Engine 捆绑的版本发生冲突。
运行以下命令卸载所有冲突的程序包:
1 2 3 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg ; done
一旦你的系统被更新,用下面的命令安装所有需要的软件包:
1 sudo apt-get install curl git build-essential apt-transport-https ca-certificates software-properties-common gnupg -y
3.2. 安装 Docker 和 Docker Compose 默认情况下,最新版本的 Docker 和 Docker Compose 包在 Ubuntu 22.04 的默认软件库中是不可用的。所以你需要在 APT 中添加 Docker 官方仓库。
首先,用以下命令下载并添加 Docker GPG 密钥:
1 2 3 4 5 6 sudo install -m 0755 -d /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg
接下来,用下面的命令添加 Docker 存储库:
1 2 3 4 5 6 echo \ "deb [arch=" $(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ " $(. /etc/os-release && echo "$VERSION_CODENAME " )" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
一旦版本库被添加,用以下命令更新版本库缓存。
接下来,用下面的命令安装 Docker 和 Docker Compose。
1 2 3 4 5 6 7 8 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginapt-cache madison docker-ce | awk '{ print $3 }' VERSION_STRING=5:24.0.0-1~ubuntu.22.04~jammy sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
配置镜像加速
1 2 3 4 5 6 7 sudo echo -e \"{ \n" \" \"registry-mirrors\": [\"https://<你的ID>.mirror.aliyuncs.com\"], \n" \" \"live-restore\": true,\n" \" \"debug\": true\n" \"}" | sudo tee /etc/docker/daemon.json > /dev/null
安装 docker-compose
1 2 3 4 5 sudo curl -L https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-composesudo chmod +x /usr/bin/docker-compose
如果下载速度太慢, 可以通过一台可以快速访问 github 的电脑手动下载 docker-compose, 然后上传至服务器.
查看 docker 和 docker-compose 版本信息
1 2 3 4 $ docker -v Docker version 24.0.7, build afdd53b
1 2 3 $ docker-compose -v Docker Compose version v2.22.0
查看镜像配置是否成功
如果镜像仓库显示有如下内容,则配置成功。
1 2 3 4 Registry Mirrors: https://your_id.mirror.aliyuncs.com/ Live Restore Enabled: false
安装好这两个软件包后,用以下命令启动 Docker 服务并使其在系统重启时启动:
1 2 sudo systemctl start dockersudo systemctl enable docker
现在你可以用下面的命令来验证 Docker 的状态:
1 sudo systemctl status docker
你应该得到以下输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-01-10 04:37:27 UTC; 5s ago TriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 45847 (dockerd) Tasks: 8 Memory: 29.1M CPU: 220ms CGroup: /system.slice/docker.service ??45847 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Jan 10 04:37:26 vultr dockerd[45847]: time="2023-01-10T04:37:26.903435377Z" level=info msg="scheme \"unix\" not registered, fallback to defau> Jan 10 04:37:26 vultr dockerd[45847]: time=" 2023-01-10T04:37:26.903453803Z" level=info msg=" ccResolverWrapper: sending update to cc: {[{unix:>Jan 10 04:37:26 vultr dockerd[45847]: time="2023-01-10T04:37:26.903464761Z" level=info msg="ClientConn switching balancer to \"pick_first\"" > Jan 10 04:37:26 vultr dockerd[45847]: time="2023-01-10T04:37:26.916581613Z" level=info msg="Loading containers: start." Jan 10 04:37:26 vultr dockerd[45847]: time="2023-01-10T04:37:26.997807510Z" level=info msg="Default bridge (docker0) is assigned with an IP a> Jan 10 04:37:27 vultr dockerd[45847]: time=" 2023-01-10T04:37:27.060381720Z" level=info msg=" Loading containers: done ." Jan 10 04:37:27 vultr dockerd[45847]: time=" 2023-01-10T04:37:27.074467014Z" level=info msg=" Docker daemon" commit=20.10.12-0ubuntu4 graphdriv> Jan 10 04:37:27 vultr dockerd[45847]: time=" 2023-01-10T04:37:27.074649813Z" level=info msg=" Daemon has completed initialization" Jan 10 04:37:27 vultr systemd[1]: Started Docker Application Container Engine. Jan 10 04:37:27 vultr dockerd[45847]: time=" 2023-01-10T04:37:27.092699576Z" level=info msg=" API listen on /run/docker.sock"
3.3. 安装 Sentry 首先,使用以下命令从 Git 仓库下载最新版本的 Sentry:
1 git clone https://github.com/getsentry/self-hosted.git
下载完成后,将目录改为下载的目录,并运行 Sentry 安装脚本,开始安装。
vi ~/self-hosted/.env
将 event 保留时间修改成 90 天, 默认是 30 天
1 2 COMPOSE_PROJECT_NAME=sentry-self-hosted SENTRY_EVENT_RETENTION_DAYS=30
1 2 3 4 5 6 7 8 9 10 11 12 cd self-hostedgit checkout 23.10.1 sudo ./install.sh --no-report-self-hosted-issues --skip-user-creationdocker-compose --ansi never run --rm web createuser --force-update --superuser --email user@example.com --password secret
自托管监控
当运行./install.sh 时,您可以选择加入或退出 sentry 官方的监控。此监控用于开发和调试目的,以便我们能够掌握您面临的问题,从而使我们能够提供更加无缝的安装过程。
请注意,从 22.11.0 版本开始,选择是否发送错误将成为强制要求。
在安装过程中,你会被要求创建一个管理员账户,如下图所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Here's the info we may collect: - OS username - IP address - install log - runtime errors - performance data Thirty (30) day retention. No marketing. Privacy policy at sentry.io/privacy. Would you like to create a user account now? [Y/n]: y Email: Email: your_email@xxx.com Password: Repeat for confirmation: Added to organization: sentry User created: your_email@xxx.com Creating missing DSNs Correcting Group.num_comments counter ----------------------------------------------------------------- You' re all done ! Run the following command to get Sentry running: docker-compose up -d -----------------------------------------------------------------
接下来,使用以下命令验证所有下载的镜像。
你应该看到以下输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 REPOSITORY TAG IMAGE ID CREATED SIZE vroom-cleanup-self-hosted-local latest ea9a97a173e4 8 hours ago 119MB symbolicator-cleanup-self-hosted-local latest ddf3f91711b9 8 hours ago 139MB sentry-cleanup-self-hosted-local latest 3f649c2adb51 8 hours ago 1.04GB <none> <none> e6275ee189a4 8 hours ago 1.04GB <none> <none> ffb03d72b02c 8 hours ago 1.04GB sentry-self-hosted-local latest 7e021f899f9d 8 hours ago 1.04GB <none> <none> 7e93f5ff254c 8 hours ago 1.04GB <none> <none> cfb9b6b7e493 8 hours ago 1.04GB <none> <none> b25501401a89 8 hours ago 1.04GB <none> <none> 83f5784ea774 8 hours ago 1.04GB <none> <none> a25a2fe8d5dd 8 hours ago 1.04GB <none> <none> 247203428a29 8 hours ago 1.04GB <none> <none> b317e37159df 8 hours ago 1.04GB <none> <none> acb9c8ac94a4 8 hours ago 1.04GB <none> <none> 8798646a9a6e 8 hours ago 1.04GB <none> <none> eeb84b793191 8 hours ago 1.04GB <none> <none> 33786daa04f9 8 hours ago 1.04GB <none> <none> e9207519f5ea 8 hours ago 1.04GB <none> <none> 5a6bc83fb1d5 8 hours ago 1.04GB <none> <none> 284a0389a802 8 hours ago 1.04GB <none> <none> 01822573c6da 8 hours ago 1.04GB <none> <none> 863ad8d9962c 8 hours ago 1.04GB sentry-self-hosted-jq-local latest 802ce2121fdc 9 hours ago 76.8MB getsentry/sentry nightly fab0bb9cf072 17 hours ago 1.04GB getsentry/relay nightly da690b7dffe9 2 days ago 277MB getsentry/snuba nightly 58aa2f0ddbd0 2 days ago 1.08GB getsentry/vroom nightly 4248c1746c67 2 days ago 118MB debian bookworm-slim 8edcf5b83723 11 days ago 74.8MB getsentry/symbolicator nightly 29b78918bd5a 2 weeks ago 137MB nginx 1.25.2-alpine 661daf9bcac8 3 weeks ago 42.6MB getsentry/sentry-cli latest 329fdf92d508 2 months ago 27.3MB busybox latest a416a98b71e2 3 months ago 4.26MB ghcr.io/maxmind/geoipupdate v6.0.0 3fdbd1ffd226 4 months ago 15.5MB redis 6.2.13-alpine 529fcf955ad4 4 months ago 28MB memcached 1.6.21-alpine 2db2248e0a53 4 months ago 10.3MB postgres 14.5 cefd1c9e490c 12 months ago 376MB tianon/exim4 latest a56a3348ddb1 21 months ago 158MB clickhouse-self-hosted-local latest 79441da6ab2b 22 months ago 706MB confluentinc/cp-kafka 5.5.7 b362671f2bc0 22 months ago 737MB confluentinc/cp-zookeeper 5.5.7 22b646e1afd0 22 months ago 737MB curlimages/curl 7.77.0 e062233fb4a9 2 years ago 8.26MB
3.4. 启动 Sentry 容器 在这一点上,Sentry 已经安装完毕。现在你可以使用以下命令启动 Sentry 容器:
1 2 3 4 sudo docker-compose up -dsudo docker-compose down
这将启动 Sentry 的所有容器,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Starting sentry_onpremise_memcached_1 ... done Starting sentry_onpremise_redis_1 ... done Starting sentry_onpremise_symbolicator_1 ... done Creating sentry_onpremise_symbolicator-cleanup_1 ... done Starting sentry_onpremise_zookeeper_1 ... done Starting sentry_onpremise_clickhouse_1 ... done Starting sentry_onpremise_smtp_1 ... done Starting sentry_onpremise_postgres_1 ... done Starting sentry_onpremise_kafka_1 ... done Starting sentry_onpremise_snuba-consumer_1 ... done Starting sentry_onpremise_snuba-outcomes-consumer_1 ... done Starting sentry_onpremise_snuba-api_1 ... done Starting sentry_onpremise_snuba-sessions-consumer_1 ... done Starting sentry_onpremise_snuba-replacer_1 ... done Creating sentry_onpremise_snuba-cleanup_1 ... done Creating sentry_onpremise_relay_1 ... done Creating sentry_onpremise_web_1 ... done Creating sentry_onpremise_post-process-forwarder_1 ... done Creating sentry_onpremise_cron_1 ... done Creating sentry_onpremise_sentry-cleanup_1 ... done Creating sentry_onpremise_worker_1 ... done Creating sentry_onpremise_ingest-consumer_1 ... done Creating sentry_onpremise_nginx_1 ... done
你可以使用下面的命令验证所有容器的状态。
访问 Sentry Web UI
此时,Sentry 已经启动,并在 9000 端口上监听。现在,打开你的网页浏览器,输入网址http://your-server-ip:9000 ,访问 Sentry 仪表板。你将会被转到 Sentry 的登录页面.
4. 准备一个 nginx,并配置 https,将其转发到 sentry 主机的 9000 端口即可 安装 nginx 可以参考我的文章nginx 安装教程
5. 配置 DNS 添加一条新的 DNS A 记录例如 sentry_host.your_domain.com 指向公网 ip
6. 配置 nginx 修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 server { listen 80 ; server_name sentry_host.your_domain.com; rewrite ^(.*)$ https://$host $1 permanent ; } server { listen 443 ; server_name sentry_host.your_domain.com; ssl on ; ssl_certificate /etc/nginx/ssl/sentry_host.your_domain.com.pem; ssl_certificate_key /etc/nginx/ssl/sentry_host.your_domain.com.key; location /admin { return 404 ; } location / { proxy_set_header Host $host ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_pass http://sentry_host_ip:9000/; } }
7. 如何打扫数据 vi ~/self-hosted/docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 environment: PYTHONUSERBASE: "/data/custom-packages" SENTRY_CONF: "/etc/sentry" ..... SENTRY_EVENT_RETENTION_DAYS: 7 SENTRY_MAIL_HOST: SENTRY_MAX_EXTERNAL_SOURCEMAP_SIZE: OPENAI_API_KEY:
重启Sentry
1 sudo docker-compose down & sudo docker-compose up -d
参考: How Sentry is cleaned up correctly
8. troubleshooting 1 2 3 4 RUN echo 'deb http://mirrors.aliyun.com/debian-archive/debian stretch main contrib non-free\n\ deb http://mirrors.aliyun.com/debian-archive/debian stretch-proposed-updates main contrib non-free\n\ deb http://mirrors.aliyun.com/debian-archive/debian-security/ stretch/updates main contrib non-free\n' \> /etc/apt/sources.list