1、安裝docker
Sentry
是一款基於 Django
實現的錯誤日志收集和聚合的平台,它是 Python
實現的,但是其日志監控功能卻不局限於python
,對諸如 Node.js
, php
,ruby
, C#
,java
等語言的項目都可以做到無縫集成,甚至可以用來對iOS
, Android
移動客戶端以及 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)
第八步添加郵件配置到.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
果然,什么亂七八糟的日志中發現有這么一個錯誤:
- 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中看到捕獲的日志了。