• 一、centos7 docker方式部署sentry


    一、什么是Sentry?

    Sentry可以帮助我们完成以下工作:例如,线上有一个bug,代码的某处逻辑的NullPointerException造成了这个问题,Sentry会立即发现错误,并通过邮件或其他基于通知规则的集成通知到相关责任人员,这个通知可以把我们引入到一个指示板,这个指示板为我们提供了快速分类问题所需的上下文,如:频率、用户影响、代码那一部分受到影响以及那个团队可能是问题的所有者。

    然后,它会显示帮助我们调试的详细信息,比如堆栈跟踪、堆栈本地信息、前面的事件、可能导致问题的提交以及在错误发生时捕获的定制数据。我们还可以在JIRA等项目管理工具中自动开始跟踪问题。

    二、Sentry原理

    Sentry到底是如何实现实时日志监控报警的呢?首先,Sentry是一个C/S架构,我们需要在自己应用中集成Sentry的SDK才能在应用发生错误是将错误信息发送给Sentry服务端。根据语言和框架的不同,我们可以选择自动或自定义设置特殊的错误类型报告给Sentry服务端。

    而Sentry的服务端分为web、cron、worker这几个部分,应用(客户端)发生错误后将错误信息上报给web,web处理后放入消息队列或Redis内存队列,worker从队列中消费数据进行处理。

    三、安装部署(docker方式安装)

    Sentry服务依赖比较多,并且官方也推荐使用docker方式进行安装,需要先部署docker环境

    1.安装docker环境

    # 安装docker依赖环境
    [root@sentry ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 添加yum源
    [root@sentry ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    # 安装docker-ce
    [root@sentry ~]# yum install docker-ce
    
    # 安装docker-compose
    [root@sentry ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    [root@sentry ~]# chmod +x /usr/local/bin/docker-compose
    [root@sentry ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
    # 或者直接通过pip方式安装
    [root@sentry ~]# git clone https://github.com/getsentry/onpremise.git 
      
    
    pip install docker-compose
    

      

    docker官方文档:

    https://docs.docker.com/install/linux/docker-ce/centos/

    https://docs.docker.com/compose/install/

    2.启动docker服务

    [root@sentry ~]# systemctl start docker
    [root@sentry ~]# systemctl enable docker
    

    3.从sentry官方网站下载源码

    [root@sentry ~]# git clone https://github.com/getsentry/onpremise.git

    然后切换到onpremise目录下,可以直接执行./install.sh脚本进行一键安装,不过在安装之前需要修改几个配置项

    [root@sentry ~]# cd onpremise
    [root@sentry onpremise]# vim docker-compose.yml
    # NOTE: This docker-compose.yml is meant to be just an example of how
    # you could accomplish this on your own. It is not intended to work in
    # all use-cases and must be adapted to fit your needs. This is merely
    # a guideline.
    
    # See docs.getsentry.com/on-premise/server/ for full
    # instructions
    
    version: '3.4'
    
    x-defaults: &defaults
      restart: unless-stopped
      build:
        context: .
        args:
          SENTRY_IMAGE: ${SENTRY_IMAGE}
      depends_on:
        - redis
        - postgres
        - memcached
        - smtp
      env_file: .env
      environment:
        SENTRY_EMAIL_BACKEND: 'django_smtp_ssl.SSLEmailBackend'
        SENTRY_MAILER_EMAIL_BACKEND: EMAIL_BACKEND
        SENTRY_MEMCACHED_HOST: memcached
        SENTRY_REDIS_HOST: redis
        
        # 新增以下内容,也可以不配置,等全部安装好,首次进入系统时也可以进行配置
        SENTRY_POSTGRES_HOST: postgres
        SENTRY_EMAIL_HOST: "smtp.mxhichina.com"
        SENTRY_EMAIL_USER: "xulei@xl-blog.cn"
        SENTRY_SERVER_EMAIL: "xulei@xl-blog.cn"
        SENTRY_EMAIL_PASSWORD: "passwod"
        SENTRY_EMAIL_USE_TLS: "false"  # 如果你使用的服务器不让用25端口,则需要开启TLS,将flase改为true即可
        SENTRY_EMAIL_PORT: 25  # TLS为true改为456或587
      volumes:
        - sentry-data:/var/lib/sentry/files
    
    
    services:
      smtp:
        restart: unless-stopped
        image: tianon/exim4
    
      memcached:
        restart: unless-stopped
        image: memcached:1.5-alpine
    
      redis:
        restart: unless-stopped
        image: redis:3.2-alpine
    
      postgres:
        restart: unless-stopped
        image: postgres:9.5
        volumes:
          - sentry-postgres:/var/lib/postgresql/data
    
      web:
        <<: *defaults
        ports:
          - '9000:9000'
    
      cron:
        <<: *defaults
        command: run cron
    
      worker:
        <<: *defaults
        command: run worker
    
    
    volumes:
        sentry-data:
          external: true
        sentry-postgres:
          external: true

    修改sentry.conf.py文件

    [root@sentry onpremise]# vim sentry.conf.py
    # 在文件首部增加这两行代码,如果不加的话,可以在后面使用邮件功能会出现”SMTPServerDisconnected: Connection unexpectedly closed“错误
    
    import socket
    
    socket.setdefaulttimeout(20)

    现在可以执行./install.sh脚本进行自动安装,脚本安装过程中会让你输入邮箱和密码,这个是作用于首次登陆时使用

    脚本安装完,可以执行以下命令启动容器

    [root@sentry onpremise]# docker-compose up -d
    WARNING: The SENTRY_IMAGE variable is not set. Defaulting to a blank string.
    Creating network "onpremise_default" with the default driver
    Creating onpremise_postgres_1 ... done
    Creating onpremise_redis_1 ... done
    Creating onpremise_smtp_1 ... done
    Creating onpremise_memcached_1 ... done
    Creating onpremise_web_1 ... done
    Creating onpremise_cron_1 ... done
    Creating onpremise_worker_1 ... done
    

    四、登陆sentry后台

    sentry服务默认是启动在9000端口,你可以在浏览器中输入http://<你的ip>:9000

     输入刚刚执行脚本时输入的账号和密码登陆即可。

    然后我们进入到admin后台,测试一下邮件功能,看邮件是否能正常发送,如果你的邮箱收到如下信息,则说明邮件服务配置无问题:

    五、Sentry初次体验

    经过上面的步骤,Sentry的基础环境也都配置好,接下来我们需要来感受一下Sentry的强大之处

    1.创建一个project

     创建完成后,点击python代码,因为我们是用python代码进行测试,Sentry会为我们生成一个简单的测试demo,不过我们需要先安装它的sdk

    把上面的代码放到自己的py文件中,执行后,系统会报错,这个时候你可以在后台看到这个错误,这个代码中最主要的是init目标中的代码,Sentry也是通过它给服务端上报错误信息的

    以上就是全部安装过程

  • 相关阅读:
    J.U.C并发框架源码阅读(十五)CopyOnWriteArrayList
    J.U.C并发框架源码阅读(十四)ScheduledThreadPoolExecutor
    J.U.C并发框架源码阅读(十三)ThreadPoolExecutor
    Django基础之request对象
    Django基础之给视图加装饰器
    Django基础之初识视图
    Django基础之CBV和FBV
    Django基础之template
    Django基础之命名空间模式(include)
    Django基础之命名URL和URL反向解析
  • 原文地址:https://www.cnblogs.com/watchslowly/p/11309052.html
Copyright © 2020-2023  润新知