记得小码农刚工作的时候,正好刚上公司做了一个新项目,系统上线试运行期间技术Leader会安排每个组每天专人登陆系统部署服务器,把各个模块每天的异常日志整理出来,然后再指定给负责的研发同学进行排查迭代。至于整理方式嘛.... //查看异常内容 cat txx_Biz.log.2018-04-27-PM|grep Exception //统计异常次数 cat cxx_Biz.log.2018-04-27-AM |grep ERROR| awk -F '[' '{print $2}'|awk -F ' ' '{print $1}'| sort |uniq -c|wc -l ..... ,好期待有个好工具能帮忙干这事。 什么是Sentry? 作为一个Coding农,我们通常的工作流程大概是这个样子的: 虽然我们有很多工具可以让开发工作变得更容易,但是发现和排查线上问题的过程仍然在很多时候让我们觉得很痛苦。当生产系统中产生了一个bug时,我们如何快速地得到报警?如何评估它的影响和紧迫性?如何快速地找到问题的根源?当hotfix完修复程序后,又如何知道它是否解决了问题? Sentry在帮助我们与现有流程集成时回答了这些问题。例如,线上有一个bug,代码的某处逻辑的NullPointerException造成了这个问题,Sentry会立即发现错误,并通过邮件或其他基于通知规则的集成通知到相关责任人员,这个通知可以把我们引入到一个指示板,这个指示板为我们提供了快速分类问题所需的上下文,如:频率、用户影响、代码那一部分受到影响以及那个团队可能是问题的所有者。 然后,它会显示帮助我们调试的详细信息,比如堆栈跟踪、堆栈本地信息、前面的事件、可能导致问题的提交以及在错误发生时捕获的定制数据。我们还可以在JIRA等项目管理工具中自动开始跟踪问题。 看到这里,是不是觉得Sentry确实是一个好东西呢? Sentry的原理 那么Sentry是如何实现实时日志监控报警的呢?首先,Sentry是一个C/S架构,我们需要在自己应用中集成Sentry的SDK才能在应用发生错误是将错误信息发送给Sentry服务端。根据语言和框架的不同,我们可以选择自动或自定义设置特殊的错误类型报告给Sentry服务端。 而Sentry的服务端分为web、cron、worker这几个部分,应用(客户端)发生错误后将错误信息上报给web,web处理后放入消息队列或Redis内存队列,worker从队列中消费数据进行处理。 Docker化安装&部署 1、安装Docker Docker是一个开源的应用容器引擎,可以让开发者及运维人员方便地将他们的应用及依赖包打包到一个可移植的容器中,然后发布到任何流行的机器上。通过Docker可以很方便地安装Sentry服务及其所依赖的服务。 具体安装方法可以参考链接: https://www./get-started 2、编译容器 找到一个安装目录,当前假定为 /data/sentry,并进入此目录。 首先拉取配置和构建文件仓库: git clone https://github.com/getsentry/onpremise.git 然后进入目录仓库目录,默认为 onpremise。 创建以下文件夹:
下一步生成秘钥: 这一步会产生一个秘钥,复制它到 docker-compose.yml 文件的 SENTRY_SECRET_KEY 项,并取消 SENTRY_SECRET_KEY 项的注释,例子如下: #Run `docker-compose run web config generate-secret-key`# to get the SENTRY_SECRET_KEY value.SENTRY_SECRET_KEY: '*********************' 然后创建相关数据库和账号:
这一步会要求你填写一个账号密码,用于安装完成之后登录后台的管理员账号,请填写并记录。 使用 docker-compose 启动所有容器并提供服务:
命令可以看到类似如下的容器列表: 进入容器进行具体查看: docker exec -it 0ae60dab3f0c /bin/bash 3、访问实例 此时Sentry服务端就安装成功了! 客户端SDK 安装完Sentry服务端后,我们就可以在应用中集成Sentry客户端SDK,实时上报错误日志了。 具体可参考如下链接: https://docs./quickstart/#pick-a-client-integration https://docs./server/installation/ https://github.com/getsentry/onpremise — 完 — 如果觉得小哥在认真写文章,对你有所帮助 |
|