终章 centos7搭建sentry错误日志服务器

2,494 阅读4分钟

一.为什么需要使用错误日志sentry?

原始模式

通过把错误日志logging到服务器的log文件,然后有错误的时候通过查询当天的日志内容进行修改。

缺点

  • 1.麻烦程度高:我们必须要登录到服务器去找对应记录,自己也得写收发邮件的代码
  • 2.实时性低:需要主动查询bug来自哪儿,分析问题所在,而其实对于有用户的web服务来说,我们需要做到发生错误以后立马知道(发邮件给我们自己(如果错误很多),邮件也会很多,爆掉)
  • 3.集中性低:我们没法集中管理bug集中管理的好处是我们可以很好的分配bug给不同的人进行修改
  • 4.定制性差:项目管理还需要不同的定制性邮件

二.sentry安装

sentry简介

  • 1.Sentry是用drf(django-restframework)开发的错误日志管理系统
  • 2.Sentry is cross-platform application monitoring, with a focus on error reporting.
  • 3.sentry有已经搭建好的sentry官网的免费版,但有一定的限制(发送邮件频率,速度),一些小的项目建议直接使用官网的免费版即可

安装sentry

sentry有两种安装模式

  • 1.用python安装,比较繁琐需要大量手动配置
  • 2.docker安装(推荐)

centos7安装docker

  • 注意虚拟机或者服务器运存大小,需要大于2G(虚拟机开机前分配3G)
  • 注意如果使用代理网络请先配置yum代理
  1. 安装docker的依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 安装docker-ce
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
  1. 启动docker后台服务
sudo systemctl start docker
  1. 测试运行
docker run hello-world
  • 注意
  • 如果是代理上网(需要配置代理)
- find / -name docker.service
- vim /usr/lib/systemd/system/docker.service
- 在service下面添加
- Environment=”HTTP_PROXY=http://username:password@ip:port”
  1. 设置开机启动
sudo systemctl enable docker

centos7安装sentry

yum install git
git clone https://github.com/getsentry/onpremise.git

(git访问不了的话可以用gitee,搜索getsentry/onpremise)

通过python3安装docker-compose

yum install python3
pip3 install docker-compose
docker-compose --version 如果command not found
find / -name docker-compose  # 为它建立一个软链接
ln -s /python3/lib/...../docker-compose /usr/bin/docker-compose
docker-compose --version

curl直接获取docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-
`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 修改权限
chmod +x /usr/local/bin/docker-compose

onpremise

  • 在运行./install.sh之前有两个坑
  • 1.可能需要修改./install.sh的权限(Chmod –R 777 ./install.sh)
  • 2.如果使用公司代理上网需要在新建每个docker容器时为每个容器都配置代理
  • docker容器代理配置
  • 具体就是在当前用户家目录
mkdir .docker
touch ./docker/config.json
vim ./docker/config.json
{
  	"proxies":
   	{
      "default":
      {
      	"httpProxy": "http://username:pwd@ip:port",
      	"httpsProxy": "https://username:pwd@ip:port"
      }
    }
 }
  • 运行./install.sh
cd onpremise
./install.sh  # 要求运行内存2G以上
# 时间比较长, 中间会要求创建用户(如果运存足够)
# 若没有自动要求创建账号
docker-compose up –d  # 启动服务
docker-compose run --rm web createuser
  • docker-compose run --rm web和用python搭建sentry的sentry命令一样可以通过alias 起别名alias docker-compose run --rm web sentry
  • 搭建成功访问127.0.0.1:9000可以进入登录页面,这里如果不用chrome浏览器,会拒绝获取sentry.io的静态资源导致一直卡在页面显示(这个挺坑的) Please wait while we load an obnoxious amount of JavaScript You may need to disable adblocking extensions to load Sentry.
  • centos下载google
google-chrome --no-sandbox  # centos运行google要求no sandbox

配置mail的坑

  • 1.需要在/onpremise/sentry/config.yml中配置smtp
  • 配置邮件
  • 写死如果是qq.com直接禁止发送,需要修改源码正则
  • qq邮箱的坑
  • 阿里云禁用25端口,如果用阿里云当sentry服务器请使用465,但sentry本身不支持ssl
  • 阿里云服务器的坑
  • sentry不支持ssl
  • 2.注意配置用户密码需要使用各大邮箱的授权码(具体搜索例如qq邮箱授权码)
  • 3.注意把设置的服务器邮箱用户名加入你的接收错误信息的邮箱的白名单以免被拦截

三.sentry应用

  • 1.新建项目create project
  • 2.get dsn需要通过dsn识别是哪个项目
  • 3.选择应用 python
  • 4.创建python脚本
pip install raven
from raven import Client
dsn = "http://88f33332e0d643bf8924dd3be378de9e@xxxxxxx:9000/6"
client = Client(dsn)

try:
    3/0
except ZeroDivisionError:
    Client.captureException()
  • 5.运行脚本可以在项目中看到你的脚本的报错信息
  • 6.项目中可以设置个性化定制,比如如何发送邮件相同内容发送一次,邮件发送频率,哪些ip可以访问之类的在项目设置里面设定。 具体通过文档查阅设定

四.sentry集成到django

  • setting中配置
INSTALLED_APPS = [
...,
'raven.contrib.django.raven_compat',
]
RAVEN_CONFIG = {
    'dsn': "http://88f33332e0d643bf8924dd3be378de9e@xxxxxxxxxx:9000/6",
    # If you are using git, you can also automatically configure the
    # release based on the git info.
    # 'release': raven.fetch_git_sha(os.path.abspath(os.pardir)),
}

manage.py可以通过raven test发送测试, 各种错误都可以帮我们发送到sentry, 因为django配置app这种集成开发模式,配置就这么简单。

  • sentry还可以集成各种应用如github gitlab等,以丰富个人定制,等以后用到再补充