zoukankan      html  css  js  c++  java
  • Centos7使用docker搭建Sentry

    1、安装docker

      Sentry 是一款基于 Django实现的错误日志收集和聚合的平台,它是 Python 实现的,但是其日志监控功能却不局限于python,对诸如 Node.jsphp,rubyC#,java 等语言的项目都可以做到无缝集成,甚至可以用来对iOSAndroid 移动客户端以及 Web前端异常进行跟踪。我们可以在程序中捕获异常,并发送到 Sentry服务端进行聚合统计、展示和报警。sentry官方推荐docker方式安装,使用到了docker-compose。docker至少是1.10.3以上的版本。为此需要使用centos7。

      Docker在2016年很早的时候就明确了将会在企业级方面重点跟进。而在短短的一年时间之内推出的1.12和1.13的版本在功能上确实是很大的进步。而在2017年的3月1号之后,Docker的版本命名开始发生变化,同时将CE版本和EE版本进行分开了,EE是企业版,CE是社区版,如果直接使用‘

     

    yum install -y docker-engine 或者
    
    yum install -y docker 安装的都是老版本docker

    我们采用的是安装Docker CE版:

    卸载旧版本Docker

    yum remove docker  docker-common  docker-selinux  docker-engine

    安装依赖

    1、安装依赖包

    yum install -y yum-utils   device-mapper-persistent-data   lvm2

    2、添加稳定的源

    yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo

    3、可选操作:允许拓展最新的不稳定的repository

    yum-config-manager --enable docker-ce-edge

    安装docker-ce

    更新yum

    yum install makecache fast

     

    安装docker-ce

    yum -y install docker-ce

     

    启动docker

    sudo  systemctl start docker

    测试docker

    docker run hello-world

     如果以上步骤成功则测试时会返回如下结果:

     

     查看docker版本,docker至少是1.10.3以上的版本,如果我没有指定版本默认安装最新的则肯定满足条件

    docker --version

    返回

     

    继续安装依赖,需要用到git,docker-compose,pip等组件

    sudo yum install epel-release
    
    sudo  yum  install -y python-pip
    
    sudo  yum  install docker-compose

    2、安装sentry

    2.1安装

      第一步创建所需的文件夹

    
    mkdir -p data/{sentry,postgres}

     

     

    然后我们ls会发现多了一个data文件夹,如下:

     

     

       第二步克隆该项目

    git clone https://github.com/getsentry/onpremise.git

     

      完成后会多一个

     

     

       第三步复制相应的环境配置文件

    cd onpremise
    
    cp .env.example .env

     

      注意:此步骤非常重要!此步骤非常重要!此步骤非常重要!

     

     

      第四步生成secret key

    docker volume create --name=sentry-data
    docker volume create --name=sentry-postgres
    docker-compose run --rm web config generate-secret-key

     

      注意:若出现一下bug,请重新执行上面的第三步

     

      若出现如下bug:

    ERROR: Service 'web' failed to build: invalid reference format

      请在你的.env环境文件中添加(onpremise/.env)

    SENTRY_IMAGE=sentry:9.1.2

       第五步把最后一行生成的密钥保存下来,输入到.env中

      vi .env
    SENTRY_SECRET_KEY='4(dt6t5s(d2l#g-y+bto67+cej@(ygled67kyn&6bqdrma=2ti'

              第六步更新配置,创建超级管理员用户

    docker-compose run --rm web upgrade

       注意:该过程会让你注册一个超级管理员账号

     如下图所示

         

         注意如果没有出现创建用户的提示,请进行以下操作:

    1.使用docker命令进入postgres数据库
    
    # docker exec -it onpremise_postgres_1 bash
    
    2.进入postgres数据库
    
    # psql -h 127.0.0.1 -d postgres -U postgres
    
    3.查看这两个表是否有数据sentry_project,sentry_organization
    
    postgres=#  select * from sentry_project;
    
    postgres=# select * from sentry_organization ;
    
    如果没有数据,进行创建
    
    4.新开一个终端,进入sentry的web的shell里面,其实就是一个python端
    
    # docker-compose run --rm web shell  
    
    5. 输入以下命令进行初始化数据
    
    from sentry.models import Project
    
    from sentry.receivers.core import create_default_projects
    
    create_default_projects([Project])
    
    6.退出第五步的shell,创建自己的用户
    
    # docker-compose run --rm web createuser

        第七步启动服务运行

    注意是在onpremise文件下执行命令

    docker-compose up -d

        第八步添加邮件配置到.env文件和docker-compose.yml中

       
      vi .env        添加如下行
            SENTRY_SERVER_EMAIL=xxxx@163.com   #你的163邮箱
            SENTRY_EMAIL_HOST=smtp.163.com
            SENTRY_EMAIL_USER=xxxxx@163.com    #你的163邮箱
            SENTRY_EMAIL_PASSWORD=676890      #你的163邮箱密码
            SENTRY_EMAIL_USE_TLS=true
     vi docker-compose.yml    更改如下行
            SENTRY_EMAIL_HOST: smtp.163.com

        第九步重新启动docker容器  

            docker-compose build
            docker-compose run --rm web upgrade
            docker-compose up -d        

        第十步访问本地Sentry web界面

          直接访问本机ip:9000即可登录。

     登进来效果如下:

     注意:如果安装期间出现以下这样的错误的话,记得手动执行该命令创建

    ERROR: Volume sentry-data declared as external, but could not be found. Please create the volume manually using `docker volume create --name=sentry-data` and try again
    
    执行:docker volume create --name=sentry-data
    
    ERROR: Volume sentry-postgres declared as external, but could not be found. Please create the volume manually using `docker volume create --name=sentry-postgres` and try again.

    解决方案:

    执行:docker volume create --name=sentry-postgres

    Sentry无法接收错误解决方案

     

    sentry无法接收项目事件。这就很困惑了,sentry作为日志收集工具,用来收集和分析错误的项目日志是非常有用的。而现在却无法收集日志,相当于没用了。那么下面来看看到底是什么问题。

    搭建完sentry之后,我在sentry里面创建了一个1111的项目:

    那么故而言之,这里就是用来收集我某个laravel(如:1111)项目里面的日志信息的。我根据sentry里面的提示配置好我的laravel-test之后,就开始发送测试日志到自己部署的sentry,看看是否能正常接收。于是:

    发送是成功的,但回过头来发现,sentry里这个1111依然是空的,这就蛋疼了。

    于是只能从docker日志入手了,看看是不是存在什么错误:

        docker stop onpremise_worker
        docker logs -f --tail 100 onpremise_worker

    果然,什么乱七八糟的日志中发现有这么一个错误:

    1. ProgrammingError: ProgrammingError('function sentry_increment_project_counter(integer, integer) does not exist

    基本上90%能确定是这个错误导致sentry出现功能异常,我们尝试一下解决这个问题:

        1.运行命令进入postgres docker
        docker exec -it onpremise_postgres_1 bash
         
        2.进入postgre数据库
        psql -h 127.0.0.1 -d postgres -U postgres
         
        3.执行:create or replace function sentry_increment_project_counter( project bigint, delta int) returns int as $$ declare new_val int;
    begin loop update sentry_projectcounter set value = value + delta where project_id = project returning value into new_val; if found then return new_val;
    end if; begin insert into sentry_projectcounter(project_id, value) values (project, delta) returning value into new_val; return new_val;
    exception when unique_violation then end; end loop; end $$ language plpgsql;
    4.ctrl + D退出数据库,exit退出bash 5.重新运行onpremise_worker docker start onpremise_worker

    再次在1111中发送测试事件,这次能够在sentry中看到捕获的日志了。

  • 相关阅读:
    Python--基本的对象类型(列表_可变的数据类型)
    Python--基本的对象类型(数字int和布尔值bool)
    Java项目目录结构
    linux- day1
    python学习笔记,视频day20-装饰器
    python学习笔记,视频day19-习题
    python学习笔记,视频day17、18-文件处理
    python学习笔记,视频day16 17-内置函数
    python学习笔记,视频day16-函数作用域,匿名函数,map,filter,reduce
    python学习笔记,视频day15-全局变量与局部变量、风湿理论、函数递归
  • 原文地址:https://www.cnblogs.com/yunwangjun-python-520/p/11450786.html
Copyright © 2011-2022 走看看