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é