在调试程序中,通过日志分期来排查BUG是一个重要手段,它可以说是程序调试的利器。

关于日志管理

随着应用组件变多,那么各coder对输出日志五花八门,有写入stdout,有写stderr, 有写到syslog,也有写到xxx.log的。那么这将导致平台应用日志分布在各个地方,无法统一管理。

为什么使用Sentry

Sentry是一个集中式日志管理系统。它具备以下优点:

  • 多项目,多用户
  • 界面友好
  • 可以配置异常出发规则,例如发送邮件
  • 支持主流语言接口

安装

参考

https://docs.getsentry.com/on-premise/server/installation/

Requirements

  • Linux Server
  • PostgreSQL
  • redis-server
  • Python 2/3
  • Nginx

步骤

安装依赖包

sudo apt-get install python-setuptools python-pip python-dev libxslt1-dev libxml2-dev libz-dev libffi-dev libssl-dev libpq-dev libyaml-dev

安装Sentry

pip install -U sentry==8.0.0rc2

配置

vim sentry.conf.py

DATABASES = {
'default': {
'ENGINE': 'sentry.db.postgres',
'NAME': 'sentry',
'USER': 'postgres',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '5432',
}
} EMAIL_HOST = 'smtp.exmail.qq.com'
EMAIL_HOST_PASSWORD = 'HE*******'
EMAIL_HOST_USER = 'hewx@doordu.com'
EMAIL_PORT = 25
EMAIL_USE_TLS = False

设置配置文件路径到环境变量

export SENTRY_CONF=/home/hewx/workbench/sentry

初始化数据库

sentry update

配置Web Server

sudo apt-get install nginx-full
sudo vim /etc/nginx/sites-enabled/default location / {
proxy_pass http://localhost:9000;
proxy_redirect off; proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

启动

启动Wokers

sentry celery worker -B

启动Web服务

sentry start

实例

PHP

使用浏览器访问sentry,并创建一个项目

参考PHP使用指令http://10.0.0.180/sentry/45183e54fa36/settings/install/php/

<?php

require_once "vendor/autoload.php";

$client = new Raven_Client('http://5d68caa5e36c4eaa8f7c0601a521fab6:b5917e01d45f4656ab2d943264b90377@10.0.0.180/3');

$error_handler = new Raven_ErrorHandler($client);
$error_handler->registerExceptionHandler();
$error_handler->registerErrorHandler();
$error_handler->registerShutdownFunction(); $client->captureMessage("这里发生了一个错误"); $i = 1 / 0; ?>

Python

pip install raven

from raven import Client

client = Client('http://f1ba62aa87cb4fc1a36d9e4f96017e99:96f5feef13dc4d45825e73548cd5b784@10.0.0.180/4')

try:
1 / 0
except ZeroDivisionError:
client.captureException()

JavaScript

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sentry Test</title>
</head>
<body>
<script src="https://cdn.ravenjs.com/2.0.1/raven.min.js"></script>
<script>
Raven.config('http://e896b37840444a41adc9a80aa1292dcb@10.0.0.180/5').install() try {
doSomething(a[0])
} catch(e) {
Raven.captureException(e)
} </script>
</body>
</html>

Android

https://github.com/joshdholtz/Sentry-Android/tree/android-studio-ify

import com.joshdholtz.sentry.Sentry;

public class MainActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Sentry.init(this, "http://10.0.0.180", "http://340137fc1dc6443e99d9d02b8f1638d0:cfd6587578e742948b60d72442fb4ac8@10.0.0.180/6");
Sentry.captureMessage("OMG this works woooo"); int a = 1 / 0;
}
...... RuntimeException: Unable to start activity ComponentInfo{com.joshdholtz.sentrytesting/com.joshdholtz.sentryapp.MainActivity}: java.lang.ArithmeticException: divide by zero
Module "android.app.ActivityThread", line 2189, in performLaunchActivity
Module "android.app.ActivityThread", line 2238, in handleLaunchActivity
Module "android.app.ActivityThread", line 138, in access$800
Module "android.app.ActivityThread$H", line 1201, in handleMessage
Module "android.os.Handler", line 102, in dispatchMessage
Module "android.os.Looper", line 136, in loop
Module "android.app.ActivityThread", line 5016, in main
Module "java.lang.reflect.Method", in invokeNative
Module "java.lang.reflect.Method", line 515, in invoke
Module "com.android.internal.os.ZygoteInit$MethodAndArgsCaller", line 792, in run
Module "com.android.internal.os.ZygoteInit", line 608, in main
Module "dalvik.system.NativeStart", in main ArithmeticException: divide by zero
Module "com.joshdholtz.sentryapp.MainActivity", line 20, in onCreate
Module "android.app.Activity", line 5251, in performCreate
Module "android.app.Instrumentation", line 1087, in callActivityOnCreate
Module "android.app.ActivityThread", line 2153, in performLaunchActivity
Module "android.app.ActivityThread", line 2238, in handleLaunchActivity
Module "android.app.ActivityThread", line 138, in access$800
Module "android.app.ActivityThread$H", line 1201, in handleMessage
Module "android.os.Handler", line 102, in dispatchMessage
Module "android.os.Looper", line 136, in loop
Module "android.app.ActivityThread", line 5016, in main
Module "java.lang.reflect.Method", in invokeNative
Module "java.lang.reflect.Method", line 515, in invoke
Module "com.android.internal.os.ZygoteInit$MethodAndArgsCaller", line 792, in run
Module "com.android.internal.os.ZygoteInit", line 608, in main
Module "dalvik.system.NativeStart", in main

使用Sentry集中化日志管理的更多相关文章

  1. 快速搭建ELK集中化日志管理平台

    由于我们的项目是分布式,服务分布于多个服务器上,每次查看日志都要登录不同服务器查看,而且查看起来还比较麻烦,老大让搭一个集中化日志管理的东西,然后就在网上找到了这个东西ELK ELK就是elastic ...

  2. 线上日志集中化可视化管理:ELK

    本文来自网易云社区 作者:王贝 为什么推荐ELK: 当线上服务器出了问题,我们要做的最重要的事情是什么?当需要实时监控跟踪服务器的健康情况,我们又要拿什么去分析?大家一定会说,去看日志,去分析日志.是 ...

  3. SQL Server中的事务日志管理(7/9):处理日志过度增长

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  4. SQL Server中的事务日志管理(9/9):监控事务日志

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  5. SQL Server中的事务日志管理(8/9):优化日志吞吐量

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  6. SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  7. SQL Server中的事务日志管理(5/9):完整恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  8. SQL Server中的事务日志管理(4/9):简单恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  9. SQL Server中的事务日志管理(3/9):事务日志,备份与恢复

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

随机推荐

  1. freemarker相关

    大部分引入:http://www.blogjava.net/alinglau36/archive/2011/02/23/344970.html Freemarker操作字符串 1.substring( ...

  2. 解决window10系统电脑插入耳机之后没有声音的问题

    其实办法也是从百度百科上查到的 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄     可能是因为自己某个不小心的操作更改了设置 1. 首先要点开设置按钮,在搜索栏输入控制面板 (当然知道控制面板在哪里的小伙伴就不用 ...

  3. 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等

    一.修改最大连接数 1.查看当前文件描述符的限制数目的命令: ulimit -n 2.修改文件描述符的限制数目 2.1 临时改变当前会话: ulimit -n 65536 2.2 永久变更需要下面两个 ...

  4. ie6、ie7下JSON.parse JSON未定义的解决方法

    解决方法一: var jsons = req.responseText; var s; if (typeof(JSON) == 'undefined'){ s = eval("(" ...

  5. 在训练CNN时,loss稳定在log(类别数)

    参见知乎问题! https://www.zhihu.com/question/275774218 很多框架都会有一个问题,当卷积 weight NaN 之后,卷积的 output 会变成 NaN.然后 ...

  6. 基于RocketIO的高速串行协议设计与实现

    随着对信息流量需求的不断增长, 传统并行接口技术成为进一步提高数据传输速率的瓶颈.过去主要用于光纤通信的串行通信技术—SERDES正在取代传统并行总线而成为高速接口技术的主流.SERDES 是串行器) ...

  7. 华为终端开放实验室Android P Beta 4测试能力上线

    7月26日,Android P Beta 4发布(即Android P DP5),此版本为开发者最后一个预览版本,也预示着Android P正式版即将与大家见面. 为保证开发者在正式版本来临前做好充分 ...

  8. 进出口流程 & 报关单据

    出口流程 一. 委托人 1. 需找货运代理公司 2. 向代理公司询问价格 一般为 ALL IN 价格( 空运费+燃油费+战险费 ) 总费用 = ALL IN 价格 * ( 货物公斤数 ) ALL IN ...

  9. 基础的 Web Services 平台是 XML + HTTP。

    HTTP 协议是最常用的因特网协议. XML 提供了一种可用于不同的平台和编程语言之间的语言. Web services 平台的元素: SOAP (简易对象访问协议) UDDI (通用描述.发现及整合 ...

  10. 安装VC6.0遇到的问题

    1. 问题现象 安装VC6.0后,又安装了VS2005.用VC6.0打开以前的.dsw文件时,程序自动关闭.如下图所示. 具体操作是:选择一个.dsw文件,右键菜单[打开方式]中选择[Microsof ...