Docker安装集中错误日志监控告警平台Sentry23.3教程

目录

一、背景

二、Sentry介绍

2.1、基本介绍

2.2、基本概念

三、Docker安装

四、Sentry安装

五、Sentry基本设置

六、Sentry新创建Java类型的项目

 七、项目中引入Sentry


一、背景

进入到微服务的开发时代后,Java项目的错误日志也极为重要,通常错误日志中,体现了一个业务逻辑的缺陷、BUG、潜在的隐患等各类问题,需要我们进行修复,同时对于错误日志,也需要开发人员第一时间进行发现,并触发告警,避免发生重大故障时才定位到问题的情况。

没有类似Sentry的软件,我们会怎样?

无论测试如何完善的程序,bug总是免不了会存在的,有些bug不是每次都会出现,测试时运行好好的代码可能在某个用户使用时就歇菜了,可是当程序在用户面前崩溃时,你是看不到错误的,当然你会说:”Hey, 我有记日志呢”。 但是说实话,程序每天每时都在产生大量的日志,而且分布在各个服务器上,并且如果你有多个服务在维护的话,日志的数量之多你是看不过来的吧。等到某天某个用户实在受不了了,打电话来咆哮的时候,你再去找日志你又会发现日志其实没什么用:缺少上下文,不知道用户什么操作导致的异常,异常太多(从不看日志的缘故)不知如何下手 等等

针对以上类似的现象,常见的历史处理方案如下:

1、后端用Shell脚本定时监控和扫描微服务的错误日志,同时根据日志中的关键信息进行告警,通常和一些企业工具的机器人进行搭配,比如飞书机器人、钉钉机器人等。

2、使用日志收集工具,将同台服务器上多个系统的日志集中存放到同个目录,使用rsync定时从多台服务器中拉取日志文件;

3、通过某些软件,对日志文件进行关键字匹配, 并将过滤结果通过邮件发送给运维人员和开发人员。

基于以上几点,可以实现我们的业务需求,但是也暴露出来了如下问题:

1、无法第一时间感知错误:脚本日志的拉取不是实时的,,web端用户的反馈也往往存在滞后。出现问题到解决问题的周期太长,容易导致工作陷入被动。

2、错误信息的获取相对低效:用户反馈和邮件告警包含的错误信息非常有限,,最终都不得不在大量的日志中上下翻看关联的信息.。可能还需要在测试环境下给代码埋点多获取一些中间变量数据,给定位问题带来很多麻烦。

3、日志的处理方式不够灵活:通常来说,除了程序运行出错,我们还关心其他异常情况,比如数据污染,非法请求,第三方API调用异常等。如果将此类等同错误记录下来,很容易造成告警滥发,而如果不处理此类异常,久而久之可能导致严重的问题。我们希望同样的日志内容可以根据场景不同灵活处理。

4、监控覆盖面有限:完整的监控应该涵盖脚本,后端以及前端三个部分。特别是我们新的运维系统实现了前后端分离之后,很多前端的问题无法被统一记录下来。

5、自己公司内部的项目或者给客户部署的项目中,偶尔会出现一些非必现的bug,调试起来很不方便。

基于这些现象,可以引入本文推荐的软件:Sentry。

二、Sentry介绍

2.1、基本介绍

Sentry是一款【跨平台】的软件,用于应用监控和错误追踪日志平台,它可以将应用程序产生的错误日志的聚合和监控,支持多种语言框架。分为客户端和服务端,客户端嵌入需要被监控的项目中,程序出现异常就会向服务端发送消息,服务端可以查看到日志详情。使用时可以直接使用线上服务,也可在本地部署。

Sentry官网: https://sentry.io/

Github项目地址: https://github.com/getsentry/onpremise

Sentry 官方提供免费版和收费版的服务,如果不想搭建本地服务的话直接用官方服务好了。Sentry是个开源的工具可以自行搭建(推荐使用Docker搭建);Sentry支持几乎所有主流开发语言和平台, 并提供了现代化UI。

2.2、基本概念

官方文档链接:

Key Terms | Sentry DocumentationLearn about the key concepts and features of Sentry.icon-default.png?t=N3I4https://docs.sentry.io/product/sentry-basics/key-terms/

重要的几个概念如下:

  • Alert:告警,当满足某些警报规则条件时,Sentry会向用户发送告警通知,让您实时了解代码的问题。提供了多种种类型的警报可用于自定义阈值和集成,也可以在业务系统中提供webhook地址,供Sentry调用。
  • DSN:数据源名称。DSN告诉Sentry SDK将事件发送到何处,以便将事件与正确的项目关联。当您创建项目时,Sentry会自动为您分配DSN。同时也是密钥, 用来进行客户端和服务器的通信。DSN是一个url, 比如https://1703147af2094458bevb1bfadcfa1c2:7e00a1d4cbd745c0b780451c3586d7f4@sentry.io/1545. 这类DSN是私密的, 还有一类是非私密的, 在Sentry后台中显示为DSN(public), 给前端项目使用.
  • event:事件, 是可操作数据的基本单位. 每一次日志输出就产生一个event. event并不一定就是错误, 如果日志记录级别设置很低, 那么后台会产生很多的event, 所以正确的设置日志级别很重要。
  • issue:工单”或者”问题”, 是同一类event的聚合. 某一个错误可能因为重复执行而被记录多出, 在sentry会自动聚合到一起, 方便处理. 通常我们操作的对象就是issue。

三、Docker安装

这里我们使用Docker环境来安装Sentry,这里简述下载CentOS系统中安装Docker的过程。

1、输入如下命令,安装Docker的依赖:

 sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2、输入如下命令,添加Docker的yum仓库地址

yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo

3、输入如下命令安装Docker

yum makecache fast
yum install docker-ce

4、输入如下命令,配置Docker的镜像加速地址:

 vi /etc/docker/daemon.json

添加如下内容:

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

5、输入如下命令启用Docker服务:

systemctl start docker

6、输入如下命令,查看版本:

 docker --version

7、输入如下命令,下载Docker-Compose

 curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

8、输入如下命令,赋予权限

chmod +x /usr/local/bin/docker-compose

9、输入如下命令,查看版本:

 docker-compose --version

四、Sentry安装

1、官方下载地址如下:

Release 23.3.0 · getsentry/sentry · GitHubDeveloper-first error tracking and performance monitoring - Release 23.3.0 · getsentry/sentryhttps://github.com/getsentry/sentry/releases/tag/23.3.02、下载后,将自建安装包,上传到服务器目录下,并进行解压,如下所示

unzip self-hosted-23.3.1.zip 
cd self-hosted-23.3.1
./install.sh

3、安装完成后,会创建一堆Docker容器,直接使用docker-compose直接启动即可。

 docker compose up -d

4、然后浏览器访问默认的9000端口进行访问,第一访问会提示设置根域名等信息,然后进入到登录页面:

 用户名信息在执行安装的过程中会进行设置。

五、Sentry基本设置

1、默认进入后的系统主页面如下所示:

 2、我们找到系统设置,更改默认语言、时区、和24小时时间控制如下图所示:

 3、设置完成后,如下图所示:

六、Sentry新创建Java类型的项目

1、在系统主页的上方,选择【创建项目】按钮,如下所示

 2、然后选择Java类型的项目,如下图所示:

 3、在第2选项和第3选项中输入项目名称和保持默认即可,如下所示:

 七、项目中引入Sentry

1、获得项目的DSN信息,针对刚才新创建的Java项目,在项目设置中复制DNS信息,如下图所示:

2、在当前自己的业务代码中,引入如下的Maven的Starter依赖:

<!-- Sentry Spring Boot Starter 将自动配置SentryAppender-->
        <dependency>
            <groupId>io.sentry</groupId>
            <artifactId>sentry-logback</artifactId>
            <version>6.16.0</version>
        </dependency>

3、然后再项目的application.yml文件中配置参数:q

sentry:
  debug: true
  dsn: "http://xxxxxxxxxxxxxxxxxxxxxxxxxx/2"

其中在DSN配置处,配置我们复制的当前项目的DSN即可。

配置好starter的信息后,默认会捕捉我们的系统异常信息,也可以在项目中手动的上报一些异常信息,使用方式如下所示:

 @Scheduled(cron = "0/5 * * * * ?")
    public void ExecClearGC1() {
        try {
            throw new Exception("Sentry.captureException(e)捕捉到的异常");
        } catch (Exception e) {
            Sentry.captureException(e);
        }
    }

通过调用Sentry类的captureException方法即可。

获取到异常以后,在系统的主页面中,选择问题菜单,就可以看到我们项目中的错误日志异常,进行了统一的监控和设置。

 看到这里是不是非常方便呢,通过引入这个操作,可以在出现系统错误异常的时候,提前发现问题,并统一的进行错误日志分析。

好,在下一篇的文章,我们尝试一下Sentry进行业务告警的操作。

如果正在阅读文章的你,喜欢这篇文章,请收藏、分享、关注、点赞吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值