Sentry-异常上报监控系统实践

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 监控系列

sentry

sentry是一个跨平台的异常上报监控系统。sentry主要用于实时监控的应用服务,收集相关应用服务在运行状态时出现的异常或者错误日志信息,并且sentry会通过自身集成的通知渠道将错误信息推送给维护人员。

sentry收集到的异常或者错误日志,会在告警规则的匹配下,第一时间让维护人员接收到服务运行的异常信息,便于快速定位问题以及解决问题。

sentry支持绝大多数的语言以及框架,使用相对便捷。

组件架构

安装

准备sentry的工作目录

mkdir sentry && cd $_
touch sentry.env docker-compose.yml # 分别填充以下内容

DotEnv

sentry.env

SENTRY_SECRET_KEY=0x4r6f^0ak5w_3)w1ybh2qbr4@-0tr33ey)lf*e5_cq55xae&5-)r*=9
DB_PASSWORD="bw1knjWnUA"
DB_USER=sentry

docker-compose

version: '2'

volumes:
   pgdb:

services:
  redis:
    image: redis:alpine
    restart: always
    #command: /bin/sh -c "redis-server --requirepass $$REDIS_HOST_PASSWORD"

  postgres:
    image: postgres
    environment:
      POSTGRES_USER: $$DB_USER
      POSTGRES_PASSWORD: $$DB_PASSWORD
      POSTGRES_DB: sentry
    volumes:
     - pgdb:/var/lib/postgresql/data
    env_file:
      - sentry.env

  sentry:
    image: sentry
    links:
     - redis
     - postgres
    ports:
     - 9000:9000
    environment:
      SENTRY_SECRET_KEY: $$SENTRY_SECRET_KEY
      SENTRY_POSTGRES_HOST: postgres
      SENTRY_DB_USER: $$DB_USER
      SENTRY_DB_PASSWORD: $$DB_PASSWORD
      SENTRY_REDIS_HOST: redis
    env_file:
      - sentry.env

  cron:
    image: sentry
    links:
     - redis
     - postgres
    command: "sentry run cron"
    environment:
      SENTRY_SECRET_KEY: $$SENTRY_SECRET_KEY
      SENTRY_POSTGRES_HOST: postgres
      SENTRY_DB_USER: $$DB_USER
      SENTRY_DB_PASSWORD: $$DB_PASSWORD
      SENTRY_REDIS_HOST: redis
    env_file:
      - sentry.env

  worker:
    image: sentry
    links:
     - redis
     - postgres
    command: "sentry run worker"
    environment:
      SENTRY_SECRET_KEY: $$SENTRY_SECRET_KEY
      SENTRY_POSTGRES_HOST: postgres
      SENTRY_DB_USER: $$DB_USER
      SENTRY_DB_PASSWORD: $$DB_PASSWORD
      SENTRY_REDIS_HOST: redis
    env_file:
      - sentry.env
  • 生成sentry secret key填充到sentry.env中的SENTRY_SECRET_KEY
docker run --rm sentry config generate-secret-key
  • 初始化数据库以及创建登录用户
docker-compose up -d # 部署sentry以及相关依赖的服务
docker-compose exec sentry sentry upgrade ## create user and password.

sentry dashboard使用

  1. 使用前面创建的用户以及密码登录

sentry dashboard login

  1. 创建项目

创建项目

  1. 一个配置demo

配置demo

大概就是这些,具体的各语言的SDK还要看对应的文档以及源码。

go sentry测试

本实例,将通过创建一个go语言编写的demo服务,测试错误上报到sentry的效果

  • 创建go项目
mkdir go-sentry-gin
cd $_
  • 初始化模块
go mod init go-gin-sentry
go get github.com/getsentry/sentry-go
go get github.com/getsentry/sentry-go/gin
  • source code
package main

import (
    "github.com/getsentry/sentry-go"
    sentrygin "github.com/getsentry/sentry-go/gin"
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    err := sentry.Init(sentry.ClientOptions{
        Dsn:         "http://c0056580f26c469c8cc31d780d1995a8@localhost:9000/6",
        Environment: "dev",
        Release:     "go-sentry-gin@0.0.1",
        Debug:       true,
    })
    if err != nil {
        sentry.CaptureMessage("Sentry initialization failed." + err.Error())
    }

    r := gin.Default()
    r.Use(sentrygin.New(sentrygin.Options{}))
    r.Use(func(ctx *gin.Context) {
        if hub := sentrygin.GetHubFromContext(ctx); hub != nil {
            hub.Scope().SetTag("someRandomTag", "maybeYouNeedIt")
            ctx.Next()
        }
    })
    r.GET("/demo", func(c *gin.Context) {
        if hub := sentrygin.GetHubFromContext(c); hub != nil {
            hub.WithScope(func(scope *sentry.Scope) {
                scope.SetExtra("unwantedQuery", "someQueryDataMaybe")
                hub.CaptureMessage("User provided unwanted query string, but we recovered just fine")
            })
            c.Status(http.StatusOK)
        }
        panic("error occured")
    })
    r.Run()
}

运行后,访问服务路由,错误日志信息即上报到sentry上

打开项目详情页,即可看到整个项目的状态信息

go-gin-sentry相关信息

参考

  1. https://blog.sentry.io/2019/05/16/introducing-snuba-sentrys-new-search-infrastructure
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
前端开发 机器人 网络安全
实践搭建Sentry异常中心结合Laravel使用
实践搭建Sentry异常中心结合Laravel使用
47 0
|
11月前
|
前端开发 机器人 网络安全
实践搭建Sentry异常中心结合Laravel使用
实践搭建Sentry异常中心结合Laravel使用
141 0
|
监控 前端开发 JavaScript
接入 Sentry 实现前端的异常上报
前端监控现在已经是老生常谈的一个话题了,我之前的一次面试中就被问到了有没有做过前端监控,我回答没做过。。。然后就没有然后了。
739 0
|
存储 缓存 监控
微服务架构统一异常监控Sentry
微服务架构统一异常监控Sentry
536 0
微服务架构统一异常监控Sentry
|
1月前
|
监控 Ubuntu Docker
Sentry 监控 Docker 方式部署
Sentry 监控 Docker 方式部署
188 0
|
1月前
|
监控 前端开发 JavaScript
Sentry 监控部署与使用(详细流程)
Sentry 监控部署与使用(详细流程)
349 0
|
10月前
|
存储 监控 前端开发
Sentry 监控部署与使用(详细流程)
Sentry 监控部署与使用(详细流程)
2085 0
|
10月前
|
监控 Ubuntu Unix
Sentry 监控 Docker 方式部署
Sentry 监控 Docker 方式部署
419 0
|
11月前
|
人工智能 监控 前端开发
大型网站重构指南 第1.3部分:前端监控和小程序监控 Sentry
大型网站重构指南 第1.3部分:前端监控和小程序监控 Sentry
828 0