标签: docker compose

  • 增加 Swap 解决 Sentry 频繁死机的问题

    增加 Swap 解决 Sentry 频繁死机的问题

    我厂 Code.fun 近期进步不小,产品力顺应民意,需求导向,收获了不错的效果。欢迎有大量页面需求的朋友联系试用。

    但是随之而来产生一个问题:Sentry 不定时死机。通过腾讯云的日志分析,死机前多半会有大量的 IO 读操作,除此之外也没找到别的信息。Sentry 跑在 docker compose 里,很多组件我都不熟悉,docker 里面调试的技能我也不会,除了 docker compose logs 看日志以外,我也没有更好的办法。所以问题一直没有定位到。

    于是,最近几周就变成要查问题 -> sentry 挂了 -> 重启 -> 又要查问题 -> sentry 又挂了 -> 又重启……这样的状态。中间我试着降低 Kafka 的定时清理频率,也没有收到效果。

    后来有一天我挂着 ServerCat 看服务器状态,突然发现 Sentry 的内存好高,在 95%~98% 之间摇摆。我想起来默认的 ubuntu 好像没有配置虚拟内存,那么如果内存满了,会不会就死了呢?虽然想不到和磁盘 IO 有什么关系,不过我决定试一试。

    还好我之前搞 Sentry 磁盘优化比较成功,现在 80G 的硬盘占用基本稳定在 40G~50G 之间,有 30G 左右的富余,可以用作 swap。

    首先,使用 sudo swapon --show 查看已经挂在的 swap,果然为空。

    接着,创建一个 5G 的 swap 文件(我记得我用的不是这个命令,但是现在只能搜到这个,我周末再试一下):

    sudo fallocate -l 5G /swapfile

    改变它的权限为 600,仅供系统使用:

    sudo chmod 600 /swapfile

    将其配置为 swap:

    sudo mkswap /swapfile

    启动为 swap

    sudo swapon /swapfile

    再次使用 sudo swapon --show 即可查看使用情况:

    NAME       TYPE SIZE USED PRIO
    /swapfile1 file   5G 2.1G   -2

    配置 swap 之后几次查看,内存用量逐步降低到 80% 附近,swap 可以用满。但是死机的情况彻底消失,基本可以断定是内存的问题。之前买服务器的时候,可着最低系统要求,4C8G,看来生产环境用起来的确不太够。群里有同学还说可以偷偷改最低要求的配置,在更小的服务器上安装,那就真的只能是自己开发试着玩了。

    准备周日上午趁着人最少的时候再把 swap 调大到 8G,应该足够未来一段时间的使用。不知道将来人更多的时候会不会更挤,看来有必要把大家的取样率都下降到 2%。说不定将来都用 Sentry SaaS 会更经济呢,欢迎有经验的同学来分享。

    希望上面的内容对大家有帮助。如果你遇到其它使用 Sentry 的问题,不妨发出来,我们一起讨论,共同学习。

  • Ubuntu 22.04 部署 Sentry 笔记

    Ubuntu 22.04 部署 Sentry 笔记

    Sentry 可能是目前最流行的缺陷管理软件,它可以帮我收集线上产品的问题,帮我们发现各种缺陷。除了 SaaS 服务以外,它还提供独立部署版本,相信大多数用户跟我一样,都觉得独立部署比较安全,这里就分享下前阵子帮我厂搭建 Sentry 的经验。

    0. 准备

    Sentry 号称需要 4核 8G 以及 20G 硬盘,但 20G 其实完全不够,我厂产品接入一半,一周就产生 20+G 的数据量。建议至少准备 100G。

    1. 安装 Docker + Compose 插件

    Sentry 私有部署版使用 docker compose 作为部署方案,所以我们要先安装 Docker 和 Compose 插件。建议先阅读上面的文档,然后可以配合下面的步骤操作。

    卸载旧版本

    sudo apt-get remove docker docker-engine docker.io containerd runc

    配置 Docker 预编译包仓库

    推荐用这种方式来安装,方便日后升级。

    $ sudo apt-get update
    
    $ sudo apt-get install \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
    
    $ 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 和 Compose 插件

     $ sudo apt-get update
     $ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

    测试 Docker

    此时,正常来说,Docker 和 Compose 插件均安装完毕,我们可以跑个 hello-world 测试一下:

    $ sudo service docker start # 启动 docker engine 服务
    $ sudo docker run hello-world

    安装 Sentry

    下载

    https://github.com/getsentry/self-hosted/releases/latest

    下载完成后,解压到安装目录。以后所有操作都在这个目录完成,建议修改下目录名,并且放在公共目录里,方便大家管理。

    我用的目录名是 ~/sentry

    安装

    执行 sudo ./install.sh。如果你的当前用户不是 root,那么 sudo 就非常重要,否则可能会报告各种奇奇怪怪的错误。

    注意:以后的 sudo 也都是必须的。

    安装过程会比较久,要拉很多个镜像并生成容器。这个过程建议保持网络畅通,或者使用 screentmux 等工具保活,否则不小心断联就可能会前功尽弃。

    启动

    安装完成之后,执行 sudo docker compose up -d 启动服务即可。

    配置 Nginx 反向代理 9000 端口

    这段不详细解释了,有人提问的话再补充。总之:

    1. Nginx 反向代理 9000 端口
    2. 使用 Certbot 启动 https
    3. 或者申请个免费证书然后启动 https

    配置邮箱

    修改 ~/sentry/sentry/config.yml,完成邮箱配置。我们用的是腾讯企业邮箱,配置不复杂,就按照 SMTP 教程即可。需要注意的是,mail.from 要跟用户名一致,否则会发不出去。

    修改配置之后,都要重启整个 compose 集群才能生效。

    配置项目

    进入 Sentry,完成首次登录配置。

    然后创建项目,选好项目类型,就能看到配置教程,非常方便。


    总结

    Sentry 开源搞得很好,文档健全,基本能解决大部分问题。

    可惜版本比较多,互联网上有很多内容已经过期,大家阅读时要稍加分辨。

    有其它部署和使用的问题,可以留言交流。