12/08/2018, 18:20

Exception monitor with Sentry

Trước đây mình có 2 bài viết liên quan đến log management là: Quản lý log ứng dụng với ELK Stack (Elasticsearch, Logstash và Kibana) Quản lý log ứng dụng với GrayLog 2 Nay, mình xin phép giới thiệu tiếp một thể loại nữa là exception monitoring - Sentry. Trong thực tế, khi chúng ta đưa ...

Trước đây mình có 2 bài viết liên quan đến log management là:

  • Quản lý log ứng dụng với ELK Stack (Elasticsearch, Logstash và Kibana)
  • Quản lý log ứng dụng với GrayLog 2

Nay, mình xin phép giới thiệu tiếp một thể loại nữa là exception monitoring - Sentry.

Trong thực tế, khi chúng ta đưa ứng dụng lên môi trường beta (hay testing) để cho Q.A kiểm thử. Sẽ có những lúc phát sinh ra lỗi trong quá trình vận hành. Lúc đó, chúng ta rất mất công phải access vào server và đọc file log để tìm lỗi. Hoặc nhanh hơn chút thì nhờ Q.A tái hiện lại và thực hiện đọc log trực tiếp để xem nó là lỗi gì. Phát sinh ở file nào, dữ liệu ra làm sao. Thằng Sentry được sinh ra để giúp chúng ta việc này, nó sẽ giám sát ứng dụng và thực hiện lưu lại các lỗi (nếu phát sinh) giúp chúng ta chủ động phát hiện lỗi hay đơn giản chỉ là giúp chúng ta đọc lỗi nhanh, chi tiết.

Sentry hỗ trợ chúng ta hai phương thức cài đó là sử dụng luôn Docker image và cài đặt thông qua Python PIP. Nhưng trong bài viết này, mình sẽ hướng dẫn mọi người cài đặt bằng tay (từ đầu đến cuối) trên Docker thay vì dùng Docker image. Cảm giác cài cắm từ đầu đến cuối nó vẫn sướng hơn là dùng sẵn có (dùng cho mục đích học tập). Và chúng ta sẽ sử dụng image Ubuntu 16.04 để cài đặt và sử dụng Sentry. Mặc định bạn đã cài và biết cơ bản về Docker rồi nhé. Giờ chúng ta bắt đầu thôi.

Cài đặt Sentry

Đầu tiên, chúng ta khởi tạo một container từ image Ubuntu 16.04 (nếu chưa có image này cũng không sao, vì Docker nó tự pull về):

sudo docker run --name sentry_server -it ubuntu:16.04 /bin/bash

Sau khi thực hiện lệnh trên xong, bây giờ chúng ta đang ở trong Docker container rồi. Và mặc định cũng đã ở quyền root. Nên chúng ta sẽ làm mọi lệnh mà không cần đến prefix sudo.

Việc đầu tiên sau khi vào Docker container là chúng ta update lại APT cache và cài cắm một số package thiết yếu (nếu chưa có - vì có thể image này là bản minimal để giảm dung lượng image).

apt-get update

Sau khi update xong, cài các packages cần thiết:

apt-get install -y wget curl apt-transport-https vim python-software-properties software-properties-common sudo

Sau đó, chúng ta cài PostgreSQL để lưu dữ liệu. Do trong doc của Sentry có giới thiệu đến image postgre:9.5 nên chúng ta dùng bản 9.5 thay vì bản mới nhất là 10.4 trên trang chủ cho an toàn. Và do Ubuntu 16.04 có repository của PostgreSQL 9.5 rồi nên chúng ta cài rất đơn giản:

apt-get install -y postgresql-9.5

Sau khi cài đặt xong, chúng ta sửa lại config cho PostgreSQL một chút để cho phép chúng ta kết nối vào database postgres mà không có password. Sửa file pg_hba.conf:

vi /etc/postgresql/9.5/main/pg_hba.conf

và sửa dòng:

local   all             postgres                                peer

sang:

local   all             postgres                                trust

Sau đó, khởi động PostgreSQL bằng lệnh:

service postgresql start

Tiếp theo, chúng ta cài Redis server. Do Redis version trong APT thấp hơn so với yêu cầu của Sentry (là 3.2 trở lên) nên chúng ta thêm PPA repository chris-lea/redis-server để cài bản mình cần. Đầu tiên là thêm APT repository và update lại APT cache

add-apt-repository -y ppa:chris-lea/redis-server && apt-get update

Cài đặt Redis server:

apt-get install -y redis-server

Sau khi cài đặt xong, chúng ta start Redis server lên:

service redis-server start

Sau đó, test thử một lệnh xem Redis server có hoạt động không:

redis-cli ping

Nếu chúng ta nhận được message PONG là             </div>
            
            <div class=

0