Jolly

使用Sentry监控展示Django全局错误日志,并通过飞书实时报警
最近工作上的Django项目,使用了Sentry来做错误日志的监控报警,因为错误日志太多,排查不容易,所以还不如来...
扫描右侧二维码阅读全文
04
2021/08

使用Sentry监控展示Django全局错误日志,并通过飞书实时报警

最近工作上的Django项目,使用了Sentry来做错误日志的监控报警,因为错误日志太多,排查不容易,所以还不如来个主动报警,这样定位排错也很方便,而实际使用情况来看,确实是超级方便的!Sentry在错误监控领域已经是一个很成熟的应用了,支持各种语言多种服务程序的日志监控,如下图:
QQ20210804152440.png
关于更详细的介绍,可以访问官网查看:https://sentry.io/

Sentry安装

Sentry的安装部分,我这里采用的额时Docker容器部署,关于Docker的安装可以看我的另一篇文章

这里具体介绍怎么部署容器版Sentry。

部署步骤

  • docker拉取redis postsql 和sentry
docker pull redis
docker pull postgres 
docker pull sentry
  • 启动redis和sentry
docker run -d --name sentry-redis redis 
docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry postgres
  • 启动Sentry相关
docker run --rm sentry config generate-secret-key  # 得到secret-key,然后把key复制到下面四行的单引号中
#下面这步会提示输入邮箱和密码 
docker run -it --rm -e SENTRY_SECRET_KEY='' --link sentry-postgres:postgres --link sentry-redis:redis sentry upgrade
docker run -d -p 9000:9000 --name my-sentry -e SENTRY_SECRET_KEY='' --link sentry-redis:redis --link sentry-postgres:postgres sentry 
docker run -d --name sentry-cron -e SENTRY_SECRET_KEY='' --link sentry-postgres:postgres --link sentry-redis:redis sentry run cron 
docker run -d --name sentry-worker-1 -e SENTRY_SECRET_KEY='' --link sentry-postgres:postgres --link sentry-redis:redis sentry run worker

访问测试

经过上面的步骤,Sentry已经算是部署完毕了,然后打开浏览器,对应的ip地址加9000端口即可访问。打开显示如下图:
QQ20210805105438.png
登录之前设置好的邮箱和密码即可登入系统。

新建项目以及基本设置

  • 修改系统语言
    在左侧的user_setting里面可以修改语言为中文简体

QQ20210805105616.png

  • 新建项目
    在首页点击项目,会出现很多项目模板,选择Django即可

QQ20210805105502.png

Django接入Sentry

Django接入Sentry相对来说比较简单,我们这里采用安装Sentry客户端的方式接入。

# 首先安装raven
pip install raven

然后在settings文件中的INSTALLED_APPS里注册Sentry模型

INSTALLED_APPS = [
    ...
    # Sentry错误日志监控系统
    'raven.contrib.django.raven_compat',
]

随后我们返回Sentry网页,点击创建的项目,然后点击齿轮设置图标,点击“客户端密钥(DSN)”,复制该项目的DSN
QQ20210805105759.png
然后再将复制的Sentry DSN粘贴在Settings配置文件中

# Sentry错误日志监控系统
RAVEN_CONFIG = {
    'dsn': 'http://1283djasssdv2312d12bi21dib1341@192.168.1.124:9000/2',
}

就这样Django便接入了Sentry,我们在项目里新建一个test_sentry.py文件测试下错误是否能被捕获,内容如下:

dsn = "http://1283djasssdv2312d12bi21dib1341@192.168.1.124:9000/2"

from raven import Client

Client = Client(dsn)

try:
    1 / 0
except ZeroDivisionError:
    Client.captureException()

执行后去Sentry网页查看,如果出现下图,就说明Sentry起作用了!(因为我已经跑了一段时间了,所以页面有很多别的错误,请忽略~~~)
QQ20210805111417.png
我们点击这条记录进去,一起看看Sentry有多强大方便,访问信息、错误栈全都一览无余!太方便了!
QQ20210805111526.png
在接下来,我们来接入飞书进行实时告警

接入飞书告警

Sentry有一点好处就是内置了webhook方法,只要将外部申请好的webhook链接填入Sentry对应的设置,便可以实现错误日志实时告警!

飞书捷径机器人设置告警捷径

飞书时字节跳动旗下的办公协同软件,面世以来饱受赞誉,功能非常强大,公司里也在用,办公协同很牛,yyds~,推荐。
我们要用到的时飞书的“飞书捷径”机器人,具体操作可以看官方文档,相信绝对比我讲的清楚,点击如何在飞书捷径中使用 Sentry

配置Sentry webhook

首先我们要设置一下Sentry的报警规则,也就是定义项目错误在什么情况下触发报警,以及报警方式,。点击项目的设置栏,点击“警报”,进入规则标签页,点击新建规则:
QQ20210805105901.png
我们需要定义的点有3个:

  • “An event is seen” 条件,任何选项
  • 报警措施,Send a notification via webhook
  • Perform these actions at most once every 5分钟 for an issue (修改报警间隔)

这里新建的时Sentry报警的规则,然后点击保存即可,返回即可看到我们刚才新建的规则
QQ20210805105826.png

然后我们获取一下上面设置的飞书捷径的webhook,就在下图示例位置:
QQ20210805110144.png

最后,我们只需要将飞书捷径的webhook链接填入到Sentry网页设置中,具体位置在项目的设置选项最底部,点击webhook:
QQ20210805105939.png
填入链接后,点击save Changes

测试告警

我们现在来测试一下告警是否成功,点击上图的webhook设置页面,右上角有一个“Test Plugin”,Sentry就会往飞书捷径机器人发送一条告警,如下图所示:
QQ20210804142432.png

后记

到这一步,整个配置就完成了,其实Sentry能做的还有很多,感兴趣的话,你可以自己深入了解。

Last modification:August 5th, 2021 at 06:39 pm
🌓