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

 

相關文章
相關標籤/搜索