2.1.4.1. Quan hệ giữa máy ảo và Docker
Ảo hóa là một khái niệm cũ đã được sử dụng trong điện toán đám mây, sau IaaS đã chấp nhận như một kỹ thuật rất quan trọng cho cấu tạo hệ thống, cung cấp tài nguyên, và đa dụng. Nguồn tài nguyên ảo hóa đóng vai trò chính trong việc giải quyết các vấn đề bằng cách sử dụng kỹ thuật cốt lõi của điện toán đám mây. Hình 2.3 cho thấy kiến trúc của máy ảo.
Hypervisor nằm giữa hệ thống điều hành máy chủ và máy khách. Đó là một nền tảng ảo và nó xử lý nhiều hơn một hệ điều hành máy chủ. Nó hoạt động giữa các hệ điều hành và CPU. Các máy ảo chia nó thành hai phân đoạn: đầu tiên là Para-Virtuallization và thứ hai là Full-Virtualization. Hình 8 mô tả kiến trúc của Docker container.
Container Linux được quản lý bởi các công cụ Docker và nó được sử dụng như một phương pháp ảo hóa hệ điều hành. Hình 2.4 cho thấy rằng trong máy chủ điều khiển duy nhất có nhiều container Linux, được cô lập. Tài nguyên như Network, bộ nhớ, CPU, và Block I / O được cấp phát bởi Linux kernel và nó cũng giao dịch với cgroups mà không cần khởi động máy ảo.
Hình 2.4: Kiến trúc Docker container
Trong container Linux, một kiến trúc để quản lý CPU và phân phối các nguồn lực của mình một cách thành thạo hơn. Trong bất kỳ ví dụ về Hyper-V
hay VMWare, vì chi phí phát sinh, nó không phải là dễ dàng để chạy hơn mười máy ảo. Lên đến một mức độ lớn, vấn đề này đã được giải quyết bởi các container. Container chỉ sử dụng những nguồn lực, đó là cần thiết cho các dịch vụ hoặc ứng dụng. Do đó, trên một máy cấu hình yếu, trên 50 yêu cầu của container có thể được thực thi. Ví dụ, giả sử một tổ chức cung cấp dịch vụ bảo mật email. Các chức năng chính của các dịch vụ này là kiểm tra email để tìm virus, spam và phần mềm độc hại. Hơn nữa, nó có thể quản lý để chuyển tin nhắn đến đại lý, ghi nhật ký và báo cáo lỗi gửi nếu sản phẩm được cài đặt trên đám mây. Hầu hết trong các trường hợp này, không sử dụng bất kỳ phụ thuộc liên quan hoặc thư viện cấp hệ điều hành hoặc bất kỳ cấu trúc dữ liệu hạt nhân nào. Do đó, đáng để chứa mọi thành phần bằng cách sử dụng sandboxing họ sử dụng OpenVZ hoặc Docker thay vì có máy ảo.
Trong nhiều doanh nghiệp, máy ảo được sử dụng để thực hiện kiểm tra phần tử. Trong quá trình này, rất nhiều tài nguyên CPU và không gian bộ nhớ được tiêu thụ. Trong khi đó, công nghệ container cung cấp một sự đảm bảo cho người dùng của họ rằng việc vượt quá khối lượng công việc sẽ không ảnh hưởng đến hiệu quả của tài nguyên. Container mất ít thời gian hơn cho việc cài đặt so với các máy ảo, vì vậy khả năng thích ứng của các container cao hơn nhiều so với máy ảo.
Hơn nữa, cả Docker và OpenVZ đều đã được kiểm tra rất kỹ về khía cạnh bảo mật của chúng. Khi sự cô lập bị giảm, ảnh hưởng trực tiếp của nó đến an ninh cũng giảm nhanh chóng. Người dùng root của Linux có thể dễ dàng truy cập vào các container vì các container cũng sử dụng cùng kernel và hệ điều hành. Sự cô lập của docker không mạnh bằng một máy ảo, mặc dù docker cô lập ứng dụng đang chạy trong bộ chứa docker từ máy chủ chính của nó. Ngoài ra, có thể một số ứng dụng sẽ không thể chạy trong công nghệ được đóng gói và chúng cần chạy trên một hệ điều hành khác.
2.1.4.2. Docker vs VM Cloud
Theo [17] tóm tắt rằng không có hệ điều hành khách của docker trong đám mây, do đó, việc lưu trữ và lãng phí tài nguyên CPU ít hơn. Các hình ảnh không bị xáo trộn; thời gian khởi động nhanh hơn và thời gian tạo hình ảnh ngắn. Đây là những lợi ích của đám mây docker so với VM Cloud. Họ đã sử dụng hai máy chủ tương tự có cùng cấu hình trong môi trường đám mây. Một máy chủ đã được sử dụng cho docker và một máy chủ khác dành cho nền tảng Open Stack cho KVM bằng công cụ ảo hóa. Ubuntu Server đã được sử dụng làm nền tảng cơ bản [17].
Để tính thời gian khởi động gần đúng, 20 hình ảnh đã được tạo trên mỗi máy chủ và thời gian khởi động đã được kiểm tra. Hình 2.5 cho thấy thời gian khởi động của docker nhỏ hơn thời gian khởi động của KVM. Docker sử dụng Hệ điều hành máy chủ, trong khi KVM sử dụng Hệ điều hành khách. Do đó, thời gian khởi động của docker ngắn hơn thời gian khởi động của KVM.
Hình 2.5: Thời gian khởi động trung bình của Docker và KVM [17]
Để tính tốc độ hoạt động, ngôn ngữ python đã được sử dụng. Hình 2.6 cho thấy tốc độ xử lý 100.000 dữ liệu của máy ảo trung bình khoảng 4,5 giây. Để đo tốc độ hoạt động, họ có được thời gian xử lý trung bình và độ lệch chuẩn, bằng cách lặp lại quy trình tương tự 100 lần trên docker và VM
Hình 2.6: Hiệu suất tính của CPU [17]
Hình 2.6 cho thấy tốc độ tính Docker là hơi nhanh hơn so với tốc độ tính toán của VM. [17] kết luận rằng VM hoạt động độc lập. Đây là một trong những lý do mà nó rất dễ dàng để áp dụng và quản lý chính sách mạng, an ninh, người sử dụng, và hệ thống. Tuy nhiên, Docker không chứa một hệ thống điều hành khách. Do đó, phải mất rất ít thời gian trong phân phối và thu thập hình ảnh. thời gian khởi động của nó cũng rất ngắn. Đây là những ưu điểm chính của việc sử dụng điện toán đám mây Docker so với VM Cloud.
2.2. ELK stack
ELK là viết tắt của Elasticsearch, Logstash và Kibana. ELK là một trong những nền tảng quản lý log phổ biến được sử dụng trên toàn thế giới để phân tích log. Trong ELK stack, Logstash trích xuất dữ liệu ghi nhật ký hoặc các sự kiện khác từ các nguồn đầu vào khác nhau. Nó xử lý các sự kiện và sau đó lưu trữ chúng trong Elasticsearch Kibana là một công cụ trực quan, truy cập nhật ký từ Elasticsearch và có thể hiển thị cho người dùng dưới dạng biểu đồ đường, biểu đồ thanh, biểu đồ hình tròn, v.v.
Luồng cơ bản của ELK Stack được hiển thị trong hình ở đây:
Calculation performance
100000 200000
Calculation speed(s) VM Calculation speed(s) Docker
25 20 15 10 5 0
Hình 2.7: Mô hình ELK stack
Logstash chịu trách nhiệm thu thập dữ liệu từ tất cả các nguồn từ xa nơi các bản ghi được nộp và đẩy tương tự đến Elasticsearch
Elasticsearch hoạt động như một cơ sở dữ liệu trong đó dữ liệu được thu thập và Kibana sử dụng dữ liệu từ Elasticsearch để thể hiện dữ liệu cho người dùng dưới dạng biểu đồ, biểu đồ hình tròn, bản đồ nhiệt như dưới đây:
Hình 2.8: Giao diện chính của Kibana
Nó hiển thị dữ liệu trên cơ sở thời gian thực, ví dụ, hàng ngày hoặc hàng giờ cho người dùng. Kibana UI thân thiện với người dùng và rất dễ hiểu cho người mới bắt đầu.
2.2.1. Logstash
2.2.1.1. Giới thiệu
Logstash là một mã nguồn mở, là một trình quản lý ghi nhật ký và sự kiện. Nó là một phần của ngăn xếp ELK (Elasticsearch, Logstash, Kibana).
Logstash là một công cụ dựa trên các mẫu bộ lọc / đường truyền để thu thập, xử lý và tạo các bản ghi hoặc sự kiện. Nó giúp tập trung và phân tích
thời gian thực các bản ghi và sự kiện từ các nguồn khác nhau. Logstash được viết trên ngôn ngữ lập trình JRuby chạy trên JVM, do đó người dùng có thể chạy Logstash trên các nền tảng khác nhau. Nó thu thập các loại dữ liệu khác nhau như Nhật ký, Gói, Sự kiện, Giao dịch, Dữ liệu Dấu thời gian, v.v., từ hầu hết mọi loại nguồn. Nguồn dữ liệu có thể là dữ liệu xã hội, thương mại điện tử, tin tức, CRM, dữ liệu trò chơi, xu hướng web, dữ liệu tài chính, Internet of Things, thiết bị di động, v.v.
2.2.1.2. Các tính năng chung của Logstash
Các tính năng chung của Logstash như sau:
- Logstash có thể thu thập dữ liệu từ các nguồn khác nhau và gửi đến nhiều đích.
- Logstash có thể xử lý tất cả các loại dữ liệu ghi nhật ký như nhật ký Apache, nhật ký sự kiện hệ điều hành Window, dữ liệu qua giao thức mạng, dữ liệu từ đầu vào tiêu chuẩn và nhiều hơn nữa.
- Logstash cũng có thể xử lý các yêu cầu http và dữ liệu phản hồi.
- Logstash cung cấp nhiều bộ lọc, giúp người dùng tìm thấy nhiều ý nghĩa hơn trong dữ liệu bằng cách phân tích và chuyển đổi nó.
- Logstash cũng có thể được sử dụng để xử lý dữ liệu cảm biến trên internet.
- Logstash là mã nguồn mở và có sẵn theo phiên bản giấy phép Apache 2.0.
2.2.1.3. Các khái niệm chính của Logstash
Các khái niệm chính của Logstash như sau: - Even Object
Nó là đối tượng chính trong Logstash, đóng gói luồng dữ liệu trong đường dẫn Logstash. Logstash sử dụng đối tượng này để lưu trữ dữ liệu đầu vào và thêm các trường bổ sung được tạo trong giai đoạn lọc.
Logstash cung cấp API sự kiện cho các nhà phát triển để thao tác các sự kiện. Trong hướng dẫn này, sự kiện này được gọi với nhiều tên khác nhau như Ghi nhật ký sự kiện dữ liệu, sự kiện nhật ký, dữ liệu nhật ký, dữ liệu nhật ký đầu vào, dữ liệu nhật ký đầu ra, v.v.
- Pipeline
Nó bao gồm các giai đoạn luồng dữ liệu trong Logstash từ đầu vào đến đầu ra. Dữ liệu đầu vào được nhập vào pipeline và được xử lý dưới dạng sự kiện. Sau đó gửi đến đích đầu ra trong định dạng mong muốn của người dùng hoặc hệ thống.
- Input
Đây là giai đoạn đầu tiên trong đường dẫn Logstash, được sử dụng để lấy dữ liệu trong Logstash để xử lý thêm. Logstash cung cấp nhiều plugin khác nhau để lấy dữ liệu từ các nền tảng khác nhau. Một số plugin được sử dụng phổ biến nhất là - File, Syslog, Redis và Beats.
- Filter
Đây là giai đoạn giữa của Logstash, nơi diễn ra quá trình xử lý các sự kiện thực tế. Nhà phát triển có thể sử dụng mẫu Regex được xác định trước bằng Logstash để tạo các chuỗi để phân biệt giữa các trường trong các sự kiện và tiêu chí cho các sự kiện đầu vào được chấp nhận. Logstash cung cấp nhiều plugin khác nhau để giúp nhà phát triển phân tích cú pháp và biến đổi các sự kiện thành một cấu trúc mong muốn. Một số plugin bộ lọc được sử dụng phổ biến nhất là - Grok, Mutate, Drop, Clone và Geoip.
- Output
Đây là giai đoạn cuối cùng trong đường dẫn Logstash, nơi các sự kiện đầu ra có thể được định dạng thành cấu trúc theo yêu cầu của các hệ thống đích. Cuối cùng, nó sẽ gửi sự kiện đầu ra sau khi xử lý hoàn tất đến đích bằng
cách sử dụng các plugin. Một số plugin được sử dụng phổ biến nhất là - Elasticsearch, File, Graphite, Statsd, v.v.
2.2.1.4. Ưu, nhược điểm Logstash
- Ưu điểm:
+ Logstash cung cấp các chuỗi mẫu Regex để xác định và phân tích các trường khác nhau trong bất kỳ sự kiện đầu vào nào.
+ Logstash hỗ trợ nhiều loại máy chủ web và nguồn dữ liệu để trích xuất dữ liệu ghi nhật ký.
+ Logstash cung cấp nhiều plugin để phân tích cú pháp và chuyển đổi dữ liệu ghi nhật ký thành bất kỳ định dạng mong muốn nào của người dùng.
+ Logstash được tập trung hóa, giúp dễ dàng xử lý và thu thập dữ liệu từ các máy chủ khác nhau.
+ Logstash hỗ trợ nhiều cơ sở dữ liệu, giao thức mạng và các dịch vụ khác làm nguồn đích cho các sự kiện ghi nhật ký.
+ Logstash sử dụng giao thức HTTP, cho phép người dùng nâng cấp các phiên bản Elasticsearch mà không phải nâng cấp Logstash trong bước khóa.
- Nhược điểm:
+ Logstash sử dụng HTTP, ảnh hưởng tiêu cực đến việc xử lý dữ liệu ghi nhật ký.
+ Làm việc với Logstash đôi khi có thể hơi phức tạp, vì nó cần có sự hiểu biết và phân tích tốt về dữ liệu ghi nhật ký đầu vào.
+ Các plugin bộ lọc không chung chung, vì vậy, người dùng có thể cần tìm đúng chuỗi các mẫu để tránh lỗi khi phân tích cú pháp.
2.2.2. Elasticsearch
Elasticsearch là một công cụ tìm kiếm và phân tích toàn văn bản nguồn mở và phân phối thời gian thực. Nó có thể truy cập từ giao diện dịch vụ web RESTful và sử dụng các tài liệu JSON (Ký hiệu đối tượng JavaScript) để lược đồ dữ liệu. Nó được xây dựng trên ngôn ngữ lập trình Java và do đó Elasticsearch có thể chạy trên các nền tảng khác nhau. Nó cho phép người dùng khám phá lượng dữ liệu rất lớn với tốc độ rất cao.
Nhiều công ty sử dụng Elasticsearch để giúp họ triển khai khả năng tìm kiếm mạnh mẽ trong họ các ứng dụng dễ dàng để thiết lập, mở rộng và xây dựng cho các đám mây. Dưới đây là một vài mẫu sử dụng các trường hợp mà Elasticsearch có thể được sử dụng cho:
- Một cửa hàng web trực tuyến cho phép khách hàng tìm kiếm sản phẩm mà cửa hàng này bán. Trong trường hợp này, Elasticsearch có thể lưu trữ toàn bộ danh mục sản phẩm và hàng tồn kho và cung cấp tìm kiếm và gợi ý autocomplete cho khách hàng.
- Thu thập log hoặc giao dịch dữ liệu để phân tích và khai thác dữ liệu này để tìm kiếm các xu hướng, thống kê, tóm tắt, hoặc dị thường. Trong trường hợp này, Logstash có thể được sử dụng để thu thập, tổng hợp, và phân tích dữ liệu, và sau đó có Logstash dữ liệu này vào Elasticsearch. Khi dữ liệu trong Elasticsearch, tìm kiếm và quy tụ có thể được chạy để khai thác bất kỳ thông tin nào có thể quan tâm.
2.2.2.2. Tính năng của Elasticsearch
Các tính năng chung của Elasticsearch như sau:
- Elasticsearch có thể mở rộng lên tới petabyte dữ liệu có cấu trúc và không cấu trúc.
- Elasticsearch có thể được sử dụng để thay thế các kho lưu trữ tài liệu như MongoDB và RavenDB.
kiếm.
- Elasticsearch là một trong những công cụ tìm kiếm phổ biến và hiện đang được sử dụng bởi nhiều tổ chức lớn như Wikipedia, The Guardian, StackOverflow, GitHub, v.v.
2.2.2.3. Các khái niệm trong Elasticsearch
Các khái niệm chính của Elasticsearch như sau: - Node
Nó đề cập đến một ví dụ chạy duy nhất của Elasticsearch Máy chủ vật lý và ảo duy nhất chứa được nhiều nút tùy thuộc vào khả năng của tài nguyên vật lý của chúng như RAM, khả năng lưu trữ và xử lý.
- Cluster
Nó là một tập hợp của một hoặc nhiều nút. Cluster cung cấp khả năng lập chỉ mục và tìm kiếm tập thể trên tất cả các nút cho toàn bộ dữ liệu.
- Index
Nó là một tập hợp các loại tài liệu khác nhau và các thuộc tính của chúng. Index cũng sử dụng khái niệm phân đoạn để cải thiện hiệu suất. Ví dụ: một bộ tài liệu chứa dữ liệu của ứng dụng mạng xã hội.
- Document
Nó là một tập hợp các trường theo cách cụ thể được định nghĩa theo định dạng JSON. Mỗi tài liệu thuộc về một loại và nằm trong một chỉ mục. Mỗi tài liệu được liên kết với một định danh duy nhất được gọi là UID.
- Shard
Các chỉ mục được chia theo chiều ngang thành các mảnh. Điều này có nghĩa là mỗi phân đoạn chứa tất cả các thuộc tính của tài liệu nhưng chứa số lượng đối tượng JSON ít hơn chỉ mục. Sự phân tách ngang làm cho mảnh vỡ một nút độc lập, có thể được lưu trữ trong bất kỳ nút nào. Phân đoạn chính là phần nằm ngang ban đầu của một chỉ mục và sau đó các phân đoạn chính này