使用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 = '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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM