Sentry(直译为:哨兵)是一个开源错误跟踪服务,帮助开发人员实时监控和修复崩溃

Sentry本质上是一种帮助您实时监控和修复崩溃的服务

1.  安装客户端SDK

这里我们安装Java平台的SDK,而且使用logback的方式集成

https://docs.sentry.io/clients/java/

1.1.  Logback

https://docs.sentry.io/clients/java/modules/logback/

首先,引入maven依赖

<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-logback</artifactId>
<version>1.7.16</version>
</dependency>

接着,添加logback.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Configure the Console appender -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender> <!-- Configure the Sentry appender, overriding the logging threshold to the WARN level -->
<appender name="Sentry" class="io.sentry.logback.SentryAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> <root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="Sentry" />
</root>
</configuration>

最后,添加sentry.properties配置

主要是设置DSN(Data Source Name)

设置DSN的方式有多种(比如:sentry.properties,或者环境变量SENTRY_DSN,或者运行时参数)

具体参见  https://docs.sentry.io/clients/java/config/#setting-the-dsn

1.2.  Spring

https://docs.sentry.io/clients/java/modules/spring/

用Spring Boot的话这样写即可

@Bean
public ServletContextInitializer sentryServletContextInitializer() {
return new io.sentry.spring.SentryServletContextInitializer();
}

1.3.  示例配置

配置项很多,在此不一一列举,更多请参见  https://docs.sentry.io/clients/java/config/#setting-the-dsn

有两个必须配置的选项:dsn 和 stacktrace.app.packages

https://docs.sentry.io/clients/java/config/#in-application-stack-frames

工程结构

pom.xml

logback.xml

sentry.properties

接下来,启动项目,并访问,令其报错,然后通过Web管理后台查看

同时,也收到了邮件

点进去,查看详情,可以看到异常信息,还可以看到配置文件中我们带的参数,还可以对异常进行处理

1.4.  手动捕获异常

/**
* An example method that throws an exception.
*/
void unsafeMethod() {
throw new UnsupportedOperationException("You shouldn't call this!");
} /**
* Examples using the (recommended) static API.
*/
void logWithStaticAPI() {
// Note that all fields set on the context are optional. Context data is copied onto
// all future events in the current context (until the context is cleared). // Record a breadcrumb in the current context. By default the last 100 breadcrumbs are kept.
Sentry.getContext().recordBreadcrumb(
new BreadcrumbBuilder().setMessage("User made an action").build()
); // Set the user in the current context.
Sentry.getContext().setUser(
new UserBuilder().setEmail("hello@sentry.io").build()
); // Add extra data to future events in this context.
Sentry.getContext().addExtra("extra", "thing"); // Add an additional tag to future events in this context.
Sentry.getContext().addTag("tagName", "tagValue"); /*
This sends a simple event to Sentry using the statically stored instance
that was created in the ``main`` method.
*/
Sentry.capture("This is a test"); try {
unsafeMethod();
} catch (Exception e) {
// This sends an exception event to Sentry using the statically stored instance
// that was created in the ``main`` method.
Sentry.capture(e);
}
} /**
* Examples that use the SentryClient instance directly.
*/
void logWithInstanceAPI() {
// Retrieve the current context.
Context context = sentry.getContext(); // Record a breadcrumb in the current context. By default the last 100 breadcrumbs are kept.
context.recordBreadcrumb(new BreadcrumbBuilder().setMessage("User made an action").build()); // Set the user in the current context.
context.setUser(new UserBuilder().setEmail("hello@sentry.io").build()); // This sends a simple event to Sentry.
sentry.sendMessage("This is a test"); try {
unsafeMethod();
} catch (Exception e) {
// This sends an exception event to Sentry.
sentry.sendException(e);
}
}

1.5.  文档

Sentry还有很多很多配置,更多请参见  https://docs.sentry.io/

错误数据  https://docs.sentry.io/enriching-error-data/context/?platform=electron

集成  https://docs.sentry.io/workflow/releases/?platform=electron

用户和组  https://docs.sentry.io/accounts/membership/

好,接下来说重点

在刚才的告警中,仅仅只是使用邮件的方式进行通知,这是不够的,因为你会发现在平时的工作中很少有人去实时关注邮件,因为实在是太多了(GitLab、Jira、Wiki、还有各种会议邮件抄送,都懒得打开),这还是上班时间,下班以后就更不好说了,因此,更通常的做法是采用钉钉群机器人通知。每当出现异常告警,钉钉群机器人都会@指定的负责人,这样效率更高,能够更快速的响应线上问题,其实最主要是一般钉钉都是随时在线的。

很可惜!Sentry默认的服务中是不支持钉钉的,它并没有集成钉钉。我也是找到好久才发现的

项目告警里面的集成也没有

后来,我看到有一个 WebHooks ,于是我就把钉钉群机器人的回调地址填到这里,发现不行

后来,我猜测应该是数据格式不对,但又不支持自定义发送的数据格式

没有办法,最后我决定不用Sentry的服务器,自己搭建服务端,自定义的应该能够支持钉钉

2.  搭建Sentry服务端

https://docs.sentry.io/server/installation/

2.1.  安装前的准备

PostgreSQL : 需要 postgres:9.5

https://www.postgresql.org/download/

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

Redis : 需要2.8.9以上的版本

brew install redis

https://redis.io/download

2.2.  采用Python安装

官方提供两种安装方式:Docker 和 Python,这里我采用Python方式安装

https://docs.sentry.io/server/installation/python/

2.2.1.  安装Python 2.7

brew install python2

2.2.2.  设置虚拟环境

pip install -U virtualenv
virtualenv /www/sentry/
source /www/sentry/bin/activate

2.2.3.  安装Sentry

pip install -U sentry

git地址:https://github.com/getsentry/sentry

初始化配置

sentry init /etc/sentry

配置postgressql

sentry.conf.py

配置Redis

配置邮件

创建数据库

接下来的三条命令在我们刚才设置的虚拟环境下执行

# If you kept the database ``NAME`` as ``sentry``
$ createdb -E utf- sentry $ SENTRY_CONF=/etc/sentry sentry upgrade # create a new user
$ SENTRY_CONF=/etc/sentry sentry createuser

2.2.4.  启动Web服务

SENTRY_CONF=/etc/sentry sentry run web

2.2.5.  启动后台Worker进程

SENTRY_CONF=/etc/sentry sentry run worker

2.2.6.  启动Cron进程

SENTRY_CONF=/etc/sentry sentry run cron

以下是我安装过程中执行的一些命令

2.2.7.  访问 http://localhost:9000/

登录(PS:用户名和密码就是我们在安装Sentry的时候设置的用户名和密码,这里我设置用户名和密码分别是:jiansheng80@126.com/12345678)

设置(Root URL是将来上报事件的服务器地址,没有域名的话可以就写localhost:9000)

进入主界面,可以先设置一下语言和时区

新建一个项目

查看客户端秘钥

接下来可以查看并修改系统设置

3.  钉钉群机器人

Webhook可以理解为是一种回调机制,一个回调地址

https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.p2lr6t&treeId=257&articleId=105733&docType=1

添加一个自定义的机器人

于是我们就可以拿到一个webhook地址,这个地址里面带着access_token

按照钉钉的消息格式,我们就可以给这个群发消息

https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.karFPe&treeId=257&articleId=105735&docType=1

4.  Sentry集成钉钉插件

4.1.  安装sentry_dingding插件

我找到两个相似的插件

插件一:https://github.com/anshengme/sentry-dingding

这个插件相对新一点儿,最近一次提交是5个月前

安装方式有两种,

第一种: pip install sentry-dingding

第二种: pip install git+https://github.com/anshengme/sentry-dingding.git

插件二:https://github.com/evilbs/sentry-dingtalk

安装方式也有两种,

第一种: pip install git+https://github.com/evilbs/sentry-dingtalk.git

第二中: 先git clone到本地,然后执行 pip install 本地目录

最后,无论哪个插件,无论哪种方式,这条命令必须在虚拟路径下执行

安装完成后可以通过sentry plugins list命令查看

接下来,安装完了还不算完,最重要的是检查一下有没有错误

同样,在虚拟路径下执行 sentry upgrade

但是,当你执行以后,你会发现报错了

redis版本冲突是什么鬼?意思是,Python2.7需要的redis版本是2.10.5,而redis-py-cluster需要依赖的redis版本最新是2.10.6

怎么办呢?重新安装一下吧

pip uninstall redis
pip install redis==2.10.

再执行 sentry upgrade,还是版本冲突,于是又改redis-py-cluster的版本

pip uninstall redis-py-cluster
pip install redis-py-cluster==1.3.5

问题又来了,说Sentry 9.0.0需要的redis-py-cluster版本最小是1.3.4,不能大于或等于1.4.0

几经折腾,终于找到一个既满足sentry 9.0.0,又满足python2.7对redis的版本要求,就是1.3.4版本

再次执行sentry upgrade成功

重启Web服务

lsof -i tcp:
kill -
sentry run web
sentry run worker

刷新页面,终于看到了

填写token

发个消息看看效果

此处应有掌声,啊哈哈哈~~

5.  参考文档

https://docs.sentry.io/server/

https://docs.sentry.io/server/installation/python/

https://pypi.org/

https://github.com/anshengme/sentry-dingding

https://logback.qos.ch/codes.html#appender_order

Sentry快速开始并集成钉钉群机器人的更多相关文章

  1. nodejs通过钉钉群机器人推送消息

    nodejs 通过钉钉群机器人推送消息 Intro 最近在用 nodejs 写爬虫,之前的 nodejs 爬虫代码用 js 写的,感觉可维护性太差,也没有智能提示,于是把js改用ts(typescri ...

  2. Zabbix通过与微信、钉钉整合实现实时告警

    abbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信.钉钉作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警 ...

  3. Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力

    阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署使用Isito.Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixe ...

  4. TFS发布计划发送到钉钉消息群

    由于工作中需要用到钉钉,每天都要和钉钉打交道:上下班打卡.出差请假流程.各种工作讨论组,不一而足,工作已然和钉钉绑在了一起,难怪有广告词: 微信是一个生活方式,钉钉是一个工作方式. 我们是钉钉机器人内 ...

  5. 使用C#开发windows服务定时发消息到钉钉群_群组简单消息

    前言:本提醒服务,是由C#语言开发的,主要由windows服务项目和winform项目组成,运行服务可实现功能:向钉钉自定义机器人群组里,定时,定次,推送多个自定义消息内容,并实现主要功能的日志记录. ...

  6. sentry之二:sentry配置钉钉和email

    springboot+springcloud后台项目配置日志采集 gradle: compile 'com.getsentry.raven:raven-logback:8.0.2' compile ' ...

  7. Python钉钉报警及Zabbix集成钉钉报警

    钉钉报警设置 创建群机器人 11111 接口地址 发送短消息 发送普通消息 import requests import json url = 'https://oapi.dingtalk.com/r ...

  8. Java项目中集成钉钉机器人推送消息提醒

    前言: 项目中有一个需求,当有新订单产生的时候,希望能够及时通知到业务相关人员进行处理,整体考虑了一下,选用了钉钉机器人提醒功能(公司内部主要也是使用钉钉进行通讯). 操作: 主要分为两部分进行处理: ...

  9. jenkins 集成钉钉机器人

    最早做Jenkins发布完成以后通过邮件发送信息通知相关的联系人,发现邮件会受限于大家接收的设置,导致不能及时的看到相关的发布内容,公司使用钉钉做为公司内部的通讯工具,所以想通过Jenkins发布完成 ...

随机推荐

  1. 语音识别中的CTC算法的基本原理解释

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文作者:罗冬日 目前主流的语音识别都大致分为特征提取,声学模型,语音模型几个部分.目前结合神经网络的端到端的声学模型训练方法主要CTC和基 ...

  2. 关于eclipse的一些问题

    解决Eclipse,MyEclipse出现An error has occurred,See error log for more details的错误 方法1. 在"开始"--& ...

  3. adSage :2013年教育行业搜索引擎投放分析报告

  4. capwap学习笔记——capwap的前世今生(转)

    1 capwap的前世今生 1.1 胖AP.瘦AP.AC 传统的WLAN网络都是为企业或家庭内少量移动用户的接入而组建的.因此,只需要一个无线路由器就可以搞定了,就好像现在家用的无线路由器就是胖AP. ...

  5. 深入解读Resnet

    残差网络的设计目的 随着网络深度增加,会出现一种退化问题,也就是当网络变得越来越深的时候,训练的准确率会趋于平缓,但是训练误差会变大,这明显不是过拟合造成的,因为过拟合是指网络的训练误差会不断变小,但 ...

  6. 理解矩阵与线性代数<转>

    作者:张帅链接:https://www.zhihu.com/question/21082351/answer/34361293来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  7. 关于Linux虚拟化技术KVM的科普 科普一(先用起来!)

    是骡子是马是拉出来溜溜,通过<KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机>跑一遍,就会对KVM.QEMU-KVM有个大概的认识了. qemu-kvm已经不单独存在,qemu加上 ...

  8. Android 高仿微信6.0主界面 带你玩转切换图标变色

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41087219,本文出自:[张鸿洋的博客] 1.概述 学习Android少不了模仿 ...

  9. Python 三级菜单 增强版

    需要实现的功能是:三级菜单1.从文本内读出选项2.查询每一级的选项,并能对选项进行增/删/改功能3.每一级可以退出程序或者返回上一层 2018-5-14 更新内容 思路 实现过程中的BUG及解决方案: ...

  10. 好代码是管出来的——浅谈.Net Core的代码管理方法与落地(更新中...)

    软件开发的目的是在规定成本和时间前提下,开发出具有适用性.有效性.可修改性.可靠性.可理解性.可维护性.可重用性.可移植性.可追踪性.可互操作性和满足用户需求的软件产品. 而对于整个开发过程来说,开发 ...