Giới thiệu về ELK Stack

19.05.19 01:14 PM Nhận xét Bởi Anln

I. Tổng quan về ELK

ELK là viết tắt của tập hợp 3 phần mềm cốt lõi đi kèm với nhau, phục vụ cho công việc giám sát hệ thống. Ba phần mềm này lần lượt là Elasticsearch, Logstash và Kibana. ELK được phát triển từ đầu những năm 2000 và cho đến nay đã hơn 250 triệu lượt tải xuống và sử dụng. Hiện tại phiên bản mới nhất của ELK là 6.4. Đây là bộ công cụ giám sát tập trung mã nguồn mở rất mạnh, có thể xử lý rất nhiều bài toán quản lý hệ thống mạng nên rất được các công ty, tổ chức tin dùng.

Ưu điểm phần mềm ELK stack:

- ELK stack là phần mềm mã nguồn mở, không tốn nhiều chi phí khi triển khai.

- ELK mới được phát triển mạnh gần đây, nên cộng đồng hỗ trợ rất đông đúc và mạnh mẽ.

- 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)…

- Khả năng tương thích cao, dễ dàng tích hợp với các hệ thống khác mà không gặp khó khăn.

- 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 toá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ọ.

Các thành phần chính trong ELK stack gồm 4 thành phần:

- Elasticsearch: Dùng để tìm kiếm và query log

- Logstash: Tiếp nhận log từ nhiều nguồn, sau đó xử lý log và ghi vào cơ sở dữ liệu.

- Kibana: Giao diện để quản lý, thống kê log. Đọc thông tin từ Elasticsearch.

- Beats: Một tập các công cụ chuyên dùng để thu thập dữ liệu cực mạnh.



Các thành phần trong ELK stack


Về nguyên lý hoạt động của ELK stack:

- Đầu tiên, thông tin cần giám sát sẽ được đưa đến máy chủ ELK 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 Beats thu thập các thông tin từ các bộ công cụ chuyên dụng cài trên các server và gửi lên Logstash hoặc Elasticsearch.

- Logstash sẽ đọc những log này, thêm những thông tin như thời gian, IP, parse dữ liệu từ log (server nào, độ nghiêm trọng, nội dung log) ra, sau đó ghi xuống database là 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 query và xử lý. Kibana hiển thị thông tin từ log cho người dùng.


          

Cấu trúc của ELK


Sau đây, luận văn sẽ tìm hiểu chi tiết về từng thành phần trong bộ công cụ ELK stack để lý giải về khả năng của bộ công cụ giám sát tập trung mã nguồn mở ELK stack.

Elasticsearch

          Đầu tiên cần hiểu ElasticSearch là một công cụ tìm kiếm cấp doanh nghiệp (enterprise-level search engine). Mục tiêu của nó là tạo ra một công cụ, nền tảng hay kỹ thuật tìm kiếm và phân tích trong thời gian thực (ý nói ở đây là 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 nhiều nguồn dữ liệu (data sources) khác nhau. Nguồn dữ liệu nói ở trên trên bao gồm các cơ sở dữ liệu nổi tiếng như MS SQL, PostgreSQL, MySQL, ...



Công cụ Elasticsearch


Một số đặc điểm về ElasticSearch:

- Elasticsearch là một search engine.

- Elasticsearch được xây dựng để hoạt động như một server cloud

- Phát triển bằng ngôn ngữ Java.

- Là phần mềm open-source được phát hành theo giất phép của Apache License.

- 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ữ: Java, JavaScript, Groovy, .NET, PHP, Perl, Python, Ruby

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.

           Logstash

           Logstash là một công cụ thu thập dữ liệu mã nguồn mở với khả năng pipelining thời gian thực. Logstash có thể tự động thu thập dữ liệu từ nhiều nguồn khác nhau và chuẩn hóa dữ liệu đó phụ thuộc vào đích đến của dữ liệu.

           Ban đầu logstash chỉ đóng vai trò là một bộ thu thập log, nhưng khả năng của logstash hiện nay đã vượt qua cả vai trò đó. Bất kỳ một dạng sự kiện nào cũng đều có thể được logstash thu thập thông qua các plugins input và output, cùng với những code đã được đơn giản hóa giúp gia tăng khả năng nhập, xử lý và khai thác hiệu quả nhiều loại dữ liệu khác nhau.



Công cụ Logstash và nguyên lý hoạt động


           Logstash có một số lượng plugin đồ sộ (hơn 200) có thể đáp ứng bất kỳ dữ liệu nào được đưa đến đầu vào. Đơn giản nhất là log, metrics. Với web, logstash có thể biến các requests HTTP thành các sự kiện để phân tích. Hay có thể làm việc với NoSQL thông qua giao diện JDBC, cung cấp các cảm biến và IoT,…

           Logstash thường sử dụng giao thức Syslog hay SNMP để có thể thu thập log. Đây là 2 giao thức chính thường được sử dụng trong các hệ thống giám sát nhằm thu thập các thông tin và đẩy dữ liệu về máy chủ giám sát.

           Syslog là một giao thức client/server. Đây là giao thức dùng để chuyển log và thông điệp đến máy nhận log. Máy nhận log thường được gọi là syslogd, syslog daemon hoặc syslog server. Syslog có thể gửi qua UDP hoặc TCP. Các dữ liệu được gửi dạng cleartext. Syslog dùng cổng 514.

           Syslog được phát triển năm 1980 bởi Eric Allman, nó là một phần của dự án Sendmail, và ban đầu chỉ được sử dụng duy nhất cho Sendmail. Nhưng syslog hiện nay trở thành giải pháp khai thác log tiêu chuẩn trên Unix-Linux cũng như trên hàng loạt các hệ điều hành khác và thường được tìm thấy trong các thiết bị mạng như switch, router.

           Syslog ban đầu sử dụng UDP, điều này đương nhiên không đảm bảo cho việc truyền tin. Tuy nhiên sau đó IETF đã ban hành RFC 3195 Reliable Delivery cho syslog. Nó giúp đảm bảo tin cậy cho syslog và RFC 6587 Transmission of Syslog Messages over TCP giúp truyền tải thông báo syslog qua TCP. Điều này có nghĩa là ngoài UDP thì giờ đây syslog cũng đã sử dụng TCP để đảm bảo an toàn cho quá trình truyền tin.

           Trong chuẩn syslog, mỗi thông báo đều được dán nhãn và được gán các mức độ nghiêm trọng khác nhau. Các loại phần mềm sau có thể sinh ra thông báo: auth , authPriv , daemon , cron , ftp , dhcp , kern , mail, syslog, user, ... Với các mức độ nghiêm trọng từ cao nhất trở xuống Emergency, Alert, Critical, Error, Warning, Notice, Info, and Debug.

           SNMP viết tắt của Simple Network Management Protocol, là một giao thức chuyên được sử dụng trong vấn đề quản lý, giám sát hệ thống mạng. SNMP có những quy định riêng, những thành phần riêng để các thành phần trong hệ thống mạng có thể tuân theo, từ đó thu thập được các log trong hệ thống mạng để quản lý, giám sát. SNMP sử dụng UDP, chạy trên cổng 161 hoặc 162.

           Một số các chức năng của các phần mềm sử dụng giao thức SNMP gồm:

           - Theo dõi tốc độ đường truyền, lưu lượng truyền và nhận.

           - Lấy thông tin về phần cứng của máy chủ (RAM, Chip, Ổ cứng,…).

           - Tự động cảnh báo (gửi mail, sms) khi có sự cố.

           SNMP được thiết kế chạy trên nền TCP/IP và quản lý các thiết bị có nối mạng TCP/IP. Nếu thiết bị cần giám sát có nối mạng, sử dụng IP và hỗ trợ SNMP thì hoàn toàn có thể giám sát, quản lý nó từ xa thông qua SNMP.

           Đặc điểm của giao thức SNMP:

           - Thiết kế đơn giản hóa quá trình quản lý các thành phần trong mạng. Các phần mềm sử dụng SNMP có thể được phát triển nhanh và tốn ít chi phí.

           - Có thể mở rộng các chức năng quản lý, giám sát.

           - Có thể thiết kế để hoạt động độc lập với các kiến trúc và cơ chế của các thiết bị hỗ trợ SNMP.

           Kibana

           Kibana là một nền tảng phân tích và trực quan mã nguồn mở được thiết kế để làm việc với Elasticsearch. Ta sử dụng Kibana để tìm kiếm, xem và tương tác với dữ liệu được lưu trữ trong Elasticsearch. Từ đó dễ dàng thực hiện phân tích dữ liệu và trực quan hóa dữ liệu của mình thông qua biểu đồ, bảng.



Công cụ Kibana


           Kibana giúp nắm bắt nhanh chóng các dữ liệu có khối lượng lớn. Giao diện đơn giản, dựa vào trình duyệt cho phép nhanh chóng hiển thị các thay đổi khi truy vấn Elasticsearch trong thời gian thực.

           Beats

           Beats là một tập hợp các công cụ thu thập thông tin chuyên dụng, được biết đến như là các Shipper (người vận chuyển) giúp thu thập và gửi dữ liệu từ Client tới máy chủ ELK. Ngoài ra, các beat này có thể được gửi thẳng trực tiếp lên Elasticsearch do bản thân các công cụ đã được chuẩn hóa sẵn, việc kết nối các beat đến logstash thường mang ý nghĩa bảo mật đối với các hệ thống tầm lớn khi họ muốn bảo vệ dịch vụ elasticsearch.



Beats và nguyên lý hoạt động


            Trong Beats có rất nhiều các Beat “con”, cụ thể:

            - Filebeat: đây là công cụ chuyên dùng để thu thập log và gửi log 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ờ.

            - Metricbeat: đây là công cụ chuyên dùng để thu thập hiệu năng của máy chủ. 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).

            - 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.

            - 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 hoàn toàn khác, và khó can thiệp vào sâu trong hệ thống để thu thập thông tin. Winlogbeat ra đời nhằm thu thập những sự kiện xảy ra bên trong hệ điều hành Windows.

            - Auditbeat: Winlogbeat dành cho hệ điều hành Windows, thì Auditbeat được dành riêng cho hệ điều hành linux. Auditbeat giúp quản lý các folder, các tập tin hệ thống trong hệ điều hành Linux. 

            - Heartbeat: công vụ Heartbeat được sử dụng nhằm giúp cho hệ thống giám sát có thể biết được trạng thái dịch vụ đó có còn hoạt động hay không.



Beats Family

            Tổng kết

            Sử dụng các Beats, Logstash – thông qua giao thức Syslog và SNMP, để thu thập nhiều loại thông tin, Elasticsearch giúp việc tìm kiếm trở nên hiệu quả hơn cùng Kibana với khả năng phân tích mạnh mẽ và biểu diễn trực quan, ELK stack là một công cụ tuyệt vời trong giám sát hệ thống mạng nói chung và giám sát tập trung nói riêng.

 

II. Cài đăt ELK

1. Yêu cầu chuẩn bị

Các file RPM của ELK

       elasticsearch-6.1.2.rpm

       kibana-6.1.2-x86_64.rpm

       logstash-6.1.2.rpm

       Link tải về: https://drive.google.com/open?id=1wzaQb9QDH02fG7cGdKqtR-b9LDopFeK7

Phần mềm VMware Workstation đã cài HĐH CentOS-7

Phần mềm SecureCRT

Phần mềm WinSCP

2. Nội dung triển khai

Cài đặt Java hỗ trợ ELK

Cấu hình Elasticsearch

Cấu hình Kibana

Chỉnh sửa file cấu hình nginx

Tạo file mới, ghi nội dung của kibana

Vào ELK thông qua giao diện Kibana

3. Các bước Step

Phần mềm ELK được cài đặt trên HĐH máy chủ Linux: CentOS-7 (64-bit). Các bước cài đặt HĐH CentOS-7 được triển khai bình thường.

Cài đặt hostname

# vi /etc/hostname

Đổi hostname thành elk.dnu.vn, cần reboot để server nhận hostname mới

Cài đặt hosts

# vi /etc/hosts

Thêm vào như sau

66.0.0.66  elk.dnu.vn

Chỉnh sửa IP, Subnet, Gateway

# vi /etc/sysconfig/network-scripts/ifccfg-ens33

IPADDR=”66.0.0.66”

GATEWAY=”66.0.0.1”

DNS1=”8.8.8.8”

Sau đó khởi động lại dịch vụ mạng

# systemctl restart network

Cần thiết có thể ping 8.8.8.8 để kiểm tra kết nối mạng

Cập nhật hệ điều hành máy chủ

# yum update –y

Tắt SELinux

# vi /etc/sysconfig/selinux

Thay dòng “SELINUX=enforcing” thành “SELINUX=disabled”

Firewall:

# systemctl stop firewalld

# systemctl disable firewalld

Cài đặt Java hỗ trợ ELK

# yum install java-1.8.0-openjdk.x86_64 –y

Giờ ta sử dụng WinSCP, đưa 3 file ELK đã tải vào trong thư mục /opt

Quay lại màn hình làm việc CentOS để cài đặt ELK

Ta vào trong thư mục /opt nơi vừa để 3 file ta tải và cài đặt ELK

# cd /opt

# yum localinstall elasticsearch-6.1.2.rpm kibana-6.1.2-x86_64.rpm logstash-6.1.2.rpm

Hệ điều hành sẽ tự động cài ELK.

Cấu hình Elasticsearch

# vi /etc/elasticsearch/elasticsearch.yml

Bỏ dấu # ở trước 2 dòng: ( ấn I để vào insert )

Network.host: 66.0.0.66

http.port: 9200

Sau đó save lại ( :x ) rồi khởi động dịch vụ

# systemctl start elasticsearch

# systemctl enable elasticsearch

Cấu hình Kibana

# vi /etc/kibana/kibana.yml

Đổi thành:

server.host: “66.0.0.66”

elasticsearch.url: “66.0.0.66:9200”

( Lưu ý trước server.host, server.port và elasticsearch.url không có dấu # )

Khởi động dịch vụ

# systemctl start kibana

# systemctl enable kibana

Cài đặt Nginx ( việc cài đặt nginx có thể có hoặc không có, tùy vào mục đích )

# yum -y install epel-release

# yum -y install nginx

Chỉnh sửa file cấu hình nginx

# vi /etc/nginx/nginx.conf

Tìm và xóa đoạn server { } – xóa đến khi đoạn cuối file chỉ còn như sau:

include /etc/nginx/conf.d/*.conf;

}

Sau đó ta tạo file mới, ghi nội dung của kibana:

# vi /etc/nginx/conf.d/kibana.conf

server {

listen 80;

server_name dnu.vn;

          auth_basic "Restricted Access";

          location / {

          proxy_pass http://localhost:5601;

          proxy_http_version 1.1;

          proxy_set_header Upgrade $http_upgrade;

          proxy_set_header Connection 'upgrade';

          proxy_set_header Host $host;

          proxy_cache_bypass $http_upgrade; 

          }

          }

Sau đó ta khởi động dịch vụ nginx và logstash

# systemctl start nginx

# systemctl enable nginx

# systemctl start logstash

# systemctl enable logstash

Giờ ta có thể vào ELK thông qua giao diện Kibana qua:http://(IP):5601

4. Video hướng dẫn


-----&-----&-----

Anln

Chia sẻ -