Sentry 配置简例
1 关于日志
程序运行的日志是一个必不可少的东西,包括一些统计日志和程序运行的异常日志。通过日志,我们可以知道程序是不是在正常地运行,如果出现错误,我们还需要利用日志来排查问题。
日志的重要性毋庸置疑,但是我们在使用这些日志的时候效率并不高,主要原因有以下几点:
- 日志文件过于分散,一般会将不同模块的日志以文件的形式分开保存。但是即使是将日志写在统一的目录下,不管是系统正常运行还是出现问题的时候都可能需要检查多个日志。
- 内容过于繁杂,特别是遇到问题的时候,日志更是非常的多,但是在查看日志的时候却往往不得不反复前后翻看错误的关联日志信息,同时还要略过大量无关日志。
- 出现问题的被动性,很可能在程序刚开始运行起来的时候日志是正常,但是在遇到异常的时候不能够及时的发现问题。
目前的解决方案就是规定好统一的日志格式,将所有模块的日志进行适配之后通过 ELK 进行统一的收集存储起来,并建立相应的日志分类与报表,在检查到问题的时候通过邮件的形式通知运维。但是这样的解决方案需要的时间和技术成本还是很大的,而且也不能够很好的提高日志的使用效率。
2 Sentry简介
Sentry 是一个使用 Python 开发的通过策略将日志事件进行过滤聚合的日志服务。Sentry 依赖的外部服务主要有 Redis 和 PostgreSQL。
2.1 Issue & Events
Sentry 使用 Issue 来聚合一类的 Events。
2.2 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
通常为空。
2.3 Sentry SDKs
使用 Sentry 前还需要在自己的应用中配置 Sentry 的 SDK——通常在各语言的包管理工具中叫做 Raven。现在官方支持的 SDK 如下:
JavaScript
React-Native
Python
Ruby
Node
PHP
Go
Java
Objective-C/Swift
C#
Perl
Elixir
Laravel
相关文章