服务器配置不能低于 4U 8G
Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题。它主要专注于持续集成、提高效率并且提升用户体验。Sentry 分为服务端和客户端 SDK,前者可以直接使用提供的在线服务,也可以本地自行搭建;后者提供了对多种主流语言和框架的支持,包括 React、Angular、Node、Django、RoR、PHP、Laravel、Android、.NET、JAVA 等。同时它可提供了和其他流行服务集成的方案,例如 GitHub、GitLab、bitbuck、heroku、slack、Trello 等。
Sentry 本身是基于 Django 开发的,而且也依赖到其他的如 Postgresql、 Redis 等组件,所以一般有两种途径进行安装:通过 Docker 或用 Python 搭建。官网下分别有以下的两个介绍:
如果你选择了通过 Docker 进行安装,其实还有更加便捷的方式 —— docker-compose 。在 github 上有一个开源项目用于部署 Sentry ,我们可以直接使用该项目进行部署,首先是克隆该项目:
地址 : https://github.com/getsentry/onpremise/

安装环境

安装 docker

  1. # 安装/更新 Docker
  2. $ yum remove docker docker-common docker-selinux docker-engine
  3. # 安装依赖
  4. $ yum install -y yum-utils device-mapper-persistent-data lvm2
  5. # 添加 docker yum 源
  6. $ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  7. # 官方源比较慢的话可以更换为 Aliyun 的源
  8. $ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  9. # 允许拓展最新的不稳定的repository
  10. $ yum-config-manager --enable docker-ce-edge
  11. # 安装docker
  12. # yum -y install docker-ce
  13. # 开机启动 & 启动 Docker
  14. $ systemctl enable docker
  15. $ systemctl start docker

安装 docker-composer
这里推荐使用 Python 的 pip3 管理工具来安装 docker-compose,
这里不推荐使用 pip, 因为这是 2.0 的包管理

  1. # 使用普通用户安装
  2. $ pip3 install --user -U docker-compose
  3. # 查看docker compose版本
  4. $ docker-compose version
  5. docker-compose version 1.29.2, build unknown
  6. docker-py version: 5.0.0
  7. CPython version: 3.6.8
  8. OpenSSL version: OpenSSL 1.0.2k-fips 26 Jan 2017
  9. # 查看 pip version
  10. $ pip3 -V
  11. pip 21.2.4 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

如果没有 pip, 则按照以下步骤安装 pip

  1. #上一条语句没有显示版本信息则运行下面语句安装 python-pip3
  2. $ yum -y install epel-release
  3. $ yum -y install python-pip
  4. #查看pip版本
  5. $ pip -v
  6. #pip进行升级
  7. $ pip install --upgrade pip
  8. #进行安装compose 第一条语句报错执行第二条,执行成功则跳过第二条
  9. $ pip install docker-compose
  10. $ pip install docker-compose --ignore-installed requests
  11. $ docker-compose -version

安装 senty 到 docker

克隆 sentry 并安装

  1. $ git clone https://github.com/getsentry/onpremise.git
  2. $ ./install.sh
  3. Checking minimum requirements...
  4. Removing network onpremise_default
  5. ...
  6. Created internal Sentry project (slug=internal, id=1)
  7. Would you like to create a user account now? [Y/n]: y
  8. Email: username@domain.com
  9. Password:
  10. Repeat for confirmation:
  11. User created: username@domain.com
  12. Added to organization: sentry
  13. Cleaning up...
  14. You're all done! Run the following command to get Sentry running:
  15. docker-compose up -d
  16. # docker images 检查安装结果
  17. $ docker images
  18. REPOSITORY TAG IMAGE ID CREATED SIZE
  19. symbolicator-cleanup-onpremise-local latest aa9f529b9bba 6 minutes ago 168MB
  20. sentry-cleanup-onpremise-local latest c8ce20926772 15 minutes ago 832MB
  21. snuba-cleanup-onpremise-local latest 899555aa0198 15 minutes ago 417MB
  22. sentry-onpremise-local latest 7b49912508f3 15 minutes ago 830MB
  23. getsentry/snuba latest c278520d8aa3 2 hours ago 415MB
  24. getsentry/sentry latest 5351ca5b79c7 3 hours ago 830MB
  25. getsentry/symbolicator latest 857ed4c4c3bb 15 hours ago 167MB
  26. getsentry/relay latest cf4553a1852c 15 hours ago 186MB
  27. busybox latest c7c37e472d31 3 days ago 1.22MB
  28. postgres 9.6 51e37c2850c7 3 weeks ago 200MB
  29. tianon/exim4 latest f077f7830685 3 weeks ago 176MB
  30. redis 5.0-alpine 58084f18c7ec 4 weeks ago 29.7MB
  31. alpine latest a24bb4013296 4 weeks ago 5.57MB
  32. nginx 1.16 dfcfd8e9a5d3 2 months ago 127MB
  33. confluentinc/cp-kafka 5.5.0 89e8e98718a8 2 months ago 598MB
  34. confluentinc/cp-zookeeper 5.5.0 124ff6469e3d 2 months ago 598MB
  35. yandex/clickhouse-server 19.17 f0fa9b979b63 4 months ago 435MB
  36. memcached 1.5-alpine 0dbf6b4c454b 4 months ago 9.19MB

创建项目的 superuser

  1. $ docker-compose run --rm web upgrade
  2. Starting sentry_onpremise_redis_1 ... done
  3. Starting sentry_onpremise_smtp_1 ... done
  4. ...
  5. Creating missing DSNs
  6. Correcting Group.num_comments counter
  7. 09:49:46 [INFO] sentry.plugins.github: apps-not-configured
  8. Email: 1222@qq.com
  9. Password:
  10. Repeat for confirmation:

创建账号和密码

  1. # 创建自己的用户, 根据提示输入邮箱和密码
  2. $ docker-compose run --rm web createuser
  3. Starting onpremise_smtp_1 ... done
  4. Starting onpremise_postgres_1 ... done
  5. Starting onpremise_redis_1 ... done
  6. Starting onpremise_memcached_1 ... done
  7. 09:49:39 [WARNING] sentry.utils.geo: settings.GEOIP_PATH_MMDB not configured.
  8. 09:49:46 [INFO] sentry.plugins.github: apps-not-configured
  9. Email: 1222@qq.com
  10. Password:
  11. Repeat for confirmation:
  12. Should this user be a superuser? [y/N]: y

生成 key 并设置

  1. $ docker-compose run --rm web config generate-secret-key
  2. # 编辑 .env 文件
  3. # 添加到 .env 的 SENTRY_SECRET_KEY 里面

启动 Docker Compose

  1. $ docker-compose up -d
  2. sentry_onpremise_smtp_1 is up-to-date
  3. ...
  4. Recreating sentry_onpremise_nginx_1 ... done

使用 docker ps 检查

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 7c86739e1904 nginx:1.16 "nginx -g 'daemon of…" 26 minutes ago Up 26 minutes 0.0.0.0:9080->80/tcp sentry_onpremise_nginx_1
  4. ...
  5. a85aff3465f8 redis:5.0-alpine "docker-entrypoint.s…" 47 minutes ago Up 39 minutes 6379/tcp sentry_onpremise_redis_1

这样在内网便可以访问

  1. # 由于没有开放 9080 端口到外网, 所以使用 wget 方式访问, 如果已经开放, 则直接访问 ip:9080 即可访问
  2. $ wget 127.0.0.1:9080
  3. --2020-07-03 10:30:24-- http://127.0.0.1:9080/
  4. 正在连接 127.0.0.1:9080... 已连接。
  5. 已发出 HTTP 请求,正在等待回应... 302 Found
  6. 位置:/auth/login/ [跟随至新的 URL]
  7. --2020-07-03 10:30:25-- http://127.0.0.1:9080/auth/login/
  8. 再次使用存在的到 127.0.0.1:9080 的连接。
  9. 已发出 HTTP 请求,正在等待回应... 302 Found
  10. 位置:/auth/login/sentry/ [跟随至新的 URL]
  11. --2020-07-03 10:30:26-- http://127.0.0.1:9080/auth/login/sentry/
  12. 再次使用存在的到 127.0.0.1:9080 的连接。
  13. 已发出 HTTP 请求,正在等待回应... 200 OK
  14. 长度:9690 (9.5K) [text/html]
  15. 正在保存至: index.html

配置 nginx 反向代理

  1. server {
  2. listen 80;
  3. server_name sentry.domain.com;
  4. return 301 https://sentry.domain.com$request_uri;
  5. }
  6. server{
  7. listen 443 ssl;
  8. server_name sentry.domain.com;
  9. # 由于以后会上传 source-map, 需要将sourcemap 上传大小进行放开
  10. client_max_body_size 20m;
  11. location / {
  12. proxy_pass http://127.0.0.1:9080;
  13. }
  14. ## ssl
  15. ssl_certificate https/sentry.domain.com.pem;
  16. ssl_certificate_key https/sentry.domain.com.key;
  17. ssl_session_timeout 5m;
  18. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  19. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  20. ssl_prefer_server_ciphers on;
  21. access_log off;
  22. error_log off;
  23. }

这里即可通过域名来进行访问
CentOS 使用 docker 安装 sentry - 图1

出现问题

1. Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

解决方法 : 将用户加入 docker 组, 可以让其进行访问

  1. # 把用户加入 docker 组
  2. $ usermod -aG docker $USER
  3. # logout : 注销
  4. $ systemctl restart docker

2. docker-compose 启动报错

ERROR: for sentry_onpremise_nginx_1 Cannot start service nginx: driver failed programming external connectivity on endpoint sentry_onpremise_nginx_1 (9ee80c3b3949749bdb529f949574f6169a4f993c9a0d50aa621228bd57d579fb): Error starting userland proxy: listen tcp 0.0.0.0:9000: bind: address already in use ERROR: Encountered errors while bringing up the project.

解决方法:
这里一般是端口冲突
参考 .env 文件配置端口映射

  1. ...
  2. - SENTRY_BIND=9000
  3. + SENTRY_BIND=9080
  4. ...

3. 配置 Sentry 可以发送邮件

编辑 ./sentry/config.yml 文件

  1. mail.backend: "smtp" # Use dummy if you want to disable email entirely
  2. mail.host: "smtpdm.aliyun.com"
  3. mail.port: 25
  4. mail.username: "automail@demo.domain.com"
  5. mail.password: "********"
  6. mail.use-tls: false
  7. # The email address to send on behalf of
  8. mail.from: "automail@demo.domain.com"
  9. # 备注: host 就是stmp服务地址
  10. # port 端口和 tls对应 port 25 对应 tls false port 587 对应 tls true

然后运行

  1. $ docker-compose build
  2. $ docker-compose stop
  3. $ docker-compose start -d

这样看下 管理员中的 邮箱配置
CentOS 使用 docker 安装 sentry - 图2
测试下收到邮件就配置成功了
CentOS 使用 docker 安装 sentry - 图3

ps : 这里用的是网易的客户端

4. 这里配置 register mirror, 加速国内访问

打开 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors , 这里将镜像设置为使用 aliyun 的加速镜像
针对 Docker 客户端版本大于 1.10.0 的用户
您可以通过修改 daemon 配置文件/etc/docker/daemon.json 来使用加速器

  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4. "registry-mirrors": ["https://******.mirror.aliyuncs.com"]
  5. }
  6. EOF
  7. sudo systemctl daemon-reload
  8. sudo systemctl restart docker

5. Sentry 对接上之后无法收集日志

需要验证

  1. # 验证服务器是否接收到请求
  2. $ tail -20f /var/logs/nginx/access.log
  3. # 验证 docker 镜像是否收到日志
  4. $ docker-compose logs -f -t --tail=100

下面是一次执行服务的日志

  1. # 接收
  2. nginx_1 | 172.18.0.1 - - [18/Jul/2020:03:10:02 +0000] "POST /api/4/store/ HTTP/1.0" 200 41 "-" "sentry.php.laravel/1.8.0"
  3. # kafka 进行消费
  4. ingest-consumer_1 | 03:10:03 [INFO] batching-kafka-consumer: Flushing 2 items (from {(u'ingest-events', 0): [138L, 139L]}): forced:False size:False time:True
  5. # snuba 进行处理
  6. snuba-cleanup_1 | 2020-07-18 03:10:03,574 Dropped 0 partitions on None
  7. snuba-consumer_1 | 2020-07-18 03:10:04,600 Flushing 2 items (from {Partition(topic=Topic(name='events'), index=0): Offsets(lo=154, hi=156)}): forced:False size:False time:True
  8. snuba-outcomes-consumer_1 | 2020-07-18 03:10:04,603 Flushing 2 items (from {Partition(topic=Topic(name='outcomes'), index=0): Offsets(lo=140, hi=142)}): forced:False size:False time:True
  9. snuba-outcomes-consumer_1 | 2020-07-18 03:10:04,623 Worker flush took 18ms
  10. snuba-consumer_1 | 2020-07-18 03:10:04,730 Worker flush took 129ms

如果出现异常则可以进行重启

  1. $ docker-compose restart