menu Chancel's blog
rss_feed
Chancel's blog
我就是这样的人

Linux下部署Sentry - 程序错误日志收集和聚合的平台

作者:Chancel, 更新:2019 Jan 10, 字数:4801, 已阅:831

这篇文章更新于 1607 天前,文中部分信息可能失效,请自行甄别无效内容。

Sentry官方文档已经很详尽了,没想到还是踩了一些坑,事实证明还是要认真看官网文档(奈何英文渣)就可以避免很多问题,吃一蛰长一智,少看三方文档多翻官方文档总是对的

什么是Sentry?

Sentry 是一款基于 Django实现的错误日志收集和聚合的开源平台,它是 Python 实现的,但是其日志监控功能却不局限于python,对诸如 Node.js, php,ruby, C#,java 等语言的项目都可以做到无缝集成,甚至可以用来对iOS, Android 移动客户端以及 Web前端异常进行跟踪。

网站资料

  • 官方网站:https://sentry.io/ty-3a/
  • 开源地址:https://github.com/getsentry/sentry
  • 文档地址:https://docs.sentry.io/

部署过程

官方部署文档,建议英文好的同学直接参考官方文档,如果遇到问题可以参考下我的踩坑过程

部署准备

  • 官方部署文档

    • https://docs.sentry.io/server/installation/
  • 安装方式

    • via Docker
    • via Python(2.7)
      • 源码部署(需要node)
      • 直接部署

    我采用的是基于Python2.7 - 直接部署

  • 基本环境

    • Linux环境(官网假定是Ubuntu,我使用Cent,差异主要在Python的依赖包命名上)
    • Python2.7
    • Pip8.1+
    • Redis、第三方数据库(django支持即可)
    • python-setuptools, python-dev, libxslt1-dev, gcc, libffi-dev, libjpeg-dev, libxml2-dev, libxslt-dev, libyaml-dev, libpq-dev
      • 注意,这些包是在ubuntu下的名称,若你使用的是Red Hat系Linux,则需自己查找对应名称的Python包
  • 我的环境

    • Cent7.2
    • Python2.7/Python3.5混合
    • Pip18.1
    • Redis、Mysql

开始部署

  • 安装Redis

    yum -y install redis
    systemctl start redis.service
    systemctl enable redis.service
    
  • 安装Python虚拟环境Virtualenv

    pip install -U virtualenv
    virtualenv /home/chancel/sentry/
    cd /home/chancel/sentry/
    source /home/chancel/sentry/
    
  • 安装sentry的依赖项

    // 安装相关依赖,根据安装报错信息逐步排查(直接google一般都可以获得相关依赖包,装上即可,下面列出基本会用到的)
    yum install python-devel libffi-devel openssl-devel gcc-c++ libxslt-devel libxml2-devel mysql-python
    
  • 安装sentry之前更改pip源(如pip速度无问题则可跳过此步),否则安装速度过慢,在用户目录下新建.pip目录并建立pip.conf文件填入相关源信息

    vim ~/.pip/pip.conf
    [global]
    index-url=http://mirrors.aliyun.com/pypi/simple/
    [install]
    trusted-host=mirrors.aliyun.com
    
  • 开始安装sentry

    // 直接安装sentry
    pip install -U sentry
    
  • 初始化sentry

    sentry init /etc/sentry
    
  • 更改配置信息

    • 修改/etc/sentry/sentry.conf.py

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': 'sentry',
              'USER': 'root',
              'PASSWORD': 'yourpasswd',
              'HOST': '127.0.0.1',
              'PORT': '3306',
          }
      }
      
    • 修改/etc/config.yml信息

      redis.clusters:
      

    default: hosts: 0: host: 127.0.0.1 port: 6379 # password: "my-secret-password" ```

  • 创建Sentry数据库

    • 根据上一步填写的数据库信息创建对应的数据库
  • 尝试运行sentry

    // 运行web界面(会让你创建管理员用户)
    sentry --config=/etc/sentry run web
    // 运行背景线程(需要切换成普通用户运行)
    sentry --config=/etc/sentry run worker
    // 运行队列线程
    sentry --config=/etc/sentry run cron
    
  • 部署完成,以下是注意事项

    • 安装sentry的时候会有许多错误,耐心根据提示来安装相关依赖项即可,这时如果pip速度过慢优先更换pip源,否则每一次报错都要浪费很多时间
    • worker线程只能用普通用户运行,运行时需要指定配置文件夹的路径
    • 注意检查redis跟数据库的运行信息

Supervisor跟Nginx配置

Supervisord配置参考

根据自己的具体文件夹路径更改相关配置,主要是日志跟sentry的路径

[program:sentry-web]
directory=/usr/bin/
environment=SENTRY_CONF="/etc/sentry"
command=/usr/bin/sentry run web
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisord/sentry-web.output.log
stderr_logfile=/var/log/supervisord/sentry-web.error.log
[program:sentry-worker]
user=chancel
directory=/usr/bin/
environment=SENTRY_CONF="/etc/sentry"
command=/usr/bin/sentry run worker
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisord/sentry-worker.output.log
stderr_logfile=/var/log/supervisord/sentry-worker.error.log
[program:sentry-cron]
directory=/usr/bin/
environment=SENTRY_CONF="/etc/sentry"
command=/usr/bin/sentry run cron
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisord/sentry-cron.output.log
stdout_logfile=/var/log/supervisord/sentry-cron.output.log

Nginx配置

location / {
  proxy_pass         http://localhost:9000;
  proxy_redirect     off;

  proxy_set_header   Host              $host;
  proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
  proxy_set_header   X-Forwarded-Proto $scheme;
}

sentry csrf verification failed (C# Basic)

  • 新建一个测试项目,提示如下

    var ravenClient = new RavenClient("http://76e85db534174984bfb995a97061d892@xxx.chancel.cn//4");
    try
    {
        int i2 = 0;
        int i = 10 / i2;
    }
    catch (Exception exception)
    {
        ravenClient.Capture(new SentryEvent(exception));
    }
    
  • 运行c#程序,并运行以上代码,发现无法提交,仔细查看日志,CSRF错误,cookie/token错误,后来发现这个例子不对,更改第一句代码

    var ravenClient = new RavenClient("http://76e85db534174984bfb995a97061d892@xxx.chancel.cn/4");
    

所以,前面的步骤我花了大概半个小时的时间,后面这个愣是折腾了两个小时都没发现官方的例子居然是有问题的! 查遍google跟官网相关文档都没查找到相关信息,最后重新按照官网文档步骤走一遍,再把最后的双斜杠改为单斜杠就可以了


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]
目录