Sentry Logging cho Rails

Sentry là gì?

Sentry là một nền tảng logging sự kiện chủ yếu tập trung vào việc nắm bắt và tổng hợp các exception. Sentry ban đầu được hình tại Disqus vào đầu năm 2010 để giải quyết logging exception trong một ứng dụng Django. Kể từ đó nó đã phát triển để hỗ trợ nhiều ngôn ngữ phổ biến và nền tảng, bao gồm cả Python, PHP, Java, Ruby, Node.js, và thậm chí JavaScript.

Raven là gì?

Raven là client dùng để gửi các dữ liệu logging tới server Sentry

Tại sao nên sử dụng Sentry?

Bạn đã từng gặp khó khăn với việc debug cũng như theo dõi log các exception trong các file production.log, staging.log, ... Việc tìm kiếm các dòng log cũng rất khó khăn và mất nhiều thời gian. thường thì sẽ là:

ssh [email protected]
cd current
cat log/production.log | grep bug1

Mà chưa chắc đã tìm thấy dòng lỗi bạn cần tìm Và hãy tưởng tượng rằng bạn phải maintain hàng chục server thì sẽ phải kiểm tra log ra sao mỗi khi xảy ra lỗi.

Sentry đem lại cho bạn: *Khả năng thông báo lỗi ngay lập tức và chi tiết thông qua notification mail *Tổng hợp và quản lý các lỗi của nhiều server *Có thể tích hợp với nhiều ngôn ngữ và nền tảng

Cài đặt

Tham khảo tại Sentry Docs

Yêu cầu

Unix-based system
python 2.7
python-setuptools, python-pip, python-dev, libxslt1-dev, libxml2-dev, libz-dev, libffi-dev, libssl-dev
Database: MySQL hoặc PostgreSQL
Redis
Nginx

Cài đặt môi trường

pip install -U virtualenv
virtualenv /www/sentry/
source /www/sentry/bin/activate

Cài đặt Sentry

# install sentry
pip install -U sentry
# or install sentry and its postgresql dependencies
pip install -U sentry[postgres]
# or if you choose, mysql
pip install -U sentry[mysql]

hoặc có thể cài đặt từ source https://github.com/getsentry/sentry

python setup.py develop

Khởi tạo cấu hình

Bây giờ, cần khởi tạo cấu hình mặc định cho Sentry

sentry init

Cấu hình mặc định sẽ được đặt ở ~/.sentry/sentry.conf.py Tuy nhiên cũng có thể tùy chỉnh như sau

sentry init /etc/sentry.conf.py

Bạn cần tùy chỉnh lại các gía trị cho phù hợp với hệ thống của bạn

# ~/.sentry/sentry.conf.py

# for more information on DATABASES, see the Django configuration at:
# https://docs.djangoproject.com/en/1.6/ref/databases/
DATABASES = {
    'default': {
        # We suggest PostgreSQL for optimal performance
        'ENGINE': 'django.db.backends.postgresql_psycopg2',

        # Alternatively you can use MySQL
        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'sentry',
        'USER': 'postgres',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

# No trailing slash!
SENTRY_URL_PREFIX = 'http://sentry.example.com'

SENTRY_WEB_HOST = '0.0.0.0'
SENTRY_WEB_PORT = 9000
SENTRY_WEB_OPTIONS = {
    'workers': 3,  # the number of gunicorn workers
    'secure_scheme_headers': {'X-FORWARDED-PROTO': 'https'},  # detect HTTPS mode from X-Forwarded-Proto header
}
SENTRY_REDIS_OPTIONS = {
    'hosts': {
        0: {
            'host': '127.0.0.1',
            'port': 6379,
        }
    }
}

Cách cài đặt Redis bạn có thể xem qua ở http://redis.io/topics/quickstart

Cấu hình cho outbound email

EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = ''
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_USE_TLS = False

Migration

# If you're using Postgres, and kept the database ``NAME`` as ``sentry``
createdb -E utf-8 sentry

# alternatively if you're using MySQL, ensure you've created the database:
mysql -e 'create database sentry'

Tạo schema

sentry --config=/etc/sentry.conf.py upgrade

Tiếp theo tạo 1 user mới và mặc định là superuser

sentry --config=/etc/sentry.conf.py createuser

Khởi động Sentry

sentry --config=/etc/sentry.conf.py celery worker -B

Tích hợp với hệ thống Ruby on Rails

# GemFile
gem "sentry-raven"

Chạy bundle để cài đặt gem

Cấu hình Raven Sau khi khởi động Sentry server, bạn có thể vào và tạo project của mình để sentry quản lý. Sentry sẽ cung cấp SENTRY_DSN cũng như cách config cho từng hệ thống

# Set your SENTRY_DSN environment variable.
export SENTRY_DSN=http://public:secret@example.com/project-id

# Or you can configure the client in the code (not recommended - keep your DSN secret!)
# config/initialize/raven.rb
require 'raven'
Raven.configure do |config|
  config.dsn = 'http://public:[email protected]/project-id'
end

Chạy thử test Raven có hoạt động hay không

rake raven:test

Vậy là đã hoàn thành setup Raven - Sentry với hệ thống Ruby on Rails. Bên cạnh RoR, Sentry hỗ trợ rất nhiều platform, bạn có thể tìm hiểu ở https://github.com/getsentry/sentry

Nguồn: https://github.com/getsentry/sentry