BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
BÁO CÁO BÀI TẬP LỚN
Tìm hiểu về bộ cơng cụ xử lý log ELK
Học viên thực hiện:
Nguyễn Chí Cường
Nguyễn Tiến Giang
Nguyễn Văn Hân
Nguyễn Bá Cảnh
Lê Thanh Lĩnh
Lưu Văn Tư
Người hướng dẫn:
TS. Hoàng Xuân Dậu
Hà Nội, 2022
MỤC LỤC
2
3
1
HỆ THỐNG ELK
1.1. Tổng quan về log
1.1.1. Định nghĩa Logs
Log là một bản ghi sự kiện xảy ra trong phạm vi mạng lưới, hệ thống của
một tổ chức. Có thể hiểu Log là thông tin về hoạt động của hệ thống hoặc các dịch
vụ đang chạy trong hệ thống, và log sẽ được ghi lại thành log file. Các sự kiện sẽ
được log ghi lại như Audit, transaction, intrusion, connections, user activity, …
Có nhiều nguồn sinh ra log và nhiều loại log khác nhau. Ví dụ như:
•
Log file của các thiết bị firewall, router, switches, moderm, IDPS, …
•
Log file của các hệ điều hành Linux, Windows, …
•
Log file của các ứng dụng Web, Mail, Database, …
•
Log file của các phần mềm, ứng dụng, Antivirus, VPN, …
Log không chỉ được sinh ra từ các thiết bị bên cung cấp dịch vụ cho người
sử dụng mà chính máy tính cá nhân của người sử dụng cũng sinh ra log.
Tác dụng mà log đem lại:
•
Log liên tục ghi lại các thơng báo về hoạt động của cả hệ thống hoặc của các
dịch vụ được triển khai trên hệ thống và file tương ứng. Log file thường là
các file văn bản thông thường dưới dạng “clear text” tức văn bản dạng rõ, vì
thế có thể sử dụng các trình soạn thảo văn bản (vi, vim, nano, gedit, …) hoặc
các trình xem văn bản thơng thường (cat, tailf, …) là có thể xem được file
log.
•
Các file log có thể cho người đọc bất cứ thơng tin gì người đó cần biết, để
giải quyết các rắc rối mà người sử dụng gặp phải miễn là người đó biết ứng
dụng nào, tiến trình nào được ghi vào log nào cụ thể.
•
Phân tích ngun nhân gốc rễ của một vấn đề.
•
Giúp cho việc khắc phục sự cố nhanh hơn khi hệ thống gặp vấn đề.
4
•
Giúp cho việc phát hiện, dự đoán một vấn đề có thể xẩy ra đối với hệ thống.
Trong hầu hết hệ thống Linux thì /etc /var/log là nơi lưu trữ lại tất cả các file
log. Cịn đối với Windows có thể xem ở trình quản lý Event Viewer hoặc xem tại
đường dẫn C:\Windows\System32\winevt\Logs với các file có định dạng “.evtx”.
1.1.2. Ý nghĩa của việc quản lý logs
Để quản lý log một cách tốt hơn, xu thế hiện nay sẽ sử dụng log tập trung.
Log tập trung là quá trình tập trung, thu thập, phân tích… các log cần thiết từ nhiều
nguồn khác nhau về một nơi an toàn để thuận lợi cho việc phân tích, theo dõi hệ
thống.
Những lý do nên sử dụng quản lý logs tập trung:
•
Do có nhiều nguồn sinh log
•
Có nhiều nguồn sinh ra logs, logs nằm trên nhiều máy chủ khác nhau
nên khó quản lý.
•
Nội dung log không đồng nhất (giả sử log từ nguồn 1 có thơng tin về
ip mà khơng ghi thơng tin về user name đăng nhập, nhưng log từ
nguồn 2 lại có), do đó khó khăn trong việc kết hợp các log với nhau
để xử lý vấn đề gặp phải.
•
Định dạng log cũng khơng đồng nhất dẫn đến việc khó khăn trong
việc chuẩn hóa.
•
Đảm bảo tính tồn vẹn, bí mật, sẵn sàng của log
•
Do có nhiều các rootkit được thiết kế để xóa bỏ logs.
•
Do logs mới được ghi đè lên log cũ, nên logs phải được lưu trữ ở một
nơi an tồn và phải có kênh truyền đủ đảm bảo tính an tồn và sẵn
sàng sử dụng để phân tích hệ thống.
Lợi ích khi sử dụng quản lý logs tập trung đem lại:
5
•
Việc xây dựng một hệ thống quản lý logs tập trung, giúp tổ chức có
cái nhìn chi tiết về các vấn đề bảo mật, vi phạm chính sách kỹ thuật,
hay các vấn đề về lỗi vận hành… khi nó xảy ra. Qua đó cung cấp
thơng tin chi tiết về vấn đề hệ thống của công ty đang gặp phải từ đó
có cái nhìn rõ ràng hơn về hướng giải quyết.
•
Khi một hệ thống bị tấn công, nếu tất cả những gì đang diễn ra liên
quan đến hệ thống đều được ghi lại và lưu trữ tách biệt, sẽ đảm bảo
tính tồn vẹn về những gì đã thực sự diễn ra trên hệ thống đó. Hệ
thống quản lý logs tập trung sẽ tránh được việc Attacker thực hiện quá
trình Cover track về những hành động đã thực hiện sau khi can thiệp
vào hệ thống, qua đó phục vụ cho việc phân tích điều tra tấn cơng,
cũng như có thể hỗ trợ điều tra nội bộ khi cần thiết.
•
Khi dữ liệu liên quan đến sự kiện đã diễn ra trên phạm vi hệ thống,
các vấn đề vận hành, cũng như các hành động tấn công nhằm vào tổ
chức được ghi lại và lưu trữ liên tục, thì việc tập trung một lượng lớn
dữ liệu cho phép tổ chức có thể xác định xu hướng hoạt động của kẻ
tấn công nhằm vào công ty mình. Xác định được các kiểu tấn cơng
thơng dụng chống lại tổ chức, từ đó có biện pháp đối phó cũng như
kiện tồn hệ thống.
•
Quản lý logs tập trung kết hợp với các ứng dụng thu thập và phân tích
log khác nữa giúp cho việc phân tích log trở nên thuận lợi hơn và
giảm thiểu nguồn nhân lực.
•
Phát hiện kịp thời sự lây nhiễm mã độc trong hệ thống mạng, các máy
tính bị nhiễm mã độc, các máy tính bị tình nghi là thành viên của
mạng máy tính botnet.
•
Giám sát việc tuân thủ chính sách an ninh trong hệ thống.
Tóm lại, việc xây dựng một giải pháp quản lý tập trung logs hợp lý sẽ giúp
cải thiện hiệu quả cho hệ thống giám sát an ninh trong việc phân tích và xử lý các
biến cố. Các phân tích viên sẽ tốn ít thời gian cho việc đánh giá chính xác được các
biến cố nếu khả năng tự động của hệ thống gặp trục trặc.
6
Một giải pháp tốt sẽ cho phép tất cả các biến cố an ninh quan trọng được thu
thập và lưu trữ vào cơ sở dữ liệu nhằm cung cấp thông tin cho các phân tích viên
an ninh, các đội ứng phó sự cố, và các bộ phận khác của tổ chức.
1.2. Hệ thống ELK Stack
1.2.1. Giới thiệu tổng quan về ELK Stack
ELK Stack là một trong các stack mạnh, phổ biến dùng để ghi log (bộ công
cụ logging). ELK Stack là một giải pháp thu gom, phân loại, phân tích, lưu trữ và
tìm kiếm logs tập trung rất hiệu quả và được dùng trong nhiều cơng ty lớn. Ví dụ
về các hệ thống lớn trên thế giới như LinkedIn, Netflix, Medium… đều sử dụng
stack này.
Logging là một công cụ đơn giản nhưng mạnh mẽ, lưu giữ, ghi lại toàn bộ
những hoạt động của hệ thống. Nhờ có Logging, người dùng, quản lý có thể tra
cứu lại trạng thái của hệ thống trong quá khứ, những code nào đã được chạy,
những command nào đã được sử dụng, quá trình đăng nhập vào hệ thống, v.v… từ
đó tìm ra lỗi và sửa chữa, khắc phục dễ dàng hơn.
“ELK” là từ viết tắt của ba dự án mã nguồn mở: Elasticsearch, Logstash và
Kibana. Elasticsearch là một cơng cụ lưu trữ, tìm kiếm và phân tích. Logstash đóng
vai trị là một đường ống xử lý dữ liệu phía máy chủ, nhận dữ liệu từ nhiều nguồn
cùng một lúc, biến đổi dữ liệu đó sau đó gửi nó đến Elasticsearch. Kibana cho phép
người dùng theo dõi, trực quan hóa dữ liệu từ Elasticsearch bằng các biểu đồ và đồ
thị.
7
Hình 1.1 Các phần mềm mã nguồn mở trong Elastic Stack
Lý do các công ty lớn trên thế giới lựa chọn ELK Stack để sử dụng:
•
Có thể đọc log từ nhiều nguồn: Logstash có thể đọc được log từ rất nhiều
nguồn như log file, log database cho đến UDP hay REST request.
•
Dễ tích hợp: Cho dù có sử dụng Nginx hay Apache, dùng MSSQL,
MongoDB hay Redis, Logstash đều có thể đọc hiểu và xử lý log nên việc
tích hợp rất dễ dàng với các hệ thống khác mà không gặp khó khăn.
•
Hồn tồn miễn phí: Chỉ cần tải về, cài đặt và dùng, khơng tốn một chi
phí nào cả. Cơng ty tạo ra ELK Stack kiếm tiền bằng các dịch vụ cloud
hoặc các sản phẩm ‘premium’ phụ thêm (Ví dụ như X-Pack sử dụng
Machine Learning).
•
Khả năng co giãn, mở rộng tốt: Logstash và Elasticsearch có thể chạy
trên nhiều điểm nút của hệ thống được gọi là ‘node’ nên hệ thống ELK
cực kì dễ mở rộng. Khi có thêm dịch vụ, thêm người dùng, muốn lưu trữ
log nhiều hơn chỉ việc thêm node cho Logstash và Elasticsearch là xong.
•
Tìm kiếm và bộ lọc dữ liệu mạnh: Elasticsearch cho phép lưu trữ thơng
tin kiểu NoSQL, hỗ trợ ln tìm kiếm Full-Text là tìm kiếm tồn bộ văn
bản nên việc truy vấn rất dễ dàng và nhanh chóng.
8
•
Cộng đồng sử dụng lớn mạnh, hướng dẫn nhiều: Vì những lợi ích mà
ELK Stack đem lại nên nhiều cơng ty dùng. Từ đó dĩ nhiên sẽ có nhiều
hướng để học và dùng ELK Stack.
•
Mỗi phần mềm trong ELK Stack đều có thể được tùy chỉnh cấu hình sao
cho phù hợp với q trình hoạt động của hệ thống.
•
Thu thập được log từ rất nhiều nguồn khác nhau: log hệ thống, log ứng
dụng, log thiết bị mạng, log snmp, log từ các hệ thống API (Application
Programming Interface)…
•
Giao diện Kibana trực quan, sinh động.
•
Phương tiện cảnh báo đa dạng, tích hợp với email, sms, slack, các ứng
dụng OTP (One Time Password) như Telegram, Whatsapp,...
•
Hiệu năng xử lý cao, có thể chịu tải được một lượng lớn dữ liệu (log) đẩy
về mà không phải quá phụ thuộc vào khả năng xử lý của phần cứng.
•
Giải quyết được hầu hết các bài tốn trong giám sát hệ thống mạng: giám
sát hạ tầng, giám sát dịch vụ, giám sát an ninh, giám sát người dùng,...
Đây là đặc điểm chính giúp cho ELK trong tương lai sẽ được các công ty và
tổ chức sử dụng để triển khai hệ thống giám sát tập trung bên trong hệ thống mạng
của họ
ELK Stack là một nền tảng rất linh hoạt và nó đã được dùng cho nhiều
trường hợp khác nhau, sử dụng cho các mảng, ngành công nghiệp khác nhau.
Trong mảng Bảo mật thơng tin, nó thường được so sánh với bộ công cụ Splunk.
Một số trường hợp sử dụng ELK stack bao gồm có:
•
Vẽ Dashboard
•
Quản lý log
•
Giám sát an ninh
•
Nghiên cứu log forensic
9
•
Săn bắt mối đe dọa
Lý do chung cho tất cả các trường hợp được sử dụng ở trên đó là ELK Stack
cung cấp khả năng phân tích log theo cách dễ dàng, thuận tiện và đem lại giá trị sử
dụng một cách đáng kể. Sẽ khơng có ảnh hưởng, hư hại nào tới dữ liệu khi việc
phân tích này xảy ra với tốc độ q nhanh.
1.2.2. Mơ hình hoạt động
ELK Stack là Technical Stack, vì thế nên nó là một tập hợp những phần
mềm/công nghệ phối hợp chung với nhau, tạo thành một nền tảng để ứng dụng có
thể hoạt động được. ELK stack có các thành phần cơ bản như sau:
•
Shipper: Thu gom và gửi log từ client lên server tập trung;
•
Broker: Có thể có hoặc khơng. Mục đích là sắp xếp hàng đợi tránh nghẽn cổ
chai và xung đột;
•
Indexer: Phân loại, đánh chỉ mục cho log để tiện filter, tìm kiếm về sau;
•
Search và Storage: Lưu trữ và cung cấp bộ máy tìm kiếm log;
•
Web interface: Giao diện để người dùng, người quản trị thao tác với log đã
được thu gom.
Hình 1.2. Các thành phần cơ bản của ELK Stack
10
Trong bài tìm hiểu này em sẽ sử dụng mơ hình hoạt động ELK Stack gồm 4
thành phần như sau:
•
Elasticsearch: Là bộ máy lưu trữ, tìm kiếm, query log siêu mạnh. Tuy được
dùng để lưu trữ log nhưng nó khơng phải là Database (như mysql, redis,…).
•
Kibana: Giao diện để quản lý, thống kê log. Đọc thơng tin từ Elasticsearch.
•
Logstash: Tiếp nhận log từ nhiều nguồn (Beats, syslog,…), sau đó xử lý log
(đánh chỉ mục cho log để tiện tìm kiếm) và đẩy dữ liệu vào Elasticsearch.
• Beats: Một tập các công cụ chuyên dùng để thu thập dữ liệu được cài đặt
trên Client với nhiệm vụ gửi dữ liệu về Logstash
Hình 1.3. Các phần mềm của ELK Stack
Cơ chế hoạt động của ELK Stack:
•
Đầu tiên, log sẽ được đưa đến Logstash. (Thơng qua nhiều con đường, ví
dụ như server gửi UDP request chứa log tới URL của Logstash, hoặc
Syslog, Beat đọc tập tin log file và gửi lên Logstash).
•
Logstash sẽ đọc được những log này, thêm những thông tin như thời gian,
IP, phân tích dữ liệu từ log (server nào, độ nghiêm trọng, nội dung log)
ra, sau đó ghi xuống Elasticsearch.
•
Khi muốn xem log, người dùng vào URL của Kibana. Kibana sẽ đọc
thông tin log trong Elasticsearch, hiển thị lên giao diện cho người dùng
truy xuất và xử lý.
11
Hình 1.4. Mơ hình hoạt động của ELK Stack
1.2.3. Các thành phần của hệ thống ELK Stack
1.2.3.1. Beats
Beats là một thành phần được cài đặt trên các Agent dùng để thu thập và đẩy
các sự kiện, các dữ liệu từ các nguồn khác nhau về Server, thông thường dữ liệu sẽ
được lưu trữ tại Elasticsearch trên Server. Thông qua Beats dữ liệu có thể được gửi
trực tiếp tới Elasticsearch hoặc thơng qua Logstash.
Hình 1.5. Beats và ngun lý hoạt động
Trong Beats có rất nhiều các Beat “con”, một số beats pattern thường được
dùng là:
•
Packetbeat: Cơng cụ này sử dụng để giám sát lưu lượng và băng thông trên
các máy chủ. Packetbeat sẽ thu thập thơng tin về lưu lượng gói tin vào và ra
của máy chủ, từ đó tổng kết và gửi về cho hệ thống ELK.
12
•
Topbeat: Như là một monitor agent, giúp chúng ta có thể thu thập các thông
tin về phần cứng như là: CPU, RAM,…
•
Filebeat: Đây là cơng cụ chun dùng để thu thập và gửi log từ client về về
cho hệ thống ELK. Filebeat có một điểm mạnh mà cách thu thập thơng
thường khơng thể có được, chính là khả năng theo dõi tình trạng của ELK và
điều chỉnh lượng log đẩy về. Nếu hệ thống ELK đang gặp tình trạng quá tải
về khối lượng cần xử lý, Filebeat sẽ quan sát và giảm lượng log đổ về bằng
cách sử dụng hàng chờ.
•
Winlogbeat: Khác với các hệ điều hành mã nguồn mở Linux, Windows có
một cấu trúc hồn tồn khác, và khó can thiệp vào sâu trong hệ thống để thu
thập thông tin. Giúp vận chuyển event log từ bên trong các client là máy OS
Windows.
•
Metricbeat: Thu thập thập hiệu năng của máy chủ, các dữ liệu từ hệ điều
hành. Ngoài hiệu năng phần cứng máy chủ, Metricbeat có thể khai thác
thơng tin các dịch vụ web (Apache, Nginx) hay của database (MySQL,
MongoDB)….
Beats là một platform trong đó có các project nhỏ sinh ra thực hiện trên từng
loại dữ liệu nhất định.
Hình 1.6. Mơ hình Beats Plastform
13
Đối với hệ thống ELK, để đẩy được các dữ liệu từ Agent về phía Server các
Agent phải được cài đặt Filebeat vận chuyển các log từ client tới Server hoặc là
Winlogbeat-vận chuyển event log từ client là máy chạy hệ điều hành Window. Các
beats sẽ kết hợp các thành phần của hệ thống lại để đọc dữ liệu, đánh chỉ mục và
hiển thị.
Hình 1.7. Ví dụ cấu trúc Filebeat
Khi khởi động Filebeat, nó sẽ khởi chạy một hay nhiều Prospector, các
Prospector sẽ tìm kiếm các đường dẫn của tập tin mà người dùng đã khai báo trong
tệp cấu hình. Với mỗi mơt tập tin log mà Prospector tìm thấy được, Filebeat sẽ
khởi chạy một Harvester. Mỗi một Harvester đọc một tập tin log, và gửi các bản tin
log này khi có dữ liệu mới tới Spooler. Spooler là nơi tổng hợp các sự kiện và gửi
dữ liệu đã tổng hợp được tới output mà người dùng đã cấu hình trên Filebeat.
1.2.3.2. Elasticsearch
Elasticsearch là một cơng cụ tìm kiếm cấp doanh nghiệp (enterprise-level
search engine). Được phát triển để tạo thành một cơng cụ, nền tảng kỹ thuật tìm
kiếm và phân tích thời gian thực (một cách nhanh chóng và chính xác), cũng như
cách để nó có thể áp dụng hay triển khai một cách dễ dàng vào các nguồn dữ liệu
khác nhau.
14
Nguồn dữ liệu nói trên bao gồm các cơ sở dữ liệu nổi tiếng như MSSQL, MySQL,
PostgreSQL,… cũng có thể là văn bản (text), thư điện tử (email), tệp tin pdf, … nói
chung là tất cả những thứ có liên quan tới dữ liệu có văn bản.
Hình 1.8. Cơng cụ Elasticsearch
Elasticsearch là phần mềm open-source được phát triển bởi Shay Banon và
dựa trên Apache License, Elasticsearch là một bản phân phối mã nguồn mở cho
việc tìm kiếm dữ liệu trên máy chủ. Đây là một giải pháp mở rộng, hỗ trợ tìm kiếm
thời gian thực mà khơng cần có một cấu hình. Được phát triển bằng ngơn ngữ java.
Elasticsearch được xây dựng để hoạt động như một server cloud theo cơ chế
RESTful. Điều này giúp nó có thể tương tác và sử dụng với rất nhiều ngơn ngữ,
cũng chính vì thế mà trở thành điểm yếu của nó khi độ bảo mật khơng cao.
Elasticsearch có thể tích hợp được với tất cả các ứng dụng sử dụng các loại
ngôn ngữ sau: Java, Javascript, Groovy, .NET, PHP, Perl, Python, Ruby. Nó đã
được sử dụng bởi một số công ty như: Mozilla, SoundCloud, GitHub, Netflix.
Tiêu chí phát triển của Elasticsearch là “real time” tức thời gian thực. Sở dĩ
Elasticsearch được gọi là “search & analyze in real time” là vì nó có khả năng trả
về kết quả tìm kiếm một cách nhanh chóng và chính xác trong một nguồn dữ liệu
lớn.
Ưu điểm:
15
•
Tìm kiếm dữ liệu rất nhanh chóng, mạnh mẽ dựa trên Apache
Lucene. Tìm kiếm trong Elasticsearch gần như là realtime hay cịn
gọi là near-realtime searching.
•
Có khả năng phân tích dữ liệu.
•
Lưu trữ dữ liệu dạng full-text.
•
Đánh chỉ mục cho dữ liệu.
•
Hỗ trợ tìm kiếm mờ, tức là từ khóa tìm kiếm có thể bị sai lỗi chính
tả hay khơng đúng cú pháp thì vẫn có khả năng trả về kết quả tốt.
•
Elasticsearch hỗ trợ nhiều client phổ biến như Java, PHP,
Javascript, Ruby, .NET, Python.
Nhược điểm:
•
Elasticsearch được thiết kế cho mục đích search, do vậy với những
nhiệm vụ khác ngồi search như CRUD thì Elasticsearch kém thế
hơn so với những database khác như Mongodb, Mysql, … Do vậy
elasticsearch ít khi được dùng làm database chính, mà thường kết
hợp nó với một database khác.
•
Trong Elasticsearch khơng có khái niệm database transaction, tức
là nó sẽ khơng đảm bảo được tồn vẹn dữ liệu trong các hoạt động
Write, Update, Delete.
•
Elasticsearch khơng cung cấp bất kỳ tính năng nào cho việc xác
thực và phân quyền (authentication or authorization). Điều này làm
cho Elasticsearch kém sự bảo mật so với các hệ quản trị cơ sở dữ
liệu hiện nay.
Với những ưu và nhược điểm trên Elasticsearch sẽ phù hợp cho mục đích sử
dụng như sau:
Tìm kiếm text thông thường.
16
•
Tìm kiếm text và dữ liệu có cấu trúc.
•
Tổng hợp dữ liệu.
•
Tìm kiếm theo tọa độ.
•
Lưu trữ dữ liệu theo dạng JSON.
•
Phục vụ cho việc lưu trữ và phân tích dữ liệu lớn.
Cơ chế hoạt động của ElasticSearch:
Sở dĩ Elasticsearch được gọi là "search & analyze in real time" là vì nó có
khả năng trả về kết quả tìm kiếm một cách nhanh chóng và chính xác trong một
nguồn dữ liệu lớn (big data source). Elasticsearch khơng chỉ tìm kiếm được các
nguồn cơ sở dữ liệu nổi tiếng như MySQL, MS SQL, PostgreSQL, mà nó có thể là
văn bản (text), pdf, doc.
Theo như cách thơng thường tìm kiếm trong cơ sở dữ liệu database đều biết
thì có hai cách là:
− Cách 1: Lật từng trang để tìm kiếm (No index).
− Cách 2: Lật tới phần mục lục để tìm kiếm.
Về cơ bản thì ElasticSearch cũng áp dụng giải pháp giống Index. Tuy nhiên
về mặt cơ chế xử lý và tìm kiếm thì có sự khác biệt, Index trong ElasticSearch
được gọi là Inverted Index. Kỹ thuật thay vì index theo từng đơn vị row
(document) giống như mysql thì chúng ta sẽ biến thành Index theo đơn vị term. Cụ
thể hơn, Inverted Index là một cấu trúc dữ liệu, nhằm mục đích map giữa term và
các document chứa term đó, giúp gia tăng khả năng tìm kiếm.
1.2.3.3. Logstash
Đây là một cơng cụ sử dụng để thu thập dữ liệu mã nguồn mở với khả năng
chỉ dẫn tới thời gian thực, xử lý log được viết bằng java. Nhiệm vụ chính của
Logstash là thu thập log sau đó chuyển vào Elasticsearch. Mỗi dòng log của
Logstash được lưu trữ dưới dạng json.
17
Hình 1.9. Cơng cụ Logstash và ngun lý hoạt động
Là một chương trình mã nguồn mở, nằm trong hệ sinh thái của bộ sản phẩm
ELK Stack. Logstash có thể chạy nhiều tiến trình trên cùng một máy. Mỗi tiến
trình này được gọi là pipeline, mỗi một pipeline bao gồm ba giai đoạn trong chuỗi
xử lý sự kiện log tương ứng ba module:
•
INPUT: tiếp nhận/thu thập dữ liệu sự kiện log ở dạng thô từ các nguồn khác
nhau như file, redis, beats, syslog, …
•
FILTER: sau khi tiếp nhận dữ liệu sẽ tiến hành thao tác dữ liệu sự kiện log
(như thêm, xóa, thay thế, … nội dung log) theo cấu trúc của quản trị viên
viết để xây dựng lại cấu trúc dữ liệu log event theo mong muốn.
•
OUTPUT: sau cùng sẽ thực hiện chuyển tiếp dữ liệu sự kiện log về các dịch
vụ khác như Elasticsearch tiếp nhận lưu trữ log hoặc hiển thị log, …
Hình 1.10. Quá trình xử lý của Logstash
18
Quá trình xử lý chung của Logstash:
Ở bước INPUT, Logstash sẽ được cấu hình lựa chọn hình thức tiếp nhận log
event hoặc đi lấy dữ liệu log theo nhu cầu. Sau khi lấy được log event thì khâu
INPUT sẽ ghi dữ liệu event xuống hàng đợi tập trung ở bộ nhớ RAM hoặc trên ổ
cứng.
Mỗi một luồng dữ liệu làm việc sẽ tiếp tục lấy một loạt sự kiện đang nằm
trong hàng đợi này để xử lý FILTER giúp tái cấu trúc dữ liệu log trước khi được
gửi đi ở phần OUTPUT. Số lượng sự kiện được xử lý một loạt và số lượng luồng
dữ liệu làm việc có thể được cấu hình tinh chỉnh tối ưu hơn.
Mặc định Logstash sử dụng hàng đợi nằm trong bộ nhớ RAM giữa các giai
đoạn (input → filter và filter → output) để làm bộ đệm lưu trữ dữ liệu sự kiện
trước khi xử lý. Nếu mà chương trình dịch vụ Logstash vì một lý do nào đó bị
dừng hoạt động giữa chừng, thì các dữ liệu sự kiện đang nằm trong bộ nhớ đệm sẽ
bị mất.
Input
Input plugin làm nhiệm vụ thu thập dữ liệu log, mỗi khi có dữ liệu thay đổi
trong tệp dữ liệu log, tiến trình thu thập trong Input Plugin sẽ được kích hoạt để
triết xuất lấy phần dữ liệu đó.
Logstash cung cấp nhiều dạng input plugin tương ứng với nhiều nguồn dữ
liệu khác nhau, input plugin làm nhiệm vụ kết xuất (extract) dữ liệu từ dữ liệu
nguồn. Công việc này tương ứng với công đoạn Extract trong cơng nghệ tích hợp
dữ liệu ETL. Sau đây chúng ta sẽ tìm hiểu một số input plugin được sử dụng trong
luận văn.
•
File: File input được sử dụng để đọc dữ liệu từ tệp (file), thường là file chứa
dữ liệu log. Mặc định File input sẽ đọc dữ liệu trong tệp theo từng dòng, mỗi
dòng được phân cách bởi ký tự “\n”. File có thể được cấu hình đọc ở 2 chế
độ:
•
Chế độ đọc đoạn cuối (Tail mode): Ở chế độ này, file được coi là nội dung
không bao giờ kết thúc, file luôn được theo dõi những thay đổi về nội dung
19
và sẽ chuyển những nội dung thay đổi đó sang đích. Khi file được quay vịng
thì vị trí đọc hiện tại sẽ được đặt về 0 và tiếp tục đọc tiếp những thay đổi dữ
liệu của file. Các file dữ liệu log thường được cấu hình ở chế độ này, và đây
là chế độ đọc mặc định của file input.
•
Chế độ đọc thông thường (Read mode): Ở chế độ này, file được coi như nội
dung đã hồn thành và khơng có phát sinh thêm dữ liệu. Khi đó File input sẽ
thực hiện đọc từ đầu file đến cuối file và file chỉ được đọc 1 lần.
•
Syslog: chương trình Logstash sẽ tiếp nhận dữ liệu syslog.
•
Redis: đọc dữ liệu log từ redis server.
•
Beats: xử lý các dữ liệu thơng tin được gửi từ chương trình Beats (một sản
phẩm nổi tiếng trong hệ thống ELK).
Logstash có hỗ trợ khá nhiều loại plugin input khác nhau giúp linh động
trong việc nhận nguồn dữ liệu log.
Hình 1.11. Mơ tả q trình Input của Logstash
Filter
Có thể kết hợp filter với các điều kiện so sánh nhằm thực hiện một tác vụ
hành động khi một sự kiện thỏa mãn khớp với các tiêu chí do người cấu hình đề ra.
Một số filter plugin hữu ích như:
20
•
Grok: nếu gặp một dữ liệu sự kiện log với cấu trúc văn bản không phổ biến
hoặc là phức tạp, thì Grok hiện là plugin filter tốt nhất để phân tích cú pháp
dữ liệu log khơng được cấu trúc văn bản thành một thứ có cấu trúc và có thể
truy vấn được. Bộ lọc Grok sử dụng biểu thức chính quy (Regular
Expression) để kết xuất ra các dữ liệu phù hợp với biểu thức. Grok trong
LogStash hỗ trợ một số biểu thức chính quy được chuẩn hóa như dạng
DATE, MONTH, IP, … Tuy nhiên nếu dữ liệu cần đọc không thể sử dụng
được loại biểu thức chuẩn hóa có sẵn nào của LogStash thì ta có thể thực
hiện viết cú pháp biểu thức chính quy thủ cơng.
•
Mutate: thực hiện sự thay đổi trên thông tin sự kiện log như: đổi tên, xóa,
thay thế, tinh chỉnh các trường thơng tin của sự kiện log.
•
Drop: dừng xử lý sự kiện ngay lập tức, ví dụ các ‘debug event’.
•
Clone: tạo một bản copy của sự kiện.
•
Geoip: thêm thơng tin về vị trí địa lý của địa chỉ IP (thường để hiển thị biểu
đồ trên Kibana)
Hình 1.12. Mơ tả q trình Filter của Logstash
Outputs
21
Output là bước cuối cùng trong chuỗi các bước xử lý của Logstash. Một sự
kiện có thể đưa qua nhiều output khác nhau, các Output plugin hay sử dụng:
•
Elasticsearch: gửi dữ liệu sự kiện đến hệ thống Elasticsearch. Tất nhiên đầu
cuối của hệ thống logging ELK thường là Elasticsearch giúp lưu trữ log, tìm
kiếm log,…
•
File: nếu người cài đặt khơng cần bất kì sự lưu trữ log cho việc tìm kiếm,
hiển thị,… mà chỉ cần kiểm tra xem hệ thống có hoạt động khơng thì có thể
lưu ra file trên hệ thống.
•
Graphite: gửi dữ liệu tới graphite, một trong những tool mã nguồn mở hỗ trợ
việc lưu trữ và tạo biểu đồ metric.
•
Statsd: gửi dữ liệu tới dịch vụ ‘statsd’.
Hình 1.13. Mơ tả q trình Output của Logstash
1.2.3.4. Kibana
Kibana là một phần mềm mã nguồn mở phục vụ cho việc hiển thị và trực
quan hóa dữ liệu từ Elasticsearch, chuyên dùng cho những dữ liệu lớn truyền phát
trên thời gian thực. Elastic (trước đây là Elaticsearch) được thành lập vào năm
2012 để cung cấp các công cụ và dịch vụ liên quan đến cơng cụ tìm kiếm doanh
nghiệp phân tán của cơng ty, cịn được gọi là Elaticsearch.
22
Hình 1.14 Cơng cụ Kibana
Kibana được thiết kế để hoạt động cùng với Elaticsearch để tạo để giải quyết
vấn đề đọc các luồng dữ liệu lớn và phức tạp một cách dễ dàng và nhanh chóng, dễ
hiểu hơn thơng qua biểu diễn đồ họa. Phần mềm cũng có thể tạo báo cáo PDF theo
yêu cầu hoặc theo lịch trình và cung cấp bảng điều khiển linh hoạt, năng động. Các
báo cáo được tạo có thể biểu điễn dữ liệu ở dạng thanh, đường thẳng, biểu đồ phân
tán hoặc định dạng biểu đồ biểu đồ hình trịn với màu sắc có thể tùy chỉnh và kết
quả tìm kiếm được tơ sáng. Kibana cũng bao gồm các công cụ chia sẻ dữ liệu trực
quan.
Kibana là một phần rất quan trọng trong ELK Stack, một bộ cơng cụ phân
tích và trực quan hóa dữ liệu. Biểu đồ của Kibana: được phát triển riêng cho ứng
dụng ELK, thực hiển chuyển đổi các truy vấn của người dùng thành câu truy vấn
mà Elasticsearch có thể thực hiện được. Kết quả hiển thị bằng nhiều cách: theo các
dạng biểu đồ.
Hình 1.15. Biểu đồ hiển thị trên Kibana.
23
1.3.
Kết luận chương 1
Chương này đã thảo luận các thành phần của hệ thống ELK mà một tổ chức
có thể thực hiện để thực hiện chương trình quản lý log. Cụ thể, giới thiệu về Logs
và ý nghĩa của việc quản lý chúng, các tiêu chuẩn được thiết lập tốt và quy định mà
các tổ chức tuân thủ hoặc muốn tuân theo, sẽ đảm bảo rằng khả năng ghi nhật ký sẽ
tiếp tục nâng cao hơn những gì hệ thống đã cài đặt được thiết lập để làm. ELK là
giải pháp cơng nghệ đáp ứng với các tiêu chí như chi phí thấp, triển khai nhanh,
tính mở rộng cao và sử dụng cho phân tích log.
24
2
XÂY DỰNG THỰC NGHIỆM HỆ THỐNG ELK
2.1. Mơ hình triển khai
Nhóm xây dựng mơ hình triển khai thử nghiệm như sau:
1. ELK Server: Sử dụng làm máy chủ thu thập, xử lý, lưu trữ và hiển thị
logs
2. Web server: Làm máy client Web server
3. Syslog-ng: Đọc và gửi file logs client về máy chủ ELK
Hình 2.16. Mơ hình triển khai
Dựa vào mơ hình trên, triển khai mơ hình ELK trên nền tảng Docker. Web
server và Syslog-ng đều được cài trên nền tảng Docker. Logs được thu thập từ
client và gửi tới ELK Stack nhờ Syslog-ng.
25