menu Chancel's Blog
rss_feed lightbulb_outline

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

warning 这篇文章距离上次更新于847天前,文中部分信息可能已失效,请自行甄别无效内容。

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

什么是Sentry?

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

网站资料

部署过程

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

部署准备

  • 官方部署文档
  • 安装方式

    • 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跟官网相关文档都没查找到相关信息,最后重新按照官网文档步骤走一遍,再把最后的双斜杠改为单斜杠就可以了

阅读 - 139
分类 - 杂锦记录
创建于 2019-01-10 11:39:32
阅读 - 139
分类 - 杂锦记录
创建于 2019-01-10 11:39:32
博文目录

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

account_circle
email
web_asset
textsms

评论列表([[messageList.data.items.length]])

[[messageItem.create_time]]
[[messageItem.m_environ.browser]] [[messageItem.m_environ.os]] [[messageItem.m_environ.device]]
[[subMessage.m_author]] @ [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[subMessage.m_environ.browser]] [[subMessage.m_environ.os]] [[subMessage.m_environ.device]]