一、什么是Sentry?

Sentry可以帮助我们完成以下工作:例如,线上有一个bug,代码的某处逻辑的NullPointerException造成了这个问题,Sentry会立即发现错误,并通过邮件或其他基于通知规则的集成通知到相关责任人员,这个通知可以把我们引入到一个指示板,这个指示板为我们提供了快速分类问题所需的上下文,如:频率、用户影响、代码那一部分受到影响以及那个团队可能是问题的所有者。

然后,它会显示帮助我们调试的详细信息,比如堆栈跟踪、堆栈本地信息、前面的事件、可能导致问题的提交以及在错误发生时捕获的定制数据。我们还可以在JIRA等项目管理工具中自动开始跟踪问题。

 

二、Sentry原理

Sentry到底是如何实现实时日志监控报警的呢?首先,Sentry是一个C/S架构,我们需要在自己应用中集成Sentry的SDK才能在应用发生错误是将错误信息发送给Sentry服务端。根据语言和框架的不同,我们可以选择自动或自定义设置特殊的错误类型报告给Sentry服务端。

sentry中的functionToStringIntegration_docker

 

而Sentry的服务端分为web、cron、worker这几个部分,应用(客户端)发生错误后将错误信息上报给web,web处理后放入消息队列或Redis内存队列,worker从队列中消费数据进行处理。

 

三、安装部署(docker方式安装)

Sentry服务依赖比较多,并且官方也推荐使用docker方式进行安装,需要先部署docker环境

1.安装docker环境


# 安装docker依赖环境
[root@sentry ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加yum源
[root@sentry ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装docker-ce
[root@sentry ~]# yum install docker-ce

# 安装docker-compose
[root@sentry ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@sentry ~]# chmod +x /usr/local/bin/docker-compose
[root@sentry ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 或者直接通过pip方式安装
[root@sentry ~]# git clone https://github.com/getsentry/onpremise.git 
  

pip install docker-compose

  

docker官方文档:

https://docs.docker.com/install/linux/docker-ce/centos/

https://docs.docker.com/compose/install/

 

2.启动docker服务


[root@sentry ~]# systemctl start docker
[root@sentry ~]# systemctl enable docker

3.从sentry官方网站下载源码


[root@sentry ~]# git clone https://github.com/getsentry/onpremise.git


然后切换到onpremise目录下,可以直接执行./install.sh脚本进行一键安装,不过在安装之前需要修改几个配置项

[root@sentry ~]# cd onpremise
[root@sentry onpremise]# vim docker-compose.yml
# NOTE: This docker-compose.yml is meant to be just an example of how
# you could accomplish this on your own. It is not intended to work in
# all use-cases and must be adapted to fit your needs. This is merely
# a guideline.

# See docs.getsentry.com/on-premise/server/ for full
# instructions

version: '3.4'

x-defaults: &defaults
  restart: unless-stopped
  build:
    context: .
    args:
      SENTRY_IMAGE: ${SENTRY_IMAGE}
  depends_on:
    - redis
    - postgres
    - memcached
    - smtp
  env_file: .env
  environment:
    SENTRY_EMAIL_BACKEND: 'django_smtp_ssl.SSLEmailBackend'
    SENTRY_MAILER_EMAIL_BACKEND: EMAIL_BACKEND
    SENTRY_MEMCACHED_HOST: memcached
    SENTRY_REDIS_HOST: redis
    
    # 新增以下内容,也可以不配置,等全部安装好,首次进入系统时也可以进行配置
    SENTRY_POSTGRES_HOST: postgres
    SENTRY_EMAIL_HOST: "smtp.mxhichina.com"
    SENTRY_EMAIL_USER: "xulei@xl-blog.cn"
    SENTRY_SERVER_EMAIL: "xulei@xl-blog.cn"
    SENTRY_EMAIL_PASSWORD: "passwod"
    SENTRY_EMAIL_USE_TLS: "false"  # 如果你使用的服务器不让用25端口,则需要开启TLS,将flase改为true即可
    SENTRY_EMAIL_PORT: 25  # TLS为true改为456或587
  volumes:
    - sentry-data:/var/lib/sentry/files


services:
  smtp:
    restart: unless-stopped
    image: tianon/exim4

  memcached:
    restart: unless-stopped
    image: memcached:1.5-alpine

  redis:
    restart: unless-stopped
    image: redis:3.2-alpine

  postgres:
    restart: unless-stopped
    image: postgres:9.5
    volumes:
      - sentry-postgres:/var/lib/postgresql/data

  web:
    <<: *defaults
    ports:
      - '9000:9000'

  cron:
    <<: *defaults
    command: run cron

  worker:
    <<: *defaults
    command: run worker


volumes:
    sentry-data:
      external: true
    sentry-postgres:
      external: true


修改sentry.conf.py文件


[root@sentry onpremise]# vim sentry.conf.py
# 在文件首部增加这两行代码,如果不加的话,可以在后面使用邮件功能会出现”SMTPServerDisconnected: Connection unexpectedly closed“错误

import socket

socket.setdefaulttimeout(20)


现在可以执行./install.sh脚本进行自动安装,脚本安装过程中会让你输入邮箱和密码,这个是作用于首次登陆时使用

脚本安装完,可以执行以下命令启动容器


[root@sentry onpremise]# docker-compose up -d
WARNING: The SENTRY_IMAGE variable is not set. Defaulting to a blank string.
Creating network "onpremise_default" with the default driver
Creating onpremise_postgres_1 ... done
Creating onpremise_redis_1 ... done
Creating onpremise_smtp_1 ... done
Creating onpremise_memcached_1 ... done
Creating onpremise_web_1 ... done
Creating onpremise_cron_1 ... done
Creating onpremise_worker_1 ... done

四、登陆sentry后台

sentry服务默认是启动在9000端口,你可以在浏览器中输入http://<你的ip>:9000

sentry中的functionToStringIntegration_memcached_02

 输入刚刚执行脚本时输入的账号和密码登陆即可。

sentry中的functionToStringIntegration_redis_03

然后我们进入到admin后台,测试一下邮件功能,看邮件是否能正常发送,如果你的邮箱收到如下信息,则说明邮件服务配置无问题:

sentry中的functionToStringIntegration_redis_04

五、Sentry初次体验

经过上面的步骤,Sentry的基础环境也都配置好,接下来我们需要来感受一下Sentry的强大之处

1.创建一个project

sentry中的functionToStringIntegration_数据库_05

sentry中的functionToStringIntegration_memcached_06

 创建完成后,点击python代码,因为我们是用python代码进行测试,Sentry会为我们生成一个简单的测试demo,不过我们需要先安装它的sdk

sentry中的functionToStringIntegration_redis_07

 

把上面的代码放到自己的py文件中,执行后,系统会报错,这个时候你可以在后台看到这个错误,这个代码中最主要的是init目标中的代码,Sentry也是通过它给服务端上报错误信息的

 

sentry中的functionToStringIntegration_运维_08

以上就是全部安装过程