专栏首页YP小站Sentry9-1-2部署

Sentry9-1-2部署

一、Sentry 介绍

Sentry 是一个开源的实时错误报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、OC、Java、Go、Node.js、Django、RoR 等主流编程语言和框架 ,还提供了 GitHub、Slack、Trello 等常见开发工具的集成。

二、Sentry 基本概念

Sentry 是什么

通常我们所说的 Sentry 是指 Sentry 的后端服务,由 Django 编写。8.0 版本使用了 React.js 构建前端 UI。使用 Sentry 前还需要在自己的应用中配置 Sentry 的 SDK —— 通常在各语言的包管理工具中叫做 Raven。

当然,Sentry 还可以是其公司所提供的 Sentry SaaS 服务。

DSN(Data Source Name)

Sentry 服务支持多用户、多团队、多应用管理,每个应用都对应一个 PROJECT_ID,以及用于身份认证的 PUBLIC_KEY 和 SECRET_KEY。由此组成一个这样的 DSN:

'{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}/{PATH}{PROJECT_ID}'

PROTOCOL 通常会是 http 或者 https,HOST 为 Sentry 服务的主机名和端口,PATH 通常为空。

三、Docker部署Sentry服务

官方提供Docker部署配置

官方Docker部署仓库

环境要求

  1. Docker 17.05.0+
  2. Docker-Compose 1.17.0+
  3. 服务器配置只少需要3G内存

修改配置文件

  1. 拉取官方配置 git pull https://github.com/getsentry/onpremise
  2. 修改 config.yml 邮箱设置和system.url-prefix
mail.backend: 'smtp'  # Use dummy if you want to disable email entirely
mail.host: 'localhost'
mail.port: 25
mail.username: ''
mail.password: ''
mail.use-tls: false
mail.from: 'root@localhost'
mail.subject-prefix: '[Sentry] '

system.url-prefix: 'https://sentry.example.com'
  1. 修改docker-compose.yml 配置,本人直接挂载宿主机目录上,没有使用docker volumes
#volumes:
#    sentry-data:
#      external: true
#    sentry-postgres:
#      external: true
  1. 修改sentry.conf.py配置
# 在配置文件中 # General # 下面添加
SENTRY_DEFAULT_TIME_ZONE = 'Asia/Shanghai'

# 修改 workers 参数根据机器cpu核心来设置,添加 buffer-size 参数
SENTRY_WEB_OPTIONS = {
    'http': '%s:%s' % (SENTRY_WEB_HOST, SENTRY_WEB_PORT),
    'protocol': 'uwsgi',
    # This is need to prevent https://git.io/fj7Lw
    'uwsgi-socket': None,
    'http-keepalive': True,
    'memory-report': False,
    'workers': 3,  # the number of web workers
    'buffer-size': 32768,
}
  1. 设置 SENTRY_SECRET_KEY
$ cp .env.example .env
$ docker-compose run web config generate-secret-key # 获取 sentry key 值
$ cp .env.example .env # copy
$ vim .env # 把刚才生成的sentry key 配置到 SENTRY_SECRET_KEY='**************'

添加钉钉通知支持

  1. vim requirements.txt
# Add plugins here
sentry-dingding~=0.0.2  # 钉钉通知插件
django-smtp-ssl~=1.0  # 发邮件支持SSL协议
redis-py-cluster==1.3.4

四、构建

Docker build

注意:部署Sentry,以后如果添加新的插件支持或者修改参数都得重新build

docker-compose build --pull # Build the services again after updating, and make sure we're up to date on patch version

docker-compose run --rm web upgrade # Run new migrations

docker-compose up -d # Recreate the services

启动后docker-compose ps看到的结果

       Name                     Command               State           Ports
------------------------------------------------------------------------------------
sentry_cron_1        /entrypoint.sh run cron          Up      9000/tcp
sentry_memcached_1   docker-entrypoint.sh memcached   Up      11211/tcp
sentry_postgres_1    docker-entrypoint.sh postgres    Up      5432/tcp
sentry_redis_1       docker-entrypoint.sh redis ...   Up      6379/tcp
sentry_smtp_1        docker-entrypoint.sh exim  ...   Up      25/tcp
sentry_web_1         /entrypoint.sh run web           Up      0.0.0.0:9000->9000/tcp
sentry_worker_1      /entrypoint.sh run worker        Up      9000/tcp

构建后镜像名描述

名称

描述

sentry_cron

定时任务,使用的是celery-beat

sentry_memcached

memcached

sentry_postgres

pgsql数据库

sentry_redis

运行celery需要的服务

sentry_smtp

邮件服务

sentry_web

使用django+drf写的一套Sentry Web界面

sentry_worker

celery的worker服务,用来跑异步任务的

配置钉钉通知

Sentry服务启动后,任意选择一个项目 --> 点击设置 --> 点击Legacy Integrations --> 搜索到DingDing开启并配置钉钉机器人Access Token

五、配置外部反向代理

配置Nginx Sentry虚拟主机配置

upstream sentry {
  server sentry-host:9000;
}

server {
    listen   80;
    server_name sentry.example.com;

    location / {
      if ($request_method = GET) {
        rewrite  ^ https://$host$request_uri? permanent;
      }
      return 405;
    }
  }

  server {
    listen   443 ssl;
    server_name sentry.example.com;

    proxy_set_header   Host                 $http_host;
    proxy_set_header   X-Forwarded-Proto    $scheme;
    proxy_set_header   X-Forwarded-For      $remote_addr;
    proxy_redirect     off;

    # keepalive + raven.js is a disaster
    keepalive_timeout 0;

    # use very aggressive timeouts
    proxy_read_timeout 5s;
    proxy_send_timeout 5s;
    send_timeout 5s;
    resolver_timeout 5s;
    client_body_timeout 5s;

    # buffer larger messages
    client_max_body_size 50m;
    client_body_buffer_size 100k;

    location / {
      proxy_pass        http://sentry;

      add_header Strict-Transport-Security "max-age=31536000";
    }
}

六、Sentry历史数据清理

Sentry数据软清理 (清理完不会释放磁盘,如果很长时间没有运行,清理时间会很长)

1.保留60天数据。cleanup的使用delete命令删除postgresql数据,但postgrdsql对于delete, update等操作,只是将对应行标志为DEAD,并没有真正释放磁盘空间

$ docker exec -it sentry_worker_1 bash
$ sentry cleanup  --days 60

2.postgres数据清理 (清理完后会释放磁盘空间)

$ docker exec -it sentry_postgres_1 bash
$ vacuumdb -U postgres -d postgres -v -f --analyze

3.定时清理脚本

#!/usr/bin/env bash
 
docker exec -i sentry_worker_1 sentry cleanup --days 60 && docker exec -i -u postgres sentry_postgres_1 vacuumdb -U postgres -d postgres -v -f --analyze

本文分享自微信公众号 - YP小站(ypxiaozhan),作者:YP小站

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Elasticsearch 可视化管理工具

    Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。

    YP小站
  • Kubernetes之容器数据写满磁盘解决方法

    上面步骤操作完后(上面清理日志方法,可能对于收集日志程序会丢失一些日志,但一般情况能接受),可以选择驱赶节点上所有pod(kubectl drain ${nod...

    YP小站
  • 专业API压测工具siege 下载以及使用方法

    在日常生活中、我们经常要对我们的网站API 进行测试,随着数据的增多。我们要时刻知道,我们网站API的抗压性是否还支撑,我们的API是否还是健壮的。

    YP小站
  • Python pyperclip模块的使

    2 yum -y install xsel xclip 该模块利用该程序进行copy和paste

    py3study
  • CDA数据分析师再次走进中国电信--优质的内容决定好的口碑

    随着2018年的到来,数据对组织的重要性日益增长,已经成为组织最大的资产之一。随着大数据和数据分析技术的不断发展,未来将会有更多的企业比以往更容易受到数据的驱动...

    CDA数据分析师
  • 如何清理 Docker 占用的磁盘空间

    Docker 很占用空间,每当我们运行容器、拉取镜像、部署应用、构建自己的镜像时,我们的磁盘空间会被大量占用。

    dys
  • linux 命令英文全称

    su:Swith user  切换用户,切换到root用户 cat: Concatenate  串联 uname: Unix name  系统名称 df...

    幽鸿
  • Docker-client for python使用指南

    Docker-client for python使用指南: 客户端初始化的三种方法 import docker docker.api() docker.APIC...

    BGBiao
  • 搭建Docker私有仓库--自签名方式

      为了能集中管理我们创建好的镜像,方便部署服务,我们会创建私有的Docker仓库。通读了一遍官方文档,Docker为了确保安全使用TLS,需要CA认证,认证时...

    lpxxn
  • 深度学习各方面应用

    导语:在本章中,我们将介绍如何使用深度学习来解决计算机视觉、语音识别、自然语言处理以及其他商业领域中的应用。首先我们将讨论在许多最重要的AI 应用中所需的大规模...

    IT派

扫码关注云+社区

领取腾讯云代金券