Centos7使用docker搭建Sentry

一、安装docker

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

  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版:java

卸载旧版本Docker

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

 

安装依赖

一、安装依赖包

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

 

 

二、添加稳定的源

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

 

三、可选操做:容许拓展最新的不稳定的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

 

 

 

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

 

 

 

 查看docker版本,docker至少是1.10.3以上的版本,若是我没有指定版本默认安装最新的则确定知足条件linux

docker --version

 

返回laravel

 

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

 

sudo yum install epel-release

sudo  yum  install -y python-pip

sudo  yum  install docker-compose

 

 

二、安装sentry

2.1安装

  第一步建立所需的文件夹


mkdir -p data/{sentry,postgres}

 

 

 

而后咱们ls会发现多了一个data文件夹,以下:git

 

 

 

   第二步克隆该项目

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

 

  完成后会多一个github

 

 

 

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

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)web

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

 

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

 以下图所示

 

     

     注意若是没有出现建立用户的提示,请进行如下操做:

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中看到捕获的日志了。

 

相关文章
相关标签/搜索