Quản lý log ứng dụng với GrayLog 2
Bài đăng này đã không được cập nhật trong 3 năm
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
Cài đặt 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 123456echo -n 123456 | sha256sum
Chúng ta sẽ nhận được dữ liệu như sau:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 -
Bạn chỉ cần8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
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
sang0.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é !
Sending in log data
Ruby on Rails
Đầu tiên, bạn truy cập và đăng nhập vào GrayLog Web Interface thông qua IP của Docker container ở port 9000 với tài khoản admin
. Tại menu System bạn chọn Inputs. Trong giao diện Inputs, tại dropdown list Select input bạn chọn GELF TCP và click Launch new input rồi điền các thông tin sau rồi bấm Save:
- Node: Chọn một node
- Title: Tên của input
- Bind address: 0.0.0.0
- Port: Để mặc định (là 12201)
Sau khi tạo xong, tại màn hình Inputs, bạn click vào button Show received messages tại input vừa tạo và chuyển sang bước cấu hình trong code. Tiếp theo, bạn thêm hai gem sau vào Gemfile
và chạy bundle install
để cài đặt
gem "gelf"
gem "lograge"
Sau khi cài đặt các gem xong, chúng ta mở file config/environments/development.rb
(chúng ta đang test trên local. Nếu bạn muốn, có thể sửa các môi trường khác) ra và thêm vào các dòng sau:
config.lograge.enabled = true
config.lograge.formatter = Lograge::Formatters::Graylog2.new
config.logger = GELF::Logger.new "<Docker container IP>", 12201, "WAN", {protocol: GELF::Protocol::TCP, facility: "Application Name"}
Xong, bây giờ bạn thực hiện lệnh rails serve
và truy cập vào localhost:3000
để sinh log rồi sang giao diện của GrayLog và Refresh lại trang rồi xem kết quả nhé !
Laravel 5
Bạn thực hiện tạo thêm một input mới giống với phần Ruby on Rails với các thông tin sau:
- Node: Chọn một node
- Title: Tên của input
- Bind address: 0.0.0.0
- Port: 12202 (để tránh trùng với port của Rails input)
Tiếp theo, bạn cài đặt package graylog2/gelf-php
bằng lệnh composer require graylog2/gelf-php
. Sau khi cài đặt xong, bạn mở file bootstrap/app.php
và thêm vào các dòng sau:
$app->configureMonologUsing(function($monolog) {
$transport = new \Gelf\Transport\TcpTransport("<Docker container IP>", 12202);
$publisher = new \Gelf\Publisher();
$publisher->addTransport($transport);
$monolog->pushHandler(new \Monolog\Handler\GelfHandler($publisher));
});
Xong, bây giờ bạn thực hiện lệnh php artisan serve
và truy cập vào localhost:8000
để sinh log rồi sang giao diện GrayLog và refresh lại trang rồi xem kết quả
Lời kết
Đến đây là kết thúc bài viết của mình. Hy vọng qua bài viết này sẽ giúp mọi người có cái nhìn mới về cách quản lý log của ứng dụng. Bài viết trên đây chỉ là giới thiệu sơ qua về GrayLog và cách cài đặt cũng như cách sử dụng căn bản. Mọi người có thể tham khảo thêm các chi tiết nâng cao từ documentation của GrayLog tại http://docs.graylog.org/en/2.3/.
Hẹn gặp lại mọi người ở bài viết sau, cũng là quản lý log ứng dụng giống thằng GrayLog này nhưng với bộ ba ứng dụng của Elastic là ELK Stack (ElasticSearch, LogStash, Kibana) nhé !
Chào thân ái và quyết thắng (lol)!
Original post: https://namnv609.cf/posts/quan-ly-log-ung-dung-voi-graylog-2.html
All rights reserved