ELK Stack
ELK Stack (hay còn được gọi là Elastic Stack) là một tập hợp phần mềm mã nguồn mở do công ty Elastic phát triển, cho phép chúng ta tìm kiếm, phân tích và trực quan hóa log được tạo từ bất kỳ nguồn nào ở bất kỳ định dạng nào - còn được gọi là phương pháp giám sát log tập trung. Giám sát log tập trung có thể rất hữu ích khi chúng ta xác định các vấn đề với máy chủ hoặc ứng dụng trong hệ thống bởi vì nó cho phép chúng ta tìm kiếm thông qua tất cả các log ở một nơi duy nhất. Nó rất hữu ích vì giúp chúng ta xác định các sự cố kéo dài trên nhiều máy chủ bằng cách xem xét các bản log của chúng trong một khung thời gian cụ thể.
Elastic Stack có bốn thành phần chính:
- Elasticsearch: một RESTful API của công cụ tìm kiếm dạng phân tán và lưu trữ tất cả dữ liệu đã thu thập.
- Logstash: thành phần xử lý dữ liệu của Elastic Stack và gửi dữ liệu đến Elasticsearch.
- Kibana: một giao diện web để tìm kiếm và hiển thị các bản log.
- Beats: một data shippers (trình gửi dữ liệu) dạng nhẹ với mục đích có thể gửi dữ liệu từ hàng trăm hoặc hàng nghìn máy tới Logstash hoặc Elasticsearch.
Trong bài viết này, chúng ta sẽ cài đặt Elastic Stack trên máy chủ Ubuntu 18.04. Chúng ta sẽ được học cách cài đặt tất cả các thành phần của Elastic Stack - bao gồm Filebeat, một công cụ họ Beat được sử dụng để chuyển tiếp và tập trung các log và tập tin - định cấu hình chúng để thu thập và trực quan hóa log hệ thống.
Yêu cầu
- Ubuntu: máy chủ Ubuntu 18.04 có RAM 4GB và 2 CPU được thiết lập.
- Java 8: được yêu cầu bởi Elasticsearch và Logstash - được cài đặt trên máy chủ của chúng ta. Lưu ý rằng Java 9 không được hỗ trợ.
Thực hành
Bước 1: Cài đặt và cấu hình Elasticsearch
Các thành phần của Elasticsearch không có sẵn trong kho lưu trữ thư viện mặc định của Ubuntu. Tuy nhiên, chúng có thể được cài đặt với APT sau khi thêm danh sách nguồn thư viện từ Elastic.
Tất cả gói thư viện được đăng ký bằng khóa API của Elasticsearch để bảo vệ hệ thống của bạn khỏi việc sử dụng thư viện giả mạo. Các gói thư viện này đã được xác thực bằng khóa API sẽ được người quản lý gói thư viện của bạn xem như đáng tin cậy. Trong bước này, bạn sẽ thêm khóa GPG công khai của Elasticsearch và thêm danh sách nguồn gói thư viện của Elastic để cài đặt Elasticsearch.
Để bắt đầu, chúng ta sẽ sử dụng cURL - một công cụ dùng để truyền dữ liệu bằng URL và chúng ta sẽ dùng vào việc thêm khóa GPG công khai của Elasticsearch vào APT. Lưu ý rằng chúng ta đang sử dụng đối số -fsSL để tắt mọi tiến trình và các lỗi có thể xảy ra (ngoại trừ lỗi máy chủ) và cho phép cURL thực hiện yêu cầu về một vị trí mới nếu được chuyển hướng.
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Tiếp theo, chúng ta thêm danh sách nguồn của thư viện Elastic vào thư mục sources.list.d
, nơi apt
sẽ tìm kiếm các nguồn mới:
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
Tiếp theo, chúng ta cập nhật danh sách gói thư viện hệ thống để apt
sẽ cập nhật nguồn mới:
sudo apt update
Sau đó, chúng ta sẽ bắt đầu cài đặt Elasticsearch bằng APT:
sudo apt install elasticsearch
Chờ một lúc tải xong thì Elasticsearch sẽ được tự động cài đặt và sẵn sàng để được cấu hình. Sử dụng trình chỉnh sửa văn bản ưa thích của bạn để chỉnh sửa tệp cấu hình chính của Elasticsearch là elasticsearch.yml
. Ở đây, mình sẽ sử dụng công cụ nano
:
sudo nano /etc/elasticsearch/elasticsearch.yml
Tập tin elasticsearch.yml
cung cấp các tùy chọn cấu hình cho cluster, node, đường dẫn, bộ nhớ, mạng, khám phá và gateway của bạn. Hầu hết các tùy chọn này đều được cấu hình sẵn nhưng bạn có thể thay đổi chúng theo nhu cầu của mình.
Elasticsearch lắng nghe lưu lượng truy cập từ mọi nơi trên port 9200
. Bạn sẽ muốn hạn chế quyền truy cập từ bên ngoài vào phiên bản Elasticsearch của mình để ngăn người ngoài đọc dữ liệu của bạn hoặc tắt Elasticsearch cluster của bạn thông qua RESTful API của nó. Để hạn chế quyền truy cập và do đó tăng cường bảo mật, hãy tìm dòng chỉ định network.host
, bỏ comment và thay thế giá trị của nó bằng localhost
như sau:
Chúng ta đã chỉ định localhost
để Elasticsearch lắng nghe trên tất cả các interfaces và địa chỉ IP bị ràng buộc. Nếu bạn muốn nó chỉ nghe trên một interface cụ thể, bạn có thể chỉ định địa chỉ IP cụ thể thay cho localhost. Lưu lại và đóng tập tin elasticsearch.yml
. Nếu bạn đang sử dụng nano giống như mình, bạn có thể làm như vậy bằng cách nhấn CTRL + X, tiếp theo là Y và sau đó ENTER.
Đây là những cài đặt tối thiểu và chúng ta có thể bắt đầu để sử dụng Elasticsearch. Bây giờ chúng ta có thể khởi động Elasticsearch lần đầu tiên.
Khởi động dịch vụ Elasticsearch với systemctl
. Hãy chơ Elasticsearch một chút thời gian để khởi động.
sudo systemctl start elasticsearch
Kiểm tra xem service elasticsearch có đang chạy hay không.
sudo systemctl status elasticsearch
Nếu bạn muống Elasticsearch tự động khởi động cùng khi mở hệ điều hành thì có thể sử dụng câu lệnh sau.
sudo systemctl enable elasticsearch
Bạn có thể thử sử dụng Elasticsearch bằng cách gửi request HTTP với công cụ curl
.
curl -X GET "localhost:9200"
Bây giờ Elasticsearch đã được thiết lập và chạy nền, hãy cài đặt Kibana, thành phần tiếp theo của Elastic Stack.
Bước 2: Cài đặt và cấu hình Kibana
Theo tài liệu chính thức trên trang chủ elastic, bạn chỉ nên cài đặt Kibana sau khi cài đặt Elasticsearch. Cài đặt theo thứ tự này đảm bảo rằng các thành phần mà mỗi sản phẩm phụ thuộc vào đều được đặt đúng vị trí.
Bởi vì bạn đã thêm nguồn gói thư viện của Elastic ở bước trước, bạn chỉ có thể cài đặt các thành phần còn lại của Elastic Stack bằng cách sử dụng apt
:
sudo apt install kibana
Sau đó, kích hoạt và bắt đầu service Kibana:
sudo systemctl enable kibana
sudo systemctl start kibana
Bạn có thể kiểm tra giao diện của Kibana bằng cách mở trình duyệt và gõ đường dẫn như sau:
http://localhost:5601/app/home#/
Bây giờ, Kibana đã được cấu hình xong, chúng ta sẽ cài đặt thành phần tiếp theo - Logstash.
Bước 3: Cài đặt và cấu hình Logstash
Mặc dù Beats có thể gửi dữ liệu trực tiếp đến cơ sở dữ liệu Elasticsearch, nhưng người ta thường sử dụng Logstash để xử lý dữ liệu. Điều này sẽ cho phép bạn linh hoạt hơn trong việc thu thập dữ liệu từ các nguồn khác nhau, chuyển nó thành một định dạng chung và xuất nó sang cơ sở dữ liệu khác.
Cài đặt Logstash với câu lệnh này:
sudo apt install logstash
Sau khi cài đặt Logstash, bạn có thể chuyển sang cấu hình nó. Các tập tin cấu hình của Logstash nằm trong thư mục /etc/logstash/conf.d
. Để biết thêm thông tin về cú pháp cấu hình, bạn có thể kiểm tra qua bảng tham chiếu cấu hình mà Elastic cung cấp. Khi bạn định cấu hình tập tin, sẽ rất hữu ích khi nghĩ về Logstash như một đường dẫn lấy dữ liệu ở một đầu, xử lý theo cách này hay cách khác và gửi dữ liệu đến đích (trong trường hợp này, đích là Elasticsearch). Một đường ống Logstash có hai phần tử bắt buộc, input
và output
, và một phần tử tùy chọn, bộ lọc
. Các plugin đầu vào sử dụng dữ liệu từ một nguồn, các plugin bộ lọc xử lý dữ liệu và các plugin đầu ra ghi dữ liệu vào đích.
Tạo tập tin cấu hình có tên 02-beat-input.conf
, nơi bạn sẽ thiết lập đầu vào Filebeat của mình:
sudo nano /etc/logstash/conf.d/02-beats-input.conf
Chèn cấu hình input
sau. Điều này chỉ định một beats
input sẽ lắng nghe trên port TCP 5044
.
input {
beats {
port => 5044
}
}
Lưu và đóng tập tin.
Tiếp theo, tạo một tệp cấu hình có tên 30 -asticsearch-output.conf
:
sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf
Chèn cấu hình output
sau. Về cơ bản, output này cấu hình Logstash để lưu trữ dữ liệu Beats trong Elasticsearch, đang chạy tại localhost:9200
, trong một chỉ mục được đặt tên theo Beat được sử dụng. Beat được sử dụng trong hướng dẫn này là Filebeat:
output {
if [@metadata][pipeline] {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
pipeline => "%{[@metadata][pipeline]}"
}
} else {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
}
Lưu và đóng tập tin.
Kiểm tra cấu hình Logstash của bạn bằng lệnh này:
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
Nếu không có lỗi cú pháp, output của bạn sẽ hiển thị Config Validation Result: OK. Exiting Logstash
. Nếu bạn không thấy điều này trong output của mình, hãy kiểm tra bất kỳ lỗi nào được ghi trong output của bạn và cập nhật cấu hình của bạn để sửa chúng. Lưu ý rằng bạn sẽ nhận được cảnh báo từ OpenJDK, nhưng chúng sẽ không gây ra bất kỳ sự cố nào và có thể bỏ qua.
Nếu kiểm tra cấu hình của bạn thành công, hãy bắt đầu và bật Logstash để thực hiện các thay đổi cấu hình:
sudo systemctl enable logstash
sudo systemctl start logstash
Bây giờ Logstash đang chạy chính xác và được định cấu hình đầy đủ, chúng ta hãy cài đặt Filebeat.
Bước 4: Cài đặt và cấu hình Filebeat
Elastic Stack sử dụng một số trình gửi dữ liệu nhẹ được gọi là Beats để thu thập dữ liệu từ nhiều nguồn khác nhau và vận chuyển chúng đến Logstash hoặc Elasticsearch. Dưới đây là các Beats hiện có sẵn từ Elastic:
- Filebeat: thu thập và vận chuyển các tập tin log.
- Metricbeat: thu thập số liệu từ hệ thống và các services.
- Packetbeat: thu thập và phân tích dữ liệu mạng.
- Winlogbeat: thu thập Windows event logs.
- Auditbeat: thu thập dữ liệu kiểm toán framework Linux và giám sát tính toàn vẹn của tập tin.
- Heartbeat: giám sát các service để biết tính khả dụng của chúng bằng cách thăm dò tích cực.
Trong bài viết này, chúng ta sẽ sử dụng Filebeat để chuyển tiếp các bản log cục bộ đến Elastic Stack.
Cài đặt Filebeat bằng apt
:
sudo apt install filebeat
Tiếp theo, cấu hình Filebeat để kết nối với Logstash. Ở đây, chúng ta sẽ sửa đổi tập tin cấu hình ví dụ đi kèm với Filebeat.
Mở tập tin cấu hình Filebeat:
sudo nano /etc/filebeat/filebeat.yml
Filebeat hỗ trợ nhiều output, nhưng bạn thường sẽ chỉ gửi các sự kiện trực tiếp đến Elasticsearch hoặc tới Logstash để xử lý thêm. Trong bài viết này, chúng ta sẽ sử dụng Logstash để thực hiện xử lý bổ sung đối với dữ liệu được Filebeat thu thập. Filebeat sẽ không cần gửi trực tiếp bất kỳ dữ liệu nào đến Elasticsearch, vì vậy hãy tắt output đó. Để làm như vậy, hãy tìm phần output.elasticsearch
và comment các dòng sau bằng cách đặt trước chúng bằng dấu #
:
...
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
...
Sau đó, cấu hình phần output.logstash
. Bỏ comment các dòng output.logstash:
và hosts: ["localhost: 5044"]
bằng cách bỏ dấu #
. Điều này sẽ định cấu hình Filebeat để kết nối với Logstash trên máy chủ Elastic Stack của bạn tại port 5044 mà chúng ta đã chỉ định output Logstash trước đó:
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
Lưu và đóng tập tin.
Chức năng của Filebeat có thể được mở rộng với các module Filebeat. Trong hướng dẫn này, chúng ta sẽ sử dụng module hệ thống, module này thu thập và phân tích các bản log được tạo bởi service ghi log hệ thống của các bản phân phối Linux phổ biến.
Chúng ta bật module hệ thống bằng câu lệnh sau:
sudo filebeat modules enable system
Bạn có thể xem danh sách các module được bật và tắt bằng cách chạy câu lệnh này:
sudo filebeat modules list
Theo mặc định, Filebeat được định cấu hình để sử dụng các đường dẫn mặc định cho syslog và authorization log. Trong trường hợp của bài viết này, bạn không cần phải thay đổi bất kỳ điều gì trong cấu hình. Bạn có thể xem các thông số của module trong tập tin cấu hình /etc/filebeat/modules.d/system.yml
.
Tiếp theo, chúng ta cần thiết lập đường ống dẫn nhập Filebeat, phân tích cú pháp dữ liệu log trước khi gửi nó qua logstash tới Elasticsearch. Để tải đường dẫn nhập cho module hệ thống, hãy nhập lệnh sau:
sudo filebeat setup --pipelines --modules system
Tiếp theo, tải template chỉ mục vào Elasticsearch. Chỉ mục Elasticsearch là một tập hợp các tài liệu có các đặc điểm tương tự. Các chỉ mục được xác định bằng một tên, được sử dụng để trỏ chỉ mục khi thực hiện các hoạt động khác nhau bên trong nó. Template chỉ mục sẽ được tự động áp dụng khi một chỉ mục mới được tạo.
Để tải template, hãy sử dụng lệnh sau:
sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
Filebeat được đóng gói với các template bảng điều khiển Kibana cho phép bạn trực quan hóa dữ liệu Filebeat trong Kibana. Trước khi có thể sử dụng trang dashboard, bạn cần tạo template chỉ mục và tải trang dashboard vào Kibana.
Khi load trang dashboard, Filebeat kết nối với Elasticsearch để kiểm tra thông tin phiên bản. Để tải trang dashboard khi Logstash được bật, bạn cần tắt output Logstash và bật output Elasticsearch:
sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601
Bây giờ bạn có thể bật và bắt đầu sử dụng Filebeat:
sudo systemctl enable filebeat
sudo systemctl start filebeat
Nếu bạn đã thiết lập Elastic Stack đúng cách, Filebeat sẽ bắt đầu gửi syslog và log authorization của bạn tới Logstash, sau đó sẽ tải dữ liệu đó vào Elasticsearch.
Để xác minh rằng Elasticsearch thực sự đang nhận dữ liệu này, hãy truy vấn chỉ mục Filebeat bằng lệnh sau:
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
Nếu output của bạn hiển thị tổng số lần truy cập là 0, Elasticsearch đang không tải bất kỳ log nào trong chỉ mục bạn đã tìm kiếm và bạn sẽ cần xem lại thiết lập của mình để tìm lỗi. Nếu bạn nhận được kết quả như mong đợi, hãy tiếp tục bước tiếp theo, trong đó chúng ta sẽ xem cách điều hướng qua một số trang dashboard của Kibana.
Bước 5: Khám phá trang dashboard Kibana
Hãy quay lại giao diện web Kibana mà chúng ta đã cài đặt trước đó.
Nhấp vào liên kết Discover trong thanh điều hướng bên trái (bạn có thể phải nhấp vào biểu tượng Expand ở dưới cùng bên trái để xem các mục menu điều hướng). Trên trang Discover, chọn mẫu chỉ mục filebeat-* được xác định trước để xem dữ liệu Filebeat. Theo mặc định, điều này sẽ hiển thị cho bạn tất cả dữ liệu log trong 15 phút qua. Bạn sẽ thấy một biểu đồ với các sự kiện log và một số thông báo log bên dưới:
Tại đây, bạn có thể tìm kiếm và duyệt qua log của mình và cũng có thể tùy chỉnh trang dashboard của mình. Tuy nhiên, tại thời điểm này, sẽ không có nhiều thứ ở đó vì bạn chỉ đang thu thập các log hệ thống từ máy chủ Elastic Stack của mình.
Sử dụng bảng điều khiển bên trái để điều hướng đến trang Dashboard và tìm kiếm bảng điều khiển Filebeat System. Khi đó, bạn có thể chọn các trang tổng quan mẫu đi kèm với module system
của Filebeat.
Ví dụ: bạn có thể xem số liệu thống kê chi tiết dựa trên thông báo log hệ thống của mình:
Ngoài ra, Kibana còn có nhiều tính năng khác, chẳng hạn như đồ thị và filter, vì vậy hãy thoải mái khám phá thôi!
Kết luận
Trong bài viết này, bạn đã học cách cài đặt và định cấu hình Elastic Stack để thu thập và phân tích log hệ thống. Hãy nhớ rằng bạn có thể gửi bất kỳ loại log hoặc dữ liệu được lập chỉ mục nào tới Logstash bằng Beats, nhưng dữ liệu sẽ trở nên hữu ích hơn nếu nó được phân tích cú pháp và cấu trúc bằng bộ lọc Logstash, vì điều này biến dữ liệu thành một định dạng nhất quán có thể đọc được dễ dàng bởi Elasticsearch.