使用Sentry集中化日志管理
Posted 没伞的孩子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Sentry集中化日志管理相关的知识,希望对你有一定的参考价值。
在调试程序中,通过日志分期来排查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 = ‘[email protected]‘
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:[email protected]/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:[email protected]/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://[email protected]/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:[email protected]/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集中化日志管理的主要内容,如果未能解决你的问题,请参考以下文章