12/08/2018, 16:03

Quản lý log ứng dụng với GrayLog 2

Dự án trước mình tham gia có sử dụng dịch vụ Amazon CloudWatch để quản lý log của ứng dụng. Mình thấy thực sự rất hay ho. Hay ho vì việc hiển thị rất trực quan, dễ dàng cho việc tìm kiếm, thao tác và xem log rất đơn giản thay vì phải SSH vào từng server và xem bằng Tail hoặc Less , ... Nhưng nó ...

Dự án trước mình tham gia có sử dụng dịch vụ Amazon CloudWatch để quản lý log của ứng dụng. Mình thấy thực sự rất hay ho. Hay ho vì việc hiển thị rất trực quan, dễ dàng cho việc tìm kiếm, thao tác và xem log rất đơn giản thay vì phải SSH vào từng server và xem bằng Tail hoặc Less, ... Nhưng nó lại thu phí nên mình đã thử mò mẫm trên một số trang và tìm thấy được thằng GrayLog này. Nó cũng na ná giống như Amazon CloudWatch nhưng nó open source. Hôm nay mình sẽ giới thiệu về nó bằng một bài viết hướng dẫn cài đặt GrayLog với ứng dụng của chúng ta để thực hiện quản lý log nhé.

Việc đầu tiên là chúng ta cần một con server để chứa thằng GrayLog này. Với việc demo thì Docker là một sự lựa chọn hoàn hảo (yaoming)! Chúng ta bắt tay vào cài đặt nó trên Docker nhé (mặc định là mọi người đã cài đặt và biết sử dụng căn bản thằng Docker rồi nhé).

Các packages cần thiết:

  • Java
  • MongoDB
  • ElasticSearch
  • GrayLog 2

Khởi tạo một container. Mình sử dụng Ubuntu 14.04 nhé

sudo docker run --name graylog2_server -it ubuntu:14.04 /bin/bash

Bây giờ chúng ta đang ở trong Docker container rồi và mặc định nó ở tài khoản root nên chúng ta thực hiện các lệnh trên terminal mà không cần prefix sudo. Thực hiện update APT cache để chuẩn bị cài đặt một số package cần thiết cho quá trình cài đặt GrayLog

apt-get update

Tiếp tục, chúng ta cài đặt các package cơ bản (do image này là bản minimal nên nó loại bỏ khá nhiều các package cho nhẹ)

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

Tiếp đến, cài đặt các package cơ bản và cần thiết cho GrayLog

apt-get install -y apt-transport-https uuid-runtime pwgen

Cài đặt Java

add-apt-repository ppa:webupd8team/java -y
apt-get update
apt-get install -y oracle-java8-installer
apt-get install -y oracle-java8-set-default

Cài đặt MongoDB để chứa log. Do trong Docker container không hỗ trợ upstart script nên mình cài đặt mặc định luôn từ APT (v2.4.9). Còn ở môi trường thật, bạn có thể cài bản mới nhất thông qua hướng dẫn từ MongoDB nhé.

apt-get install -y mongodb-server

Sau khi cài đặt xong, khởi động MongoDB

service mongodb start

Cài đặt ElasticSearch để thằng GrayLog đánh index dữ liệu log

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-5.x.list
apt-get update
apt-get install -y elasticsearch

Bỏ comment và sửa cluster.name từ my-application thành graylog bằng lệnh

vi /etc/elasticsearch/elasticsearch.yml

Lưu lại, thoát VIM và khởi động ElasticSearch

service elasticsearch start

Nếu muốn, bạn có thể kiểm tra xem ElasticSearch đã hoạt động chưa, bạn có thể thử lệnh

curl localhost:9200

Nếu OK, kết quả bạn nhận được sẽ có dạng sau:

{
  "name" : "1MiXgwQ",
  "cluster_name" : "graylog",
  "cluster_uuid" : "9tT3cMMjSLqIWyNM3jDSRQ",
  "version" : {
    "number" : "5.6.1",
    "build_hash" : "667b497",
    "build_date" : "2017-09-14T19:22:05.189Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

OK, đã xong các thành phần cần thiết. Giờ chúng ta sẽ đi cài đặt thành phần chính là thằng GrayLog

wget https://packages.graylog2.org/repo/packages/graylog-2.3-repository_latest.deb
dpkg -i graylog-2.3-repository_latest.deb
apt-get update
apt-get install graylog-server

Sau khi cài đặt xong, chúng ta cần phải tạo 2 password để cài đặt cho GrayLog. Một cái là password_secret và một cái là root_password_sha2 (dùng để đăng nhập vào trang quản trị)

# Password secret
pwgen -N 1 -s 96

# Root password SHA256
echo -n <yourpassword> | sha256sum

Chú ý: Ở lệnh sinh root password sẽ có thêm đoạn - sau mật khẩu đã được mã hóa, bạn không cần phải copy đoạn đó. Ví dụ, mình tạo password 123456 echo -n 123456 | sha256sum Chúng ta sẽ nhận được dữ liệu như sau: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 - Bạn chỉ cần 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 là đủ

Bạn sửa file /etc/graylog/server/server.conf với các giá trị sau

password_secret = <Your password secret hash>
root_password_sha2 = <Your password SHA256 hash>
rest_listen_uri = http://0.0.0.0:9000/api/
web_listen_uri = http://0.0.0.0:9000/
root_timezone = Asia/Ho_Chi_Minh

Mục đích sửa rest_listen_uri và web_listen_uri từ 127.0.0.1 sang 0.0.0.0 là để chúng ta có thể truy cập vào GrayLog thông qua IP của Docker

Lưu lại các thay đổi và khởi động GrayLog server

service graylog-server start

Giờ đây, bạn có thể truy cập vào GrayLog Web Interface bằng địa chỉ IP của Docker container với URL: http://<Docker container IP>:9000. Username là admin và password là password mà bạn đã tạo trước đó.

Vậy là đã xong phần cài đặt GrayLog server. Bây giờ chúng ta sang phần cài đặt cho ứng dụng của mình có thể gửi log lên thằng GrayLog này nhé. Mình sẽ sử dụng ứng dụng Ruby on Rails để thử nghiệm. Bạn có thể tạo mới một project hoặc dùng luôn project đang có cũng được nhé             </div>
            
            <div class=

0