Tuy nhiên, với một tập hợp dữ liệu khổng lồ và phức tạp như những nguồn thông tin có khối lượng lớn, tốc độ nhanh, hình thức định dạng dữ liệu khác nhau thì các phương pháp truyền thống
Trang 1Em xin cam đoan Khóa luận tốt nghiệp với đề tài: “Xây dựng hệ thống phân tích log trên nền tảng ElasticSearch” là do chính bản thân em tìm hiểu và phân tích Các
số liệu thu thập và kết quả nghiên cứu nêu trong khóa luận là trung thực và do chính
em thực hiện
Tp Hồ Chí Minh, ngày tháng năm 2017
Sinh viên thực hiện
Trần Cảnh Khánh
Trang 2T r a n g 1
Trang phụ bìa
Lời cam đoan
MỤC LỤC 1
Danh sách các ký hiệu và chữ viết tắt 4
Danh mục các bảng 5
Danh mục các hình vẽ, đồ thị 5
LỜI MỞ ĐẦU 6
CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 8
1.1 Giới thiệu về log 8
1.2 Quá trình phân tích log 8
1.2.1 Thu thập dữ liệu 9
1.2.2 Chuyển đối cấu trúc, phân tích dữ liệu 9
1.2.3 Mô phỏng dữ liệu, kết quả đạt được 9
1.3 Tại sao phải xây dựng hệ thống phân tích log? 10
1.4 Mục tiêu, đối tượng, phạm vi 11
1.4.1 Mục tiêu 11
1.4.2 Đối tượng 11
1.4.3 Phạm vi 12
1.5 Tình hình nghiên cứu chung khi xây dựng, phân tích log 12
1.6 Kết luận 13
CHƯƠNG 2 LOG CỦA DỊCH VỤ TRONG HỆ THỐNG 14
2.1 Hệ thống cân bằng tải Haproxy 14
Trang 3T r a n g 2
2.1.2 Các định dạng log 15
2.2 Hệ thống máy chủ web 19
2.2.1 Giới thiệu 19
2.2.2 Các loại log của máy chủ web 19
2.3 Kết luận 24
CHƯƠNG 3 HỆ THỐNG PHÂN TÍCH LOG ELASTIC STACK 25
3.1 Giới thiệu về ElasticSearch 25
3.1.1 Một số khái niệm cơ bản trong ElasticSearch 26
3.1.2 Kiến trúc ElasticSearch 28
3.1.3 Quá trình lưu trữ, truy xuất dữ liệu trong ElasticSearch 29
3.2 Giới thiệu về Logstash 31
3.2.1 Tính năng của Logstash 32
3.2.2 Kiến trúc của Logstash 33
3.2.3 Cấu trúc tập tin cấu hình của Logstash 34
3.2.4 Các loại Plugin trong Logstash 35
3.3 Kibana 35
3.4 Kết luận 37
CHƯƠNG 4 XÂY DỰNG HỆ THỐNG PHÂN TÍCH LOG 38
4.1 Mô hình triển khai 38
4.2 Thông tin thu thập 40
4.3 Cài đặt, cấu hình hệ thống 41
4.3.1 Cấu hình log trên các dịch vụ 41
Trang 4T r a n g 3
4.3.3 Cấu hình packetbeat 44
4.3.4 Cấu hình metricbeat 45
4.3.5 Cài đặt, cấu hình máy chủ ElasticSearch 46
4.3.6 Cài đặt, cấu hình máy chủ kibana 48
4.3.7 Cài đặt cấu hình máy chủ Logstash 49
4.3.8 Cấu hình cảnh báo khi có dấu hiệu bất thường 54
4.4 Hiển thị dữ liệu trên Kibana 64
4.4.1 Thống kê thông tin CPU, Memory, FileSystem, Network 66
4.4.2 Thống kê thông tin truy cập vào ứng dụng web 68
4.4.3 Thống kê các câu truy vấn trên MySQL 70
4.4.4 Tự động cảnh báo khi hệ thống có dấu hiệu bị xâm nhập 71
4.5 Kết luận 72
CHƯƠNG 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 73
5.1 Kết luận 73
5.2 Hướng phát triển 73
TÀI LIỆU THAM KHẢO 74
Trang 5T r a n g 4
CLF Common Log Format
CURD Create, read, update and delete
ELK Elastic, Logstash, Kibana
HTTP HyperText Transfer Protocol
ID Identification
IP Internet Protocol
MSSQL Microsoft Structured Query Language
MySQL My Structured Query Language
OSI Open Systems Interconnection Reference Model
TCP Transmission Control Protocol
TCP/UPD Transmission Control Protocol/User Datagram Protocol
UUID Universally unique identifier
Trang 6T r a n g 5
Bảng 2.1 Các trường dữ liệu trong định dạng mặc định của log haproxy [10] 15
Bảng 2.2 Các trường trong định dạng TCP của log haproxy [10] 17
Bảng 4.1 Thông tin các máy chủ trong hệ thống triển khai 39
Danh mục các hình vẽ, đồ thị Hình 1.1 Quy trình xử lý phân tích log 9
Hình 3.1 Minh họa việc lưu trữ dữ liệu trên ElasticSearch [2] 27
Hình 3.2 Kiến trúc ElasticSearch [3] 28
Hình 3.3 Mô tả quá trình lữu trữ dữ liệu trên ElasticSearch [2] 30
Hình 3.4 Mô tả quá trình truy xuất dữ liệu.[2] 30
Hình 3.5 Kiến trúc Logstash [3] 33
Hình 3.6 Kiến trúc đơn giản của Logstash.[3] 34
Hình 3.7 Mô tả thu thập và xử lý dữ liệu trong Elastic Stack.[1] 36
Hình 4.1 Mô hình hệ thống phân tích Log 38
Hình 4.2 Danh sách các chỉ mục trên hệ thống ElasticSearch 65
Hình 4.3 Danh sách các chỉ mục trên Kibana 65
Hình 4.4 Dữ liệu sau khi được thu thập, xử lý, lưu xuống ElasticSearch 66
Hình 4.5 Thông tin CPU được hiển thị dưới dạng biểu đồ 66
Hình 4.6 Thông tin RAM thu thập được 67
Hình 4.7 Số lượng giao dịch và các trạng thái lỗi trên hệ thống 68
Hình 4.8 Thống kê các yêu cầu truy cập nhiều nhất vào vị trí người dùng truy cập 69
Hình 4.9 Thông tin thu thập được về hiệu năng MySQL 70
Hình 4.10 Hệ thống gửi mail cảnh báo khi phát hiện có dấu hiện tấn công 71
Trang 7T r a n g 6
Chúng ta đang sống trong thời đại của công nghệ thông tin - một thế giới ngập tràn
dữ liệu Kho dữ liệu này chứa đựng một lượng lớn thông tin cực kỳ quý giá, biết tận dụng là một lợi thế Tuy nhiên, với một tập hợp dữ liệu khổng lồ và phức tạp như những nguồn thông tin có khối lượng lớn, tốc độ nhanh, hình thức định dạng dữ liệu khác nhau thì các phương pháp truyền thống không đủ mạnh để xử lý được
Nghiên cứu của Intel tháng 9/2013 cho thấy hiện nay thế giới đang tạo ra 1 petabyte
dữ liệu trong mỗi 11 giây, tương đương với một đoạn video HD dài 13 năm Bản thân các công ty, doanh nghiệp cũng đang sở hữu “Big Data” của riêng mình Biết cách khai thác Big Data sẽ tạo ra sự khác biệt, hình thành lợi thế cạnh tranh vượt trội Doanh nghiệp khi hiểu rõ đối tượng khách hàng của mình là ai, họ cần gì, họ ở đâu, họ có những suy nghĩ như thế nào khi truy cập một website,…sẽ chủ động trong việc đưa ra các giải pháp chiến lược kịp thời nhằm nắm bắt thị trường Bên cạnh đó, với một lượng lớn dữ liệu quan trọng của các cơ quan, tổ chức được lưu trữ trên mạng, trong trường hợp hệ thống mạng xảy ra sự cố, việc bảo mật thông tin và khả năng truy cập của người dùng sẽ bị ảnh hưởng Mức độ nghiêm trọng của sự cố tùy thuộc vào khả năng đáp ứng kịp thời hay tính sẵn sàng của dịch vụ cung cấp Vì vậy, việc nắm bắt những hoạt động đang xảy trong hệ thống mạng tổ chức, doanh nghiệp là rất cần thiết và quan trọng, giúp người quản trị hệ thống có căn cứ chính xác để nâng cao khả năng ra quyết định, khám phá giá trị nội tại và tối ưu hoá quy trình làm việc
Việc trích xuất dữ liệu một cách chính xác, hữu ích với chi phí hợp lý là thách thức đặt ra cho các tổ chức, doanh nghiệp lớn Câu hỏi được đặt ra là: Trong bối cảnh chi phí đầu tư cho việc thu thập, lưu trữ, phân tích hệ thống quản lý dữ liệu luôn không phải là một con số dễ chịu, thì cần sử dụng phương pháp nào để đáp ứng các yêu cầu như: Theo dõi hoạt động của người sử dụng, phát hiện các vấn đề xảy ra trong hệ thống, phân tích hiệu năng của hệ thống, phân tích để phát hiện các vấn đề về bảo mật, phân tích để đưa ra dự đoán ? Lĩnh vực nghiên cứu mà khóa luận tập trung là ở nội dung phân tích log sẽ giải quyết các vấn đề này Khóa luận sẽ trình bày cách xây dựng
Trang 8T r a n g 7
tính toán cao, một hệ thống được thiết kế đảm bảo tính dự phòng và có khả năng mở rộng Trong hệ thống Elastic stack, dữ liệu có thể được thu thập từ nhiều nguồn máy chủ khác nhau, có cấu trúc định dạng khác nhau, được lưu trữ tập trung với việc lập chỉ mục để có thể phân tích dữ liệu nhanh chóng
Trang 9Log lưu lại thông tin về hoạt động của hệ thống hoặc các dịch vụ Hầu như các thao tác trên hệ thống đều tạo ra log Cấu trúc của một tập tin log về cơ bản có hai trường chính, đó là thời gian và dữ liệu Thời gian ở đây là thời gian mà dòng log được ghi lại, còn dữ liệu bao gồm các thông tin về hoạt động xảy ra trên hệ thống Thông thường log
được định dạng kiểu “plain text” và có phần mở rộng log
Như vậy, log có tác dụng ghi lại liên tục 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ào tập tin nhật ký tương ứng Thông qua việc lưu trữ và phân tích log, người quản trị mạng sẽ giám sát tình trạng hoạt động cũng như giải quyết các vấn đề gặp phải của hệ thống, dịch vụ Khi xảy ra sự
cố, việc phân tích log sẽ giúp phát hiện vấn đề nhanh hơn nhằm đưa ra giải pháp xử lý kịp thời Điều này cực kỳ quan trọng với các hệ thống cần tính sẵn sàng cao để phục vụ nhu cầu người dùng Bên cạnh đó, phân tích log cũng dùng để phát hiện và dự đoán các vấn đề xảy ra cho hệ thống
1.2 Quá trình phân tích log
Một quá trình thu thập phân tích log gồm các giai đoạn như hình dưới
Trang 10Mô hình quản lý log tập trung được đưa ra để giải quyết vấn đề này Cụ thể tất cả các tập tin log sẽ được chuyển về một hệ thống chung để phân tích, xử lý
1.2.2 Chuyển đối cấu trúc, phân tích dữ liệu
Sau khi đã thu thập được những thông tin về hệ thống thì công việc tiếp theo chuyển đổi cấu trúc của định dạng log, phân tách ra các trường riêng biệt và phân tích thông tin thu thập được Dữ liệu sẽ được đánh chỉ mục, phát hiện những điều bất thường, những mối đe dọa hệ thống Dựa trên những thông tin về lưu lượng truy cập, trạng thái truy cập, hiệu năng của máy chủ… Ví dụ lưu lượng mạng tăng vọt lên một thời điểm thì có thể là dấu hiệu hệ thống bị tấn công từ chối dịch vụ
1.2.3 Mô phỏng dữ liệu, kết quả đạt được
Sau khi thực hiện việc phân tích dữ liệu từ các nguồn thu thập được, việc tiếp theo
là thực hiện việc tổng hợp, biểu diễn thông tin dưới dạng các biểu đồ để người quản trị
Trang 111.3 Tại sao phải xây dựng hệ thống phân tích log?
Như đã đề cập ở trên, trong hệ thống tổ chức, doanh nghiệp, các tập tin log được tạo ra hàng ngày sẽ cung cấp cho chúng ta những thông tin cần thiết về tình trạng của
hệ thống Các tập tin log chứa đựng các thông tin mà các nguồn dữ liệu khác không có được Chẳng hạn như: Tập tin log của dịch vụ cơ sở dữ liệu mysql ghi lại các thông báo lỗi liên quan đến các câu truy vấn, tốc độ xử lý các câu truy vấn Tập tin log của một máy chủ web ghi lại thông tin về tất cả các yêu cầu gửi đến, các phản hồi gửi đi, thời gian trả lời khi nhận yêu cầu từ người dùng Để kiểm soát được mọi hoạt động diễn ra đòi hỏi người quản trị hệ thống cần phải tiến hành phân tích log Ví dụ, người quản trị có thể sử dụng các bản ghi từ cơ sở dữ liệu nhằm xác định những câu truy vấn chậm, đánh giá được hiệu năng của hệ thống, trong khi phân tích log của máy chủ web
có thể xác định được số người quan tâm đến những sản phẩm nào nhiều nhất
Dưới đây là một số mục đích phổ biến khi tiến hành phân tích log:
- Phát hiện các vấn đề xảy ra trong hệ thống: Đây là một trong những lý do
phổ biến khi ghi lại log trong hệ thống Trong Linux, để điều tra lỗi của dịch vụ,
người quản trị thường sử dụng câu lệnh tail hoặc cat để kiểm tra tập tin log của
dịch vụ, ứng dụng được sinh ra Làm thế nào để vừa không mất quá nhiều thời gian, vừa có thể truy cập nội dung tập tin log nhanh chóng mà không làm ảnh hưởng đến các vấn đề bảo mật của dữ liệu log? Đáp ứng yêu cầu này, cần có một hệ thống phân tích log tập trung và hiệu quả, giúp người quản trị nắm bắt vấn đề một cách kịp thời nhất
- Phân tích hiệu năng của hệ thống: Phân tích log giúp tối ưu và giám sát được
hiệu năng của hệ thống, phát hiện các điểm bị “thắt nút cổ chai” (bottleneck) Ví
Trang 12T r a n g 11
dụ: log của máy chủ web có thể biết được tài nguyên của dịch vụ có quá tải hay không dựa trên thời gian hồi đáp, mã hồi đáp HTTP
- Phân tích để phát hiện ra các vấn đề về bảo mật: Các tập tin log đóng một
vai trò quan trọng trong khâu bảo mật của bất kỳ tổ chức, doanh nghiệp nào Chúng đặc biệt hữu ích trong việc giám sát chặt chẽ, phát hiện kịp thời các vi phạm về bảo mật, các cuộc tấn công nguy hiểm, vì khi người dùng tương tác với
hệ thống, các hành động của họ sẽ được ghi lại vào tập tin log
- Phân tích để đưa ra dự đoán: Đây là xu hướng nóng trong thời gian gần đây
Log có thể được sử dụng để tiên đoán, giúp xác định khách hàng tiềm năng hay
để lập kế hoạch nâng cấp tài nguyên của hệ thống tương lai
Như vậy, phân tích log là một phương pháp trích xuất dữ liệu giúp chúng ta có thể lấy nhiều thông tin có giá trị có ích cho các tổ chức, doanh nghiệp trong việc giải quyết các vấn đề liên quan
1.4 Mục tiêu, đối tượng, phạm vi
1.4.1 Mục tiêu
Khóa luận có 3 mục tiêu chính:
- Nghiên cứu được mô hình lưu trữ và phân tích log trên hệ thống Elastic stack
- Triển khai hệ thống phân tích log elastic stack được tính toán và lưu trữ trên 2 nodes và có khả năng mở rộng theo chiều ngang khi dung lượng log tăng lên
- Dựa trên các nội dung trình bày, xây dựng một số kịch bản thử nghiệm dữ liệu
đã được phân tích
1.4.2 Đối tượng
Phân tích log của các dịch vụ apache, mysql, haproxy trong hệ thống mạng
Trang 13T r a n g 12
1.4.3 Phạm vi
Đề tài chỉ tập trung việc phân tích và lưu trữ log trên môi trường Elastic stack Đối tượng để phân tích log là các tập tin log được sinh ra bởi các máy chủ apache, mysql, haproxy Dựa vào các thông tin thu thập được cho phép người quản trị tìm kiếm theo các trường đã phân tích như IP nguồn, IP đích, dịch vụ Đồng thời biễu diễn các dữ liệu thu thập được dưới dạng các biểu đồ, giúp người dùng có cái nhìn trực quan về hệ thống Hệ thống thử nghiệm với dung lượng log của các dịch vụ được sinh ra khoảng 3Gb/ngày và tổng dung lượng log của hệ thống để truy vấn khoảng 40G
1.5 Tình hình nghiên cứu chung khi xây dựng, phân tích log
Để quản lý log một cách tốt hơn, xu thế hiện nay sử dụng log tập trung do có nhiều nguồn sinh ra log với nội dung không đồng nhất và log đòi hỏi phải được lưu trữ ở một nơi an toàn, bảo mật, sẵn sàng sử dụng để phân tích hệ thống Log tập trung giúp người quản trị mạng nắm bắt chi tiết hệ thống, giúp bảo mật và bảo toàn thông tin lưu trữ, đồng thời giảm bớt thời gian và sức lực khi tiến hành phân tích log
Quá trình phân tích log bao gồm việc kiểm tra log tại nhiều máy chủ được tạo bởi những thành phần khác nhau Điều này gây ra một số khó khăn trong việc phân tích log như:
- Định dạng của các tập tin log không nhất quán: Mỗi ứng dụng hay mỗi thiết bị đều có cách ghi của riêng nó
- Các tập tin log phân tán: Các tập tin log thường nằm trên nhiều thành phần khác nhau Đối với một, hai máy chủ thiết lập tìm ra một số thông tin từ log với lệnh
cat hoặc tail thì không có vấn đề gì Tuy nhiên nếu hệ thống doanh nghiệp có
100 máy chủ, những câu lệnh trên dường như khó thể đáp ứng được và cần phải
có một hệ thống quản lý tập trung để thực hiện việc phân tích log
- Cần phải có kiến thức chuyên môn về các thành phần, ứng dụng tạo ra tập tin log: Việc phân tích log đòi hỏi người quản trị phải có kiến thức chuyên môn về
Trang 14có phương thức thích hợp để trích xuất thông tin có giá trị Điều này đòi hỏi phải có một công cụ quản lý log tốt hơn, đáp ứng được sự phức tạp của luồng dữ liệu Elastic stack là một hệ thống phân tích log được phát triển bằng cách kết hợp 3 thành phần có chức năng riêng biệt: Logstash, Elasticsearch, Kibana Trong đó:
- Logstash dùng để thu thập log từ các máy chủ trong hệ thống và tiến hành phân tích
- ElasticSearch dùng để đánh chỉ mục và thực hiện truy vấn tìm kiếm dữ liệu
- Kibana hiển thị kết quả cho người dùng Kibana sẽ sử dụng ElasticSearch để tìm kiếm các dữ liệu phù hợp với yêu cầu của người dùng
Elastic stack có nhiều ưu điểm như phần mềm mã nguồn mở hoàn toàn miễn phí, cung cấp dịch vụ quản lý log rất tốt và dễ sử dụng Điểm mạnh của Elastic stack là khả năng thu thập, truy vấn, hiển thị kết quả gần như thời gian thực Có thể đáp ứng truy vấn một lượng dữ liệu cực lớn Hệ thống phân tích log giúp người quản trị phát hiện ra các điểm bất thường, giám sát được hiệu năng của hệ thống thông qua log thu thập được Đồng thời giúp người quản trị phân tích để phát hiện các vấn đề về bảo mật
1.6 Kết luận
Trong chương này chúng ta đã hiểu cơ bản về quá trình phân tích log và biết được những khó khăn gặp phải trong một hệ thống mà các tập tin log không được quản lý tập trung Từ nhu cầu đó cần phải xây dựng hệ thống phân tích log mà khóa luận này hướng đến Ở chương tiếp theo chúng ta sẽ đi sâu vào các tập tin log của dịch vụ và phương pháp để phân tích các tập tin đó
Trang 15CHƯƠNG 2 LOG CỦA DỊCH VỤ TRONG HỆ THỐNG
Tập tin log chứa những thông tin quan trọng về tên người dùng, địa chỉ IP nguồn, địa chỉ IP đích, số lượng bytes được chuyển, user agent sử dụng và nhiều thông tin hữu ích khác Bằng cách phân tích các tập tin log sẽ cho chúng ta những thông tin hữu ích
về người dùng, mọi hoạt động xảy ra trên hệ thống Phần này sẽ đi vào chi tiết về những tập tin log của dịch vụ web, dịch vụ cân bằng tải Haproxy
2.1 Hệ thống cân bằng tải Haproxy
2.1.1 Giới thiệu về log trong Haproxy
Một trong những điểm mạnh của Haproxy là khả năng cung cấp ghi nhật ký chính xác, điều này rất quan trọng để khắc phục sự cố trong một môi trường hệ thống phức tạp Những thông tin được cung cấp trong bản ghi bao gồm cổng kết nối phía máy khách, bộ định thời TCP/ HTTP, trạng thái phiên làm việc kết thúc, thông tin về các kết nối được chuyển hướng đến máy chủ
Haproxy cung cấp 5 định dạng log khác nhau Tùy theo thông tin cấu hình trong tập tin haproxy.cfg mà cho ra những định dạng đúng với yêu cầu của hệ thống
- Định dạng mặc định: Đây là định dạng rất cơ bản và rất hiếm khi được sử dụng
Nó chỉ cung cấp thông tin rất cơ bản về kết nối đến vào thời điểm nó được tiếp nhận Các thông tin cung cấp bao gồm: IP nguồn, cổng kết nối trên IP nguồn, IP đích, cổng kết nối trên IP đích Định dạng mặc định hiếm khi được sử dụng vì
nó không mô tả chi tiết thông tin cần thiết của dịch vụ
- Định dạng TCP: định dạng này có nhiều cải tiến hơn so với định dạng mặc định Định dạng TCP được sử dụng khi tùy chọn tcplog để thiết lập trong tập tin haproxy.cfg Haproxy thường sẽ đợi kết nối từ khi bắt đầu cho đến khi kết thúc rồi mới ghi lại vào trong tập tin nhật ký Định dạng này cung cấp nhiều thông tin hữu ích hơn như số lượng kết nối, kích thước hàng đợi… Đây là định dạng thường được sử dụng khi Haproxy thực hiện cân bằng tải ở tầng 4 trong mô hình OSI
Trang 16- Định dạng HTTP: Đây là định dạng nhiều cải tiến nhất khi Haproxy được sử dụng để cân bằng tải ở tầng 7 trong mô hình OSI Định dạng này được sử dụng khi tùy chọn httplog được thiết lập trong tập tin haproxy.cfg Định dạng này cung cấp những thông tin như định dạng TCP và một số trường khác như trạng thái trả về, thông tin header và cookies
- Định dạng HTTP CLF tương đương với định dạng HTTP, nhưng với các trường được sắp xếp theo cùng thứ tự như định dạng CLF Trong chế độ này, tất cả bộ đếm giờ, cờ xuất hiện một ô cho mỗi trường sau khi kết thúc các trường phổ biến, theo cùng thứ tự chúng xuất hiện ở định dạng HTTP tiêu chuẩn
- Tùy chỉnh định dạng log: Cho phép người quản trị tùy chỉnh định dạng log
2.1.2 Các định dạng log
2.1.1.1 Định dạng mặc định
Định dạng này được sử dụng khi trong tập tin cấu hình haproxy.cfg không được thiết lập tùy chọn nào Thông tin kết nối sẽ được ghi xuống tập tin nhật ký ngay khi kết nối thiết lập Đây là định dạng duy nhất ghi lại IP đích và cổng đích của máy khách
Một bản ghi log có định dạng mặc định
Feb 6 12:12:09 localhost haproxy[14385]: Connect from 10.0.1.2:33312 to 10.0.3.31:8012 (www/HTTP)
Bảng 2.1 Các trường dữ liệu trong định dạng mặc định của log haproxy [10]
Các trường trong định dạng mặc định Thông tin từ bản ghi
process_name '[' pid ']:' haproxy[14385]:
Trang 17- “process_name '[' pid ']”: ID của tiến trình
- “source_ip“: là địa chỉ IP của máy khách kết nối đến máy chủ haproxy
- “source_port”: là cổng TCP của máy khách dùng để kết nối đến máy chủ.
- “destination_ip”: là địa chỉ mà phía máy khách kết nối đến.
- “destination_port”: là cổng TCP mà máy khách kết nối đến.
- “frontend_name”: là tên của một quy trình xử lý dữ liệu nơi mà yêu cầu được
nhận và xử lý
- “mode”: chế độ mà haproxy hoạt động, nếu thực hiện cân bằng tải ở lớp 4 trong
mô hình OSI thì giá trị này là TCP, nếu thực hiện cân bằng tải ở lớp 7 trong mô hình OSI thì giá trị này là HTTP
2.1.1.2 Định dạng TCP
Định dạng TCP được sử dụng khi tùy chọn tcplog được thiết lập và được khuyến khích sử dụng trong trường hợp Haproxy thực hiện cân bằng tải ở lớp 4 Nó cung cấp nhiều thông tin hữu ích để khắc phục khi có sự cố Định dạng này bao gồm thông tin về
bộ tính giờ và số lượng byte của các kết nối Các bản ghi thường được ghi lại khi phiên kết nối kết thúc
Một bản ghi sử dụng định dạng tcp
Feb 6 12:12:56 localhost haproxy[14387]: 10.0.1.2:33313 [06/Feb/2009:12:12:51.443] fnt bck/srv1 0/0/5007 212 0/0/0/0/3 0/0
Ngoài các trường địa chỉ IP máy khách, cổng máy khách sử dụng để kết nối, ID tiến trình… như định dạng mặc định Định dạng TCP có một số trường khác so với định dạng mặc định
Trang 18Bảng 2.2 Các trường trong định dạng TCP của log haproxy [10]
Các trường trong định dạng TCP Thông tin từ bản ghi
process_name '[' pid ']:' haproxy[14387]:
Ý nghĩa một số trường trong bản ghi sử dụng định dạng TCP
- “client_ip”: là địa chỉ IP của máy khách khởi tạo kết nối TCP đến máy chủ
haproxy
- “client_port”: là cổng TCP mà máy khách sử dụng để khởi tạo kết nối đến máy
chủ
- “accept_date”: là ngày khi kết nối được nhận bởi haproxy
- “frontend_name”: là tên của một quy trình xử lý dữ liệu nơi mà yêu cầu được
- “Tt”: là tổng thời gian tính bằng milisecond khi một kết nối được chấp nhận
cho đến khi bị đóng lại
- “byte_read”: là tổng số byte truyền từ máy chủ đến máy khách khi log được
ghi
Trang 192.1.1.3 Định dạng HTTP
Định dạng HTTP là định dạng đầy đủ nhất và phù hợp nhất khi Haproxy đóng vai trò như một thiết bị cân bằng tải ở lớp 7 trong mô hình OSI Định dạng HTTP được bật khi tùy chọn httplog được chỉ định Nó cung cấp thông tin như định dạng TCP với các tính năng bổ sung mà cụ thể là cho giao thức HTTP Giống như định dạng TCP, việc ghi log thường được thực hiện khi kết thúc phiên làm việc
Hầu hết các trường trong định dạng HTTP đều giống với định dạng TCP, một số trường có thể hơi khác tùy thuộc vào cấu hình
Dưới đây là một định dạng HTTPlog
Feb 6 12:14:14 localhost haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in static/srv1 10/0/30/69/109
200 2750 - - 1/1/1/1/0 0/0 {1wt.eu} {} "GET /index.html HTTP/1.1"
2.1.1.4 Tùy chỉnh định dạng log
Tùy chỉnh định dạng log cho phép người quản trị tùy chỉnh định dạng của log ở chế
độ HTTP và TCP Haproxy hiểu một số biến định dạng log, các biến bắt đầu bằng ký
tự % Người quản trị có thể thay thế hoặc chỉ sử dụng một vài trường để định nghĩa một bản ghi log của Haproxy
Ví dụ hiện tại định dạng HTTP format sẽ được định nghĩa như sau
log-format "%ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B
%CC \
%CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs
%{+Q}r"
Trang 202.2 Hệ thống máy chủ web
2.2.1 Giới thiệu
Để quản lý một máy chủ web một cách hiệu quả, cần phải có những thông tin về hoạt động và hiệu suất của máy chủ cũng như bất cứ vấn đề nào đang xảy ra trong hệ thống Máy chủ Web Apache HTTP cung cấp nhiều cơ chế khác nhau để ghi lại mọi thứ xảy ra trên máy chủ từ yêu cầu ban đầu, qua quá trình ánh xạ URL, để quyết định kết nối, bao gồm bất kỳ lỗi nào có thể xảy ra trong quá trình này
Máy chủ web chứa tất cả các tập tin cần thiết để hiển thị trang web trên máy tính Tất cả các trang web riêng biệt kết hợp với nhau tạo thành một trang web hoàn chỉnh Những tập tin ảnh, biểu đồ và bất cứ đoạn script là một thành phần trong chức năng của trang web Người dùng gửi yêu cầu thông qua trình duyệt đến máy chủ web sử dụng giao thức HTTP Khi máy chủ web nhận được một yêu cầu HTTP, nó sẽ phản hồi thông qua HTTP ví dụ như trả về một trang HTML chứa những thông tin mà phía trình duyệt yêu cầu Trình duyệt lần lượt chuyển đổi, hoặc định dạng các tập tin vào một trang người dùng có thể xem được Cũng giống như vậy, máy chủ có thể gửi các tập tin tới nhiều máy tính khách cùng một lúc, cho phép nhiều khách hàng xem cùng một lúc một trang Tất cả hoạt động khi người dùng yêu cầu từ trình duyệt gửi đến máy chủ web và trả về được máy chủ web ghi lại dưới dạng các tập tin log
2.2.2 Các loại log của máy chủ web
Apache có nhiều tập tin log khác nhau nhằm ghi lại những hoạt động của máy chủ web Log của apache dưới dạng plain text Điển hình đối với hệ thống web thì có 2 loại log bên dưới:
- Error Log
- Access Log
Trang 21Định dạng của tập tin Error Log không bị bó buộc, đươc xác định bởi thông số ErrorLogFormat trong tập tin httpd.conf Người quản trị có thể tùy chỉnh các giá trị được ghi lại Thông thường một bản ghi trong tập tin Error Log có định dạng sau:
ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client %a] %M"
Trong đó
- %t là Thời gian xảy ra lỗi
- %l là Mức độ cảnh báo
- [pid %P] là ID của tiến trình hiện tại
- %F là tên tập tin nguồn và số dòng trong bản ghi truy xuất
- %E là trạng thái mã lỗi
- [client %a] là địa chỉ IP và cổng kết nối
- %M là nội dung cảnh báo
Thông tin người quản trị cần quan tâm đầu tiên là mức độ cảnh báo Mức độ cảnh báo cho phép người quản trị xác định mức độ nghiệm trọng của cảnh báo dựa trên cơ
sở mỗi tiêu chuẩn Mức độ cảnh báo có các cấp độ bên dưới theo thứ tự giảm dần
- Emerg: log ở cấp độ này mang tính khẩn cấp, hệ thống hiện không thể sử dụng được
- Alert: cảnh báo các vấn đề cần được xử lý ngay
Trang 22- Crit: các vấn đề quan trong nhưng không nhất thiết phải xử lý ngay lập tức, để theo dõi thêm
- Error: ghi lại thông tin lỗi như đăng nhập hoặc cấu hình sai, mức độ thấp hơn crit
- Warm: ở mức độ cảnh báo, không phải lỗi
- Notice: để thông báo cái gì đó
- Info: ghi thông tin hệ thống, không có gì cả
- Debug: ghi lại tất cả mọi thứ, dùng để dò lỗi
Trong tất cả mức độ ưu tiên, debug có mức độ cao nhất Debug bao gồm tất cả các thông tin của các cấp độ khác Dưới đây là một đoạn Error Log được sinh ra bởi dịch
vụ web apache
[Fri Sep 09 10:42:29.902022 2011] [core:error] [pid 35708:tid 4328636416] [client 72.15.99.187] File does not exist: /usr/local/apache2/htdocs/favicon.ico
Trong đó [Fri Sep 09 10:42:29.902022 2011] là thời gian của bản ghi Tiếp theo [core:error] là module tạo ra bản ghi (trong trường hợp này là core) và mức độ nghiêm trong của lỗi này là error ID tiến trình của tin nhắn này là 35708 và được truy cập từ máy khách có địa chỉ 72.15.199.187 Nguyên nhân gây ra lỗi trong trường hợp này là
do tập tin /usr/local/apache2/htdocs/favicon.ico không tồn tại Từ những thông tin thu được, người quản trị có thể dễ dàng đưa ra phương án xử lý để khắc phục lỗi này
3.2.2.1 Access Log
Tập tin access log ghi lại tất cả những yêu cầu được xử lý của máy chủ Vị trí và nội dung của tập tin access log được xác định bởi trường CustomLog trong tập tin cấu hình Mặc định tập tin access log được lưu tại đường dẫn /var/log/httpd/access_log Tất nhiên lưu trữ các thông tin trong access log chỉ là bước đầu tiên trong quản lý log Chúng ta cần phải phân tích những thông tin này để đưa ra các số liệu thống kê hữu ích
Trang 23Cấu hình định dạng của tập tin access log thường như sau
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
Cấu hình trên sẽ ghi lại các bản ghi trong một định dạng gọi là CLF Định dạng chuẩn này có thể được tạo ra bởi nhiều máy chủ web và được đọc bởi nhiều chương trình phân lích log Các bản ghi trong tập tin log được tạo sẽ giống như sau
123.19.163.34 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
Trong đó
- %h (123.19.163.34): Xác định ai đã truy cập vào trang web này Việc xác định người dùng chủ yếu là sử dụng địa chỉ IP được gán bởi nhà cung cấp dịch vụ Internet ISP Đây có thể là một địa chỉ tạm thời được gán cho người dùng Vì địa chỉ IP này được gán tạm thời nên có thể bị thay đổi trong những lần truy cập khác nhau Trong một số trang web, người dùng có thể được xác định bằng cách yêu cầu người dùng cung cấp thông tin rồi sử dụng tên người dùng và mật khẩu
để truy cập trang web Trong loại truy cập này, thông tin để xác định người dùng là duy nhất
- %l (-) :Dấu gạch nối trong đầu ra cho thấy không có thông tin yêu cầu
- %u (frank ): đây là thông tin userid của người gửi yêu cầu được xác định thông qua chứng thực HTTP Nếu trạng thái mã là 401 thì giá trị này không nên tin tưởng bởi vì người dùng đã không chứng thực Nếu như trang web không có mật khẩu bảo vệ thì giá trị này sẽ là “– “
- %t ([10/Oct/2000:13:55:36 -0700]): Thời gian mà yêu cầu được nhận
- \"%r\"("GET /apache_pb.gif HTTP/1.0"): Nội dung yêu cầu từ máy khách Nội dung này chứa rất nhiều thông tin rất hữu ích Thứ nhất phương thức được
Trang 24khách hàng sử dụng là GET Thứ 2, khách hàng yêu cầu tài nguyên /apache_pb.gif và cuối cùng khách hàng sử dụng giao thức HTTP/1.0
- %>s (200 ): Đây là mã trạng thái mà máy chủ trả về cho phía máy khách Thông tin này rất có giá trị bởi vì nó cho thấy yêu cầu đã được phản hồi thành công
- %b (2325): Phần cuối cùng cho biết kích thước của đối tượng trả về cho máy khách, không bao gồm thông tin header Nếu không có nội dung được trả lại cho máy khách thì giá trị này sẽ là “-“
Trên đây là những nội dung có trong tập tin log của máy chủ web Chi tiết tập tin log này được sử dụng trong quá trình điều tra khi có sự cố, cũng như cung cấp các thông tin hữu ích cho doanh nghiệp
- 1xx: Khi nhận được mã như vậy nghĩa là yêu cầu đã được máy chủ tiếp nhận và quá trình xử lý yêu cầu đang được tiếp tục
- 2xx: Khi nhận được mã như vậy tức là yêu cầu đã được máy chủ tiếp nhận và
Trang 25Vì thông tin mã trạng thái được lưu lại trong log khi máy chủ xử lý một yêu cầu từ phía khách hàng nên nắm rõ ý nghĩa của các mã trạng thái giúp người dùng biết được các yêu cầu gửi từ phía máy khách được xử lý thành công hay thất bại
2.3 Kết luận
Trong chương này, chúng ta đã trình bày vấn đề liên quan đến các tập tin log được sinh
ra của các dịch vụ apache, haproxy trong hệ thống mạng Giải thích về ý nghĩa các trường trong định dạng tập tin log của từng dịch vụ Chúng ta cũng tham khảo một vài bản ghi log mẫu của dịch vụ web và dịch vụ cân bằng tải để biết được ý nghĩa của từng thông số trước khi tiến hành xây dựng một hệ thống phân tích log Elastic Stack trích xuất dữ liệu từ những tập tin log trong hệ thống mạng
Trang 26T r a n g 25
CHƯƠNG 3 HỆ THỐNG PHÂN TÍCH LOG ELASTIC STACK
Việc phân tích log từ nhiều nguồn khác nhau tập trung về hệ một hệ thống quản lý chung là rất quan trọng Một hệ thống phân tích cần phải đáp ứng các yêu cầu bên dưới:
- Cung cấp chức năng tìm kiếm nhanh chóng để phát hiện ra lỗi
- Hệ thống có khả năng mở rộng theo chiều ngang, đáp ứng được khi có sự mở rộng dữ liệu vì kích thước log tăng lên từng ngày
- Có thể phân tích log từ các nguồn khác nhau, thực hiện xử lý dữ liệu trước khi lưu trữ
- Thống kê các tài nguyên hệ thống đang sử dụng như cpu, ram, network Thống
kê các dữ liệu lỗi, các truy cập bất thường
- Việc lưu trữ log tập trung nhưng không làm ảnh hưởng đến dữ liệu log ban đầu của dịch vụ
Elastic stack là một giải pháp phân tích log trên mã nguồn mở giải quyết được các vấn đề đó Elastic stack được tạo lên từ 3 thành phần mã nguồn mở Elasticsearch, Logstash và Kibana có chức năng thu thập, phân tích, lưu trữ tìm kiếm và hiển thị dữ liệu Ngoài ra Beats là thành phần quan trọng đi kèm với Elastic stack Beats được cài đặt trên Client với nhiệm vụ gửi dữ liệu về Logstash hoặc ElasticSearch
3.1 Giới thiệu về ElasticSearch
ElasticSearch là một công cụ tìm kiếm cấp doanh nghiệp Mục tiêu của nó là 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, 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
Nguồn dữ liệu nói trên có thể là các cơ sở dữ liệu nổi tiếng như MS SQL, MySQL, PostgreSQL cũng có thể là văn bản, thư điện tử
Trang 27T r a n g 26
ElastichSearch được phát triển bởi Shay Banon và dựa trên Apache Lucene, 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 Nó đã được áp dụng bởi một số công ty bao gồm cả StumbleUpon và Mozilla
3.1.1 Một số khái niệm cơ bản trong ElasticSearch
3.1.1.1 Cluster
Là một tập hợp của một hay nhiều máy chủ liên kết với nhau để chứa toàn bộ dữ liệu, cung cấp khả năng lập chỉ mục và khả năng tìm kiếm trên tất cả các máy chủ trong một cụm Một cluster được xác định bởi một tên duy nhất ở trong tâp tin elasticsearch.yml mà giá trị mặc định là Elasticsearch Tên này rất quan trọng vì một máy chủ chỉ có thể là một phần của Cluster nếu máy chủ đó được thiết lập để kết nối với cluster thông qua tên của cluster được định nghĩa trong tập tin cấu hình elasticsearch.yml
3.1.1.2 Node
Một node là một máy chủ đơn được cài đặt ElasticSearch Đây là một phần của Cluster dùng để chứa dữ liệu, lập chỉ mục và tìm kiếm Giống như Cluster, một node được xác định bởi một tên của nó, mặc định là một UUID ngẫu nhiên được gán vào node khi khởi động Người quản trị có thể định nghĩa bất kỳ tên nào nếu không muốn
để mặc định Một node có thể được cấu hình để tham gia vào một cluster thông qua tên cluster Mặc định mỗi node được thiết lập để tham gia cluster có tên là Elasticsearch
Một node sẽ biết thông tin về tất cả các node khác trong cùng một cluster và có thể chuyển tiếp yêu cầu từ phía client đến node thích hợp Bên cạnh đó, mỗi node có một hoặc nhiều mục đích khác nhau Trong ElasticSearch thường sử dụng Master Eligible node và Data node thể thực hiện việc điều khiển cluster và xử lý dữ liệu
Trang 28T r a n g 27
- Master Eligible node: Một node gọi là master nếu như giá trị node.master trong tập tin elasticsearch.yml được thiết lập là true Đây là điều kiện cần để một node được bầu là master điều khiển cluster Khi một node master bị sự cố, Những node trong cluster sẽ bắt đầu bầu chọn lại node làm master
- Data node: Là node có thông số node.data được thiết lập true Data node chứa
dữ liệu và thực hiện các hoạt động liên quan đến dữ liệu như CRUD, tìm kiếm
và tổng hợp dữ liệu
3.1.1.3 Chỉ mục (Index)
Một chỉ mục là tập hợp các tài liệu có đặc điểm tương tự nhau Ví dụ: bạn có thể có một chỉ mục cho dữ liệu khách hàng, một chỉ mục khác cho danh mục sản phẩm, và một chỉ mục khác cho dữ liệu đặt hàng Một chỉ mục được xác định bởi tên và tên này được sử dụng để chỉ vào chỉ mục khi thực hiện các thao tác lập chỉ mục, tìm kiếm, cập nhật, xóa đối với các tài liệu trong đó
3.1.1.4 Shard
Mỗi node sẽ có một hoặc nhiều shard Shard hoạt động ở mức thấp có vai trò lưu trữ dữ liệu Elasticsearch quản lý toàn bộ giao tiếp với shard, tự động thay đổi khi cần thiết Shard có hai loại là primary shard và replica shard Khi một index được tạo thì thì
số lượng primary và replica shard được thiết lập
Hình 3.1 Minh họa việc lưu trữ dữ liệu trên ElasticSearch [2]
Trang 29T r a n g 28
Như hình trên chúng ta thấy dữ liệu được lưu trữ ở cluster với 4 node, dữ liệu có 2 Priamry Shard là P0 và P1 Mỗi Primary shard có 1 Replica shard là R0 và R1 Việc sắp đặt vị trí primary shards là ngẫu nhiên, còn các replica luôn được đảm bảo là nó không nằm cùng node với primary shard
3.1.2 Kiến trúc ElasticSearch
Hình 3.2 Kiến trúc ElasticSearch [3]
Như đã thấy trong hình trên, một chỉ mục có thể chứa một hoặc nhiều loại tài liệu khác nhau Một loại tài liệu có thể được hình dung như là một bảng trong cơ sở dữ liệu quan hệ Mỗi loại tài liệu có một hoặc nhiều tài liệu Có một hoặc nhiều trường trong một tài liệu Các trường là các cặp giá trị bao gồm tên trường và giá trị của trường
Một Cluster là tập hợp một hoặc nhiều máy chủ cùng chạy ElasticSearch Mỗi Cluster được phân biệt với nhau bởi giá trị cluster.name trong tập tin cấu hình ElasticSearch Tương tự như Cluster, các máy chủ ElasticSearch bên trong cũng có một cái tên để định danh cho máy chủ đó trong hệ thống mạng Giá trị này được khai báo trong tham số node.name của tập tin cấu hình Khi các máy chủ cùng nằm trong một
Trang 30Trong ElasticSearch có 2 loại shard – Primary shard và Replica shard Mỗi tài liệu khi được đánh chỉ mục, đầu tiên nó thêm vào primary shard rồi sau đó nhân bản đến một hoặc nhiều replica shard Nếu cụm ElasticSearch có nhiều hơn một máy chủ thì replica shard sẽ ở trên một máy chủ khác Mặc định khi một chỉ mục được tạo ra, ElasticSearch tạo ra 5 primary shard và một replica shard cho mỗi primary shard Người quản trị có thể thay đổi số lượng replica shard sau khi một chỉ mục được tạo, nhưng không thể thay đổi số lượng primary shards
3.1.3 Quá trình lưu trữ, truy xuất dữ liệu trong ElasticSearch
3.1.3.1 Quá trình lưu trữ dữ liệu
Khi một tài liệu được đánh chỉ mục vào lưu trữ vào ElasticSearch, Elasticsearch sẽ
sử dụng công thức sau để chọn shard cho việc lưu trữ dữ liệu
Shard = hash( routing) % number_of_primary_shards [2]
Trong đó
- Hash: là một hàm tính toán cố định của Elasticsearch
- Routing: là một chuỗi tùy ý, mặc định là _id của tài liệu đó, tuy nhiên giá trị routing có thể thay đổi được
- Number_of_primary_shard: Đây là giá trị primary của cluster
Giá trị shard này sẽ dùng để xác định shard nào lưu tài liệu nào và cũng dùng để xác định khi tìm kiếm tài liệu
Trang 31T r a n g 30
Hình 3.3 Mô tả quá trình lữu trữ dữ liệu trên ElasticSearch [2]
Trong hình trên, khi một yêu cầu được gửi đến node 1 (node master) Lúc này node
1 sẽ thực hiện tính toán với công thức ở trên để tìm ra primary shards của tài liệu sẽ là
0 Sau khi xác định primary shard là 0, yêu cầu sẽ được gửi đến node 3 nơi chứa Primary shard 0 Node 3 thực hiện xử lý dữ liệu Sau khi thành công, nó sẽ gửi yêu cầu đến node 1 và node 2 để đảm bảo dữ liệu thống nhất giữa các node trong cluster
3.1.3.2 Quá trình truy xuất dữ liệu
Hình 3.4 Mô tả quá trình truy xuất dữ liệu.[2]
Trang 32T r a n g 31
Khi có một truy xuất dữ liệu đến ElasticSearch Node master sẽ tiếp nhận yêu cầu gửi đến Tại node master sẽ xác định các primary shard là 0 Do tất cả ba node đều chứa dữ liệu nên node master sẽ chọn ra 1 node và lấy dữ liệu ở shard số 0 Thuật toán Roud-robin được sử dụng để các node được chọn xoay vòng khi nhận yêu cầu xử lý Trong trường hợp này node 2 được chọn, replica shard 0 ở node 2 trả về kết quả cho master node
3.2 Giới thiệu về Logstash
Logstash được bắt đầu như một sản phẩm trí tuệ của Jordan Sissel, người có kinh nghiệm nhiều năm trong lĩnh vực vận hành và quản trị hệ thống Ông luôn gặp những thách thức khi tìm hiểu sâu về những tập tin log Một lần ông ta muốn xử lý một số lượng lớn log, tuy nhiên ông ta không tìm thấy một công cụ miễn phí thích hợp nào với trường hợp này Vào thời điểm đó, ông đã bắt tay xây dựng logstash để cung cấp một công cụ cho người dùng có thể xử lý một số lượng lớn các log tại một thời điểm Logstash bắt đầu như một sản phẩm riêng lẻ nhưng sau đó ElasticSearch phát triển, Jordan Sissel gia nhập Elastic để phát triển Logstash mạnh mẽ hơn Logstash có một số chức năng mạnh mẽ và khả năng thu thập thời gian thực làm cho nó trở thành công cụ toàn diện để xử lý các bản ghi
Logstash chủ yếu bắt đầu như một dự án để quản lý các tập tin log nhưng sau đó nó được mở rộng để phân tích bất kỳ loại dữ liệu nào ví dụ dữ liệu sự kiện, dữ liệu được đánh dấu thời gian, log của ứng dụng, các dữ liệu giao dịch, dữ liệu CSV… Dữ liệu có cấu trúc, không có cấu trúc hoặc bán cấu trục làm cho nó khó khăn để chuyển đổi dữ liệu vào một định dạng thích hợp Logstash giúp chúng ta thu thập dữ liệu từ nhiều hệ thống vào một hệ thống trung tâm, trong đó dữ liệu có thể được phân tích cú pháp và
xử lý theo yêu cầu Ngoài ra Logstash còn giúp thu thập dữ liệu từ nhiều hệ thống và lưu trữ dữ liệu theo một định dạng phổ biến, dễ dàng sử dụng với ElasticSearch và Kibana
Trang 33T r a n g 32
Logstash cho phép người dùng trích xuất, xóa, chuyển đổi và nạp để có được những thông tin có giá trị từ dữ liệu Logstash trích xuất dữ liệu từ nhiều hệ thống, thực hiện một số thao tác để xử lý hoặc chuyển đổi log, chẳng hạn như lọc dữ liệu, xóa các trường, thêm các trường, grokking dữ liệu, v.v tiếp theo là nạp dữ liệu đã được xử lý
Logstash nó có thể xử lý bất kỳ loại dữ liệu nào, nhận dữ liệu từ nhiều nguồn khác nhau, sau đó sử dụng bộ lọc để chuyển đổi dữ liệu và xuất ra để lưu
3.2.1 Tính năng của Logstash
- Mã nguồn mở: Logstash hoàn toàn miễn phí và là một công cụ mã nguồn mở, có
mã nguồn được cung cấp miễn phí trên GitHub
- Tích hợp liền mạch với Elasticsearch, Beats và Kibana
- Khả năng mở rộng: Logstash cung cấp nhiều đầu vào, bộ lọc và đầu ra để sử dụng cho việc xử lý các loại bản ghi khác nhau Nó cung cấp sự linh hoạt để tạo
ra và phát triển đầu vào, bộ lọc, hoặc kết quả đầu ra cho Logstash
- Khả năng tương tác: Logstash cung cấp khả năng tương tác để sử dụng nó với các thành phần và công cụ khác nhau Logstash có thể lấy dữ liệu từ các công cụ khác nhau và xuất dữ liệu vào các công cụ khác nhau, làm cho nó dễ dàng hơn
để sử dụng
Đây là mấu chốt và trái tim đằng sau kiến trúc của Logstash vì nó cung cấp sự linh hoạt hơn Để hiểu nó tốt hơn, chúng ta hãy xem ví dụ sau: Giả sử có một công cụ hoặc phần mềm mới mà bạn sử dụng để lưu trữ dữ liệu Logstash hiện không hỗ trợ kết nối đầu ra để lưu trữ dữ liệu của bạn trong đó Bạn có thể dễ dàng phát triển một plugin trong đó bạn viết một đoạn mã để lưu trữ dữ liệu trong công cụ yêu cầu bằng cách sử dụng một tập hợp các tham số Sau khi tạo một plugin, bạn có thể sử dụng plugin trực tiếp trong Logstash Không cần phải đi qua mã nguồn của Logstash, bạn đã dễ dàng
Trang 34T r a n g 33
phát triển một plugin, đã mở rộng Logstash, và bạn có thể tận dụng các khả năng xử lý của nó
3.2.2 Kiến trúc của Logstash
Luồng dữ liệu của Logstash bao gồm đầu vào, bộ lọc và các đầu ra Chúng ta hãy nhìn vào biểu đồ dưới đây để hiểu LogStash sử dụng các plugin như thế nào:
Hình 3.5 Kiến trúc Logstash [3]
Trong kiến trúc trước, chúng ta có thể thấy rằng có thể có nhiều nguồn dữ liệu được thu thập, tạo thành Logstash Input Plugin Sau khi dữ liệu input, chúng ta có thể sử dụng Filter Plugin để chuyển đổi dữ liệu và chúng ta có thể lưu trữ dữ liệu đầu ra hoặc ghi dữ liệu tới đích sử dụng Output Plugin
Logstash sử dụng một tệp tin cấu hình để xác định các plugin cho việc nhận dữ liệu đầu vào, lọc dữ liệu và lưu trữ dữ liệu đầu ra Input Plugin và Output Plugin là bắt buộc
để chỉ định trong tệp cấu hình trong khi Filter plugin là tùy chọn để sử dụng Nếu bạn
có dữ liệu đầu vào và không chuyển đổi hoặc sửa đổi dữ liệu, bạn có thể trực tiếp lưu trữ dữ liệu trong đích, sau đó trong trường hợp này plugin bộ lọc không bắt buộc
Trang 35T r a n g 34
Kiến trúc đơn giản được biểu diễn ở mô hình dưới đây
Hình 3.6 Kiến trúc đơn giản của Logstash.[3]
3.2.3 Cấu trúc tập tin cấu hình của Logstash
Một tệp cấu hình Logstash chứa ba phần để xác định từng loại plugin mà chúng ta muốn sử dụng Ba phần là input, filter và output Xem ví dụ sau:
Trang 37Hình 3.7 Mô tả thu thập và xử lý dữ liệu trong Elastic Stack.[1]
Trong mô hình trên các tập tin log từ nhiều ứng dụng máy chủ sẽ được chuyển đến máy chủ Logstash thông qua các shipper Máy chủ Logstash sẽ tiến hành lọc và phân tích, đưa thông tin đầu ra đến Elasticsearch ElasticSearch sẽ được truy vấn bởi Kibana
và hiển thị kết quả trên bảng điều khiển