Docker运维

Sentry-docker版本

2021-10-19  本文已影响0人  阿当运维

Sentry如何通过docker方式搭建?

简介

对于每一个项目,我们都没办法保证代码零BUG,零报错,即便是经历过测试,在上线后也会出现一些你预料不到的问题,而这种情况下,广大的用户其实才是最好的测试者。而sentry就扮演着一个错误收集的角色,将你的项目和sentry结合起来,无论谁在项目使用中报错,sentry都会第一次时间通知开发者,出现了什么错误,错误出现在哪,帮你记录错误,便于你解决问题,这就是sentry。使用方式,是在前端项目中配置sentry相关引用,捕捉错误,在sentry服务端接收。

环境:

Ubantu v20.04(华为云)
Docker : v19.03.15
Docker-compose:v1.28.6
sentry:9.1.2镜像 (docker)
redis (华为云)
postgre:14.0(docker)

宿主机持久化目录(对应的docker-compose启动的目录)
posegres: /op/postgres/data
sentry: /opt/sentry/conf /opt/sentry/data

Sentry 搭建

sentry官方提供的启动方式一共需要3个镜像,其实都是依据sentry镜像,每个镜像运行一个不同的命令,共同组成sentry服务。
三个image分别为:

一. 从0开始搭建sentry

1.启动一个redis容器
docker run -d --name sentry-redis redis
2.启动一个postgres容器

注意:这里最好是持久化数据到宿主机,后面sentry初始化创建库,表都是创建在这个postgres数据库中。
宿主机创建posetgres持久化目录

mkdir -pv /opt/postgres/data
docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=123456 -e POSTGRES_USER=sentry -v /opt/postgres/data:/var/lib/postgresql/data -p 5432:5432 postgres:14.0
3. 运行sentry config 并记录下key值
docker run --rm sentry config generate-secret-key
记录key值 :
8%a043n)x!oaon=kwu_yga5+&igl&k%zc&p)+2rs_wbx+p@7%f
4.启动sentry : 初始化 (key值写自己的)
docker run -it --rm -e SENTRY_SECRET_KEY='8%a043n)x!oaon=kwu_yga5+&igl&k%zc&p)+2rs_wbx+p@7%f' --link sentry-postgres:postgres --link sentry-redis:redis sentry upgrade

注意: 这里会建库建表到link的 postgres容器中,最后提示创建超级管理员 ,创建上,初始化完成。
下面运行sentry,还是建议将配置文件最开始就持久化出来,方面我们后期修改。
宿主机上创建sentry持久化目录:

mkdir -pv /opt/sentry/conf  
mkdir -pv /opt/sentry/data
5. 运行sentry - server
docker run -d --name my-sentry -e SENTRY_SECRET_KEY='8%a043n)x!oaon=kwu_yga5+&igl&k%zc&p)+2rs_wbx+p@7%f' --link sentry-redis:redis --link sentry-postgres:postgres -v /opt/sentry/conf:/etc/sentry/ -p 9000:9000 sentry:9.1.2
6. 运行sentry - cron
docker run -d --name sentry-cron -e SENTRY_SECRET_KEY='8%a043n)x!oaon=kwu_yga5+&igl&k%zc&p)+2rs_wbx+p@7%f' --link sentry-postgres:postgres --link sentry-redis:redis  -v /opt/sentry/conf:/etc/sentry/ sentry:9.1.2 run cron
6. 运行sentry - worker
docker run -d --name sentry-worker-1 -e SENTRY_SECRET_KEY='8%a043n)x!oaon=kwu_yga5+&igl&k%zc&p)+2rs_wbx+p@7%f' --link sentry-postgres:postgres --link sentry-redis:redis  -v /opt/sentry/conf:/etc/sentry/  sentry:9.1.2 run worker

到此sentry依照官方docker方式搭建完成,可以先试下是否可以正常访问:http://yours ip :9000/

image.png

二. 用docker-compose来管理sentry

前面我们已经按照官方的docker方式搭建好了,也是最传统的方式。显然,一个个的容器是单独启动的,也就意味着我们需要单独去管理,这也并不是我们预期的那样,问题来了:

1. 想用公有云上的redis服务或者数据库服务?

前面已经将sentry容器中的配置文件持久化出来了,我们直接修改配置文件,连接我们自己的redis或者数据库,我这里只修改redis。
1.config.yaml 修改部分

redis.clusters:
  default:
    hosts:
      0:
        host: dev.dbaddr1.xxxxx.com
        port: 6379
        password: xxxxxxx
  1. sentry.conf.py 在有注释[redis]字段处添加
redis = 'dev.dbaddr1.xxxxxx.com'
redis_password = 'xxxxxxx'
redis_port = '6379'
redis_db = '0'

除了以上直接修改配置文件,其实还可以在启动容器的时候通过变量传参进去。sentry的配置文件是通过变量来定义这些地方的,比如下面docker-compose中我就通过变量来传postgres的账号密码到sentry中。

2. 用docker-compose管理

这里改成docker-compose方式可实现一键管理多个容器。
vim /opt/sentry/docker-compose.yaml

version: '3'
services:
    sentry-postgres:
      image: postgres:14.0
      privileged: true
      restart: unless-stopped
      volumes:
        - /opt/postgres/data:/var/lib/postgresql/data
      environment:
        POSTGRES_USER: sentry
        POSTGRES_PASSWORD: 123456
        SENTRY_SECRET_KEY: 8%a043n)x!oaon=kwu_yga5+&igl&k%zc&p)+2rs_wbx+p@7%f
      networks:
        - sentry-jkyy
      ports:
        - "5432:5432"

    sentry-server:
      image: sentry:9.1.2
      privileged: true
      restart: unless-stopped
      volumes:
        - /opt/sentry/data:/var/lib/sentry/files
        - /opt/sentry/conf:/etc/sentry/
      environment:
        C_FORCE_ROOT: "true"
        SENTRY_SECRET_KEY: 8%a043n)x!oaon=kwu_yga5+&igl&k%zc&p)+2rs_wbx+p@7%f
        #SENTRY_POSTGRES_HOST: 192.168.1.10
        SENTRY_POSTGRES_HOST: sentry-postgres
        SENTRY_DB_NAME: sentry
        SENTRY_DB_USER: sentry
        SENTRY_DB_PASSWORD: 123456
        SENTRY_POSTGRES_PORT: 5432  
      depends_on:
        - sentry-postgres
      command: /bin/bash -c "sentry run web" 
      ports: 
        - "9000:9000"
      networks:
        - sentry-jkyy
    
    sentry-worker:
      image: sentry:9.1.2
      privileged: true
      restart: unless-stopped
      volumes:
        - /opt/sentry/data:/var/lib/sentry/files
        - /opt/sentry/conf:/etc/sentry/
      environment:
        C_FORCE_ROOT: "true"
        SENTRY_SECRET_KEY: 8%a043n)x!oaon=kwu_yga5+&igl&k%zc&p)+2rs_wbx+p@7%f
        #SENTRY_POSTGRES_HOST: 192.168.1.10
        SENTRY_POSTGRES_HOST: sentry-postgres
        SENTRY_DB_NAME: sentry
        SENTRY_DB_USER: sentry
        SENTRY_DB_PASSWORD: 123456
        SENTRY_POSTGRES_PORT: 5432
      depends_on:
        - sentry-postgres
      command: /bin/bash -c "sentry run worker"
      networks:
        - sentry-jkyy
#busybox用来调试服务是否可以通信,这个可加可不加。
    sentry-busybox:
      image: busybox:1.28.2
      restart: unless-stopped
      depends_on:
        - sentry-postgres
      networks:
        - sentry-jkyy
      command: /bin/sh -c "ping 127.0.0.1 > /dev/null"

    sentry-cron:
      image: sentry:9.1.2
      privileged: true
      restart: unless-stopped
      volumes:
        - /opt/sentry/data:/var/lib/sentry/files
        - /opt/sentry/conf:/etc/sentry/
      environment:
        C_FORCE_ROOT: "true"
        SENTRY_SECRET_KEY: 8%a043n)x!oaon=kwu_yga5+&igl&k%zc&p)+2rs_wbx+p@7%f
        #SENTRY_POSTGRES_HOST: 192.168.1.10
        SENTRY_POSTGRES_HOST: sentry-postgres
        SENTRY_DB_NAME: sentry
        SENTRY_DB_USER: sentry
        SENTRY_DB_PASSWORD: 123456
        SENTRY_POSTGRES_PORT: 5432
      depends_on:
        - sentry-postgres
      command: /bin/bash -c "sentry run cron"
      networks:
        - sentry-jkyy
networks:
  sentry-jkyy:
启动sentry
docker-compose up -d 

访问本地:9000端口即可访问sentry-web界面

配置项目

1 .创建一个js项目
image.png
2. 找到DSN

DSN创建的时候这个界面会自动跳出来,或者设置中找到DSN
DSN是连接客户端(项目)与sentry服务端,让两者能够通信的钥匙;每当我们在sentry服务端创建一个新的项目,都会得到一个独一无二的DSN,也就是密钥。在客户端初始化时会用到这个密钥,这样客户端报错,服务端就能抓到你对应项目的错误了。之前版本的sentry对于密钥分为公钥和私钥,一般前端用公钥(DSN(Public)),但是现在的版本舍弃了这种概念,只提供了一个密钥。

image.png
3. 引入依赖配置到项目中

根据自己的前端框架不同引入安装不同依赖,再把dsn配置到你写的错误代码中,就可以捕获到了。
https://docs.sentry.io/platforms/javascript

image.png

遇到的问题

在配置项目的过程中,如小程序必须需要https的接口那sentry的访问链接建议提前做好https,这样创建项目时才可保证
自动生成出来的dsn等链接是https的。如果http://sentry.url 那出来的dsn也是http的,此时在配置https,只能重新搭建sentry进行初始化。

补充:关于postgres的一些操作

posetgre:
进入:
psql -U postgres
创建数据库
create database sentry;
查看数据库
\l
上一篇 下一篇

猜你喜欢

热点阅读