美文网首页Docker
Docker - 如何Setup企业级Sentry系统

Docker - 如何Setup企业级Sentry系统

作者: 红薯爱帅 | 来源:发表于2021-05-22 08:06 被阅读0次

    1. 概述

    Sentry's application monitoring platform helps every developer diagnose, fix, and optimize the performance of their code.
    Sentry is a service that helps you monitor and fix crashes in realtime. The server is in Python, but it contains a full API for sending events from any language, in any application.

    Sentry提供免费和收费的公网服务,也支持内网部署,各有利弊。

    • 公网服务,节省很多维护和机器成本,并且保证了服务的可靠性。必要时,可用于备选方案或测试(内网sentry不可用时,可用于排除client问题)
    • 内网部署,数据更加安全,对于内网微服务集群是刚需,如果不需要采集公网用户端的crash时

    公网服务,可以在Sentry官网注册账号,创建Project后即可使用。

    sentry with docker

    本文重点介绍内网部署流程和测试。

    Sentry的内网部署,大致有两种方式:

    • 低版本9.x部署,功能有限,但是占用资源也少,运行复杂度也低,适合低并发的场景
    • 最新版本21.x部署,功能较全,占用资源也多,启动近30个container,适合高并发的场景。如果需要更加稳定可靠的服务,需要考虑改造成Sentry Cluster

    2. 低版本部署

    • 部署很简单,启动5个container即可正常使用。只是sentry版本很低,对client应该也有要求,需要用低版本。因此,不推荐使用此方法。

    • 但是,此方法是否支持高版本的sentry服务部署,尚未尝试。

    • 部署流程参考dockerhub
      https://hub.docker.com/_/sentry

    2.1. Start a Redis container

    $ docker run -d --name sentry-redis redis
    

    2.2. Start a Postgres container

    $ docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry postgres
    

    2.3. Generate a new secret key to be shared by all sentry containers. This value will then be used as the SENTRY_SECRET_KEY environment variable.

    $ docker run --rm sentry config generate-secret-key
    

    2.4. If this is a new database, you'll need to run upgrade

    $ docker run -it --rm -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry upgrade
    

    Note: the -it is important as the initial upgrade will prompt to create an initial user and will fail without it

    2.5. Now start up Sentry server

    $ docker run -d --name my-sentry -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-redis:redis --link sentry-postgres:postgres sentry
    

    2.6. The default config needs a celery beat and celery workers, start as many workers as you need (each with a unique name)

    $ docker run -d --name sentry-cron -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry run cron
    $ docker run -d --name sentry-worker-1 -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry run worker
    

    3. 最新版本部署

    Sentry官方支持企业内网部署:
    https://github.com/getsentry/onpremise

    3.1. 准备工作

    • Docker 19.03.6+
    • Compose 1.24.1+
    • 4 CPU Cores
    • 8 GB RAM
    • 20 GB Free Disk Space

    3.2. 部署流程

    $ git clone https://github.com/getsentry/self-hosted.git
    $ cd self-hosted
    $ ./install.sh
    $ docker-compose up -d
    

    如果需要配置geolocation,可以参考:https://develop.sentry.dev/self-hosted/geolocation/
    单独创建用户:docker-compose run --rm web createuser

    3.3. 可能遇到的问题

    3.3.1. Email配置

    修改文件:sentry/config.yml

    # mail.backend: 'smtp'  # Use dummy if you want to disable email entirely
    mail.host: 'smtp.exmail.qq.com'
    mail.port: 465
    mail.username: 'noreply@aawwee.cn'
    mail.password: 'xxxeeesss'
    mail.use-tls: false
    mail.use-ssl: true
    
    # NOTE: The following 2 configs (mail.from and mail.list-namespace) are set
    #       through SENTRY_MAIL_HOST in sentry.conf.py so remove those first if
    #       you want your values in this file to be effective!
    
    
    # The email address to send on behalf of
    mail.from: 'noreply@aawwee.cn'
    

    3.3.2. proxy问题

    如果公司是通过http_proxy访问公网,那么,在./install.sh时,因为要build docker image,所以需要修改~/.docker/config.json,增加proxies设置如下

    {
     "proxies":
     {
       "default":
       {
         "httpProxy": "http://127.0.0.1:3001",
         "httpsProxy": "http://127.0.0.1:3001",
         "noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
       }
     }
    }
    

    在启动sentry服务时,需要注释掉上述proxies设置,避免出现运行时域名解析或IP路由异常。

    4. 测试

    4.1. Python

    • run
    $ http_proxy='' python test.py
    
    • code
    # py38
    import logging
    import sentry_sdk
    from sentry_sdk.integrations.logging import LoggingIntegration
    from sentry_sdk import capture_message
    
    
    sentry_logging = LoggingIntegration(
        level=logging.INFO,       
        event_level=logging.ERROR 
    )
    
    sentry_sdk.init(
        "http://388ceb74a20847028c81dfc616843556@10.211.28.93:9000/1",
        traces_sample_rate=1.0,
        integrations=[sentry_logging],
        debug=True,
    )
    
    capture_message('Something went wrong!')
    division_by_zero = 1 / 0
    

    4.2. nodejs

    • run
    $ http_proxy='' node server/test
    
    • code
    const Sentry = require("@sentry/node")
    
    Sentry.init({
      dsn: "http://388ceb74a20847028c81dfc616843556@10.211.28.93:9000/1",
      appName: 'Sentry Test',
      tracesSampleRate: 1.0,
      debug: true,
    });
    
    Sentry.captureMessage('Hello, sentry world!')
    

    相关文章

      网友评论

        本文标题:Docker - 如何Setup企业级Sentry系统

        本文链接:https://www.haomeiwen.com/subject/loiujltx.html