Elastic Stack, trước đây được biết đến với tên gọi ELK Stack, là một bộ phần mềm mã nguồn mở do Elastic phát triển, cho phép bạn tìm kiếm, phân tích và trực quan hóa các log được tạo ra từ bất kỳ nguồn nào, dưới bất kỳ định dạng nào, một phương pháp được gọi là ghi log tập trung (centralized logging).

Ghi log tập trung rất cần thiết khi cần xác định sự cố của server hoặc ứng dụng, vì nó cho phép tìm kiếm toàn bộ log tại một vị trí duy nhất. Ngoài ra, phương pháp này còn hỗ trợ phát hiện các vấn đề liên quan đến nhiều server bằng cách đối chiếu log của chúng trong một khoảng thời gian cụ thể.
Elastic Stack gồm bốn thành phần chính:
- Elasticsearch: công cụ tìm kiếm phân tán hỗ trợ RESTful, lưu trữ toàn bộ dữ liệu đã thu thập.
- Logstash: thành phần xử lý dữ liệu của Elastic Stack, gửi dữ liệu đến Elasticsearch.
- Kibana: giao diện web để tìm kiếm và trực quan hóa log.
- Beats: các trình gửi dữ liệu (data shipper) gọn nhẹ, chuyên biệt, 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 hướng dẫn này, bạn sẽ cài đặt Elastic Stack trên Ubuntu 22.04. Bạn sẽ tìm hiểu cách cài đặt toàn bộ các thành phần của Elastic Stack, bao gồm Filebeat, Beat này dùng để chuyển tiếp và tập trung log cũng như tệp, và cấu hình chúng để thu thập và trực quan hóa log hệ thống.
Ngoài ra, vì Kibana thông thường chỉ khả dụng trên localhost nên chúng ta sẽ sử dụng Nginx làm proxy để có thể truy cập Kibana qua trình duyệt web. Tất cả các thành phần này sẽ được cài đặt trên một server duy nhất, gọi là server Elastic Stack.
Lưu ý: Khi cài đặt Elastic Stack, bạn phải sử dụng cùng một phiên bản cho toàn bộ các thành phần. Trong hướng dẫn này, chúng ta sẽ cài đặt phiên bản mới nhất của toàn bộ stack, tại thời điểm viết bài là Elasticsearch 7.7.1, Kibana 7.7.1, Logstash 7.7.1 và Filebeat 7.7.1.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn sẽ cần:
- Một server Ubuntu 22.04 với 4GB RAM và 2 CPU, được cấu hình với người dùng sudo không phải root. Bạn có thể thiết lập server như vậy bằng cách làm theo hướng dẫn cấu hình server ban đầu với Ubuntu 22.04. Trong hướng dẫn này, chúng ta sẽ làm việc với cấu hình tối thiểu về CPU và RAM để vận hành Elasticsearch. Lưu ý rằng nhu cầu về CPU, RAM và dung lượng lưu trữ của server Elasticsearch sẽ phụ thuộc vào khối lượng log mà bạn dự kiến xử lý.
- OpenJDK 11 đã được cài đặt. Xem mục Cài đặt JRE/JDK mặc định trong hướng dẫn Cách cài đặt Java bằng Apt trên Ubuntu 22.04 để thiết lập.
- Nginx đã được cài đặt trên server của bạn và sẽ được cấu hình ở phần sau của hướng dẫn này để làm reverse proxy cho Kibana. Làm theo hướng dẫn cách cài đặt Nginx trên Ubuntu 22.04 để tiến hành cài đặt.
Ngoài ra, vì Elastic Stack chứa các thông tin quan trọng về server mà bạn không muốn người dùng trái phép truy cập nên việc bảo mật cho server bằng cách cài đặt chứng chỉ TLS/SSL là rất cần thiết. Bước này không bắt buộc nhưng vẫn nên triển khai.
Tuy nhiên, vì trong bài viết này bạn sẽ còn thay đổi cấu hình server block của Nginx, nên tốt hơn hết là bạn hãy cài đặt SSL ở cuối Bước 2 trong hướng dẫn Cài đặt Let’s Encrypt trên Ubuntu 22.04.
Nếu dự định cấu hình Let’s Encrypt cho máy chủ, bạn hãy chuẩn bị sẵn các điều kiện sau:
- Tên miền đầy đủ (FQDN – Fully Qualified Domain Name). Trong hướng dẫn này,
your_domainsẽ được dùng làm ví dụ. Bạn có thể mua tên miền từ Namecheap, nhận miễn phí tại Freenom, hoặc sử dụng bất kỳ nhà cung cấp tên miền nào mà bạn muốn. - Hai bản ghi DNS được cấu hình cho máy chủ. Bạn có thể tham khảo hướng dẫn Quản lý DNS trên DigitalOcean để biết chi tiết cách thêm các bản ghi này.
- Một bản ghi
Avớiyour_domaintrỏ đến địa chỉ IP công khai của máy chủ. - Một bản ghi
Avớiwww.your_domaintrỏ đến địa chỉ IP công khai của máy chủ.
- Một bản ghi
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 repository gói mặc định của Ubuntu. Tuy nhiên, bạn có thể cài đặt chúng thông qua APT sau khi thêm danh sách nguồn gói của Elastic.
Tất cả các gói đều được ký bằng khóa ký của Elasticsearch để bảo vệ hệ thống khỏi nguy cơ giả mạo. Những gói được xác thực bằng khóa này sẽ được trình quản lý gói của bạn coi là đáng tin cậy. Trong bước này, bạn sẽ nhập khóa GPG công khai của Elasticsearch và thêm danh sách nguồn gói của Elastic để tiến hành cài đặt Elasticsearch.
Trước tiên, sử dụng cURL, công cụ dòng lệnh để truyền dữ liệu qua URL, để nhập khóa GPG công khai của Elasticsearch vào APT. Lưu ý, chúng ta sử dụng các đối số -fsSL để ẩn toàn bộ tiến trình và lỗi có thể xảy ra (trừ lỗi do server), đồng thời cho phép cURL thực hiện yêu cầu tới một vị trí mới nếu bị chuyển hướng. Chuyển kết quả xuất ra từ lệnh curl sang lệnh gpg --dearmor để chuyển đổi khóa sang định dạng mà apt có thể dùng để xác minh các gói đã tải.
curl -fsSL <https://artifacts.elastic.co/GPG-KEY-elasticsearch> | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
Tiếp theo, thêm danh sách nguồn gói Elastic vào thư mục sources.list.d, tại đây APT sẽ tìm kiếm các nguồn mới:
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] <https://artifacts.elastic.co/packages/7.x/apt> stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
Phần [signed-by=/usr/share/keyrings/elastic.gpg] trong tệp hướng dẫn apt sử dụng khóa bạn vừa tải để xác minh thông tin repository và tệp của các gói Elasticsearch.
Tiếp theo, cập nhật danh sách gói để APT đọc nguồn Elastic mới:
sudo apt update
Sau đó, cài đặt Elasticsearch bằng lệnh:
sudo apt install elasticsearch
Elasticsearch đã được cài đặt và đủ điều kiện để cấu hình. Bạn hãy mở tệp cấu hình chính elasticsearch.yml bằng trình soạn thảo ưa thích. Trong hướng dẫn này, chúng ta dùng nano:
sudo nano /etc/elasticsearch/elasticsearch.yml
Lưu ý: Tệp cấu hình của Elasticsearch sử dụng định dạng YAML, nghĩa là bạn cần giữ nguyên cấu trúc thụt dòng và không được thêm khoảng trắng ngoài ý muốn khi chỉnh sửa tệp.
Tệp elasticsearch.yml chứa các tùy chọn cấu hình cho cluster, node, đường dẫn, bộ nhớ, mạng, discovery và gateway. Mặc dù phần lớn các tùy chọn đã được cấu hình sẵn nhưng bạn vẫn có thể thay đổi tùy theo nhu cầu. Với cấu hình minh họa trên một server duy nhất, chúng ta chỉ điều chỉnh thiết lập cho network host.
Elasticsearch lắng nghe lưu lượng từ mọi nơi trên cổng 9200. Bạn nên giới hạn quyền truy cập từ bên ngoài vào Elasticsearch để tránh bị người khác đọc dữ liệu hoặc tắt cluster thông qua REST API. Để hạn chế truy cập và tăng cường bảo mật, tìm dòng cấu hình network.host, bỏ dấu # và thay giá trị bằng localhost như sau:
/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .
Chúng ta đã chỉ định localhost để Elasticsearch lắng nghe trên tất cả các giao diện và địa chỉ IP được gán. Nếu bạn muốn nó chỉ lắng nghe trên một giao diện cụ thể, bạn có thể chỉ định địa chỉ IP của giao diện đó thay cho localhost. Lưu và đóng tệp elasticsearch.yml. Nếu bạn đang sử dụng nano, bạn có thể thực hiện bằng cách nhấn CTRL+X, sau đó Y và cuối cùng là ENTER.
Đây là các thiết lập tối thiểu để bạn có thể bắt đầu sử dụng Elasticsearch. Bây giờ, bạn có thể khởi động Elasticsearch lần đầu tiên.
Khởi động dịch vụ Elasticsearch bằng systemctl. Bạn hãy chờ một vài giây để Elasticsearch khởi chạy, nếu không bạn có thể gặp lỗi không thể kết nối.
sudo systemctl start elasticsearch
Tiếp theo, cho phép Elasticsearch tự động khởi động cùng hệ thống:
sudo systemctl enable elasticsearch
Bạn có thể kiểm tra dịch vụ Elasticsearch đang chạy bằng cách gửi yêu cầu HTTP:
curl -X GET "localhost:9200"
Bạn sẽ thấy phản hồi hiển thị một số thông tin cơ bản về node cục bộ, tương tự như sau:
{
"name" : "Elasticsearch",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "n8Qu5CjWSmyIXBzRXK-j4A",
"version" : {
"number" : "7.17.2",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "de7261de50d90919ae53b0eff9413fd7e5307301",
"build_date" : "2022-03-28T15:12:21.446567561Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Bây giờ Elasticsearch đã hoạt động, chúng ta sẽ tiếp tục 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 bảng điều khiển Kibana
Theo tài liệu chính thức, bạn nên cài đặt Kibana sau khi cài đặt Elasticsearch. Thứ tự này giúp đảm bảo thiết lập đúng các thành phần phụ thuộc của mỗi sản phẩm.
Vì bạn đã thêm nguồn gói Elastic ở bước trước nên bây giờ bạn chỉ cần cài đặt các thành phần còn lại của Elastic Stack bằng apt:
sudo apt install kibana
Sau đó, kích hoạt và khởi động dịch vụ Kibana:
sudo systemctl enable kibana
sudo systemctl start kibana
Do Kibana được cấu hình mặc định chỉ lắng nghe trên localhost nên chúng ta cần thiết lập reverse proxy để cho phép truy cập từ bên ngoài. Chúng ta sẽ dùng Nginx cho mục đích này, và nên cài đặt sẵn Nginx trên server.
Trước tiên, sử dụng lệnh openssl để tạo tài khoản quản trị Kibana, tài khoản này sẽ được dùng để truy cập giao diện web của Kibana. Trong ví dụ này, chúng ta đặt tên tài khoản là kibanaadmin, nhưng để tăng tính bảo mật, bạn nên chọn một tên khác khó đoán hơn.
Lệnh sau sẽ tạo tài khoản và mật khẩu quản trị Kibana, lưu thông tin này trong tệp htpasswd.users. Nginx sẽ được cấu hình để yêu cầu tên đăng nhập và mật khẩu này, đồng thời đọc từ tệp đó:
echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
Nhập và xác nhận mật khẩu khi được yêu cầu. Đừng quên ghi nhớ hoặc lưu lại thông tin đăng nhập vì bạn sẽ cần nó để truy cập giao diện web của Kibana.
Tiếp theo, chúng ta sẽ tạo tệp cấu hình server block cho Nginx. Trong ví dụ này, tệp sẽ được đặt tên là your_domain, nhưng bạn có thể đặt tên có mô tả rõ hơn. Nếu bạn có FQDN và đã cấu hình DNS cho server, bạn có thể đặt tên tệp trùng với FQDN đó.
Dùng nano hoặc trình soạn thảo yêu thích để tạo tệp:
sudo nano /etc/nginx/sites-available/your_domain
Thêm đoạn cấu hình sau vào tệp, nhớ thay your_domain bằng FQDN hoặc địa chỉ IP công khai của server. Đoạn cấu hình này sẽ định tuyến toàn bộ lưu lượng HTTP đến ứng dụng Kibana đang lắng nghe trên localhost:5601. Ngoài ra, nó cũng yêu cầu xác thực cơ bản và đọc tệp htpasswd.users.
Lưu ý: Nếu đã tạo tệp này ở hướng dẫn cài đặt Nginx trước đó, bạn nên xóa toàn bộ nội dung cũ trước khi thêm nội dung mới:
/etc/nginx/sites-available/your_domain
server {
listen 80;
server_name your_domain;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
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;
}
}
Khi hoàn tất, lưu và đóng tệp.
Kích hoạt cấu hình mới bằng cách tạo liên kết tượng trưng tới thư mục sites-enabled. Nếu tệp này đã tồn tại từ trước, bạn không cần chạy lệnh này:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/your_domain
Kiểm tra lỗi cú pháp trong cấu hình:
sudo nginx -t
Nếu trong kết quả hiển thị có báo lỗi, bạn hãy quay lại và kiểm tra kỹ xem nội dung bạn đã thêm vào tệp cấu hình có được nhập chính xác hay chưa. Khi thấy thông báo cho biết syntax is ok trong kết quả, bạn hãy khởi động lại dịch vụ Nginx:
sudo systemctl reload nginx
Nếu bạn đã bật tường lửa UFW theo hướng dẫn thiết lập ban đầu, cho phép kết nối tới Nginx bằng lệnh:
sudo ufw allow 'Nginx Full'
Lưu ý: Nếu bạn đã thực hiện hướng dẫn cài đặt Nginx ở phần điều kiện tiên quyết, có thể bạn đã tạo một quy tắc UFW cho phép hồ sơ Nginx HTTP đi qua tường lửa. Vì hồ sơ Nginx Full cho phép cả lưu lượng HTTP và HTTPS đi qua tường lửa, bạn có thể xóa an toàn quy tắc đã tạo ở hướng dẫn trước. Thực hiện điều này bằng lệnh sau:
sudo ufw delete allow 'Nginx HTTP'
Hiện tại, Kibana đã có thể truy cập thông qua FQDN hoặc địa chỉ IP công khai của máy chủ Elastic Stack. Bạn có thể kiểm tra trang trạng thái của máy chủ Kibana bằng cách truy cập địa chỉ sau và nhập thông tin đăng nhập khi được yêu cầu:
http://your_domain/status
Trang trạng thái này hiển thị thông tin về mức sử dụng tài nguyên của máy chủ và danh sách các plugin đã cài đặt.

Lưu ý: Như đã đề cập trong phần Điều kiện tiên quyết, bạn nên bật SSL/TLS trên máy chủ. Bạn có thể tham khảo hướng dẫn Let’s Encrypt để lấy chứng chỉ TLS miễn phí cho Nginx trên Ubuntu 22.04. Sau khi nhận được chứng chỉ TLS, bạn có thể quay lại và hoàn tất hướng dẫn này.
Bây giờ, khi bảng điều khiển Kibana đã được cấu hình, 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 thông thường chúng ta sẽ sử dụng Logstash để xử lý dữ liệu. Điều này giúp bạn linh hoạt hơn trong việc thu thập dữ liệu từ nhiều nguồn khác nhau, chuyển đổi chúng sang một định dạng chung và xuất ra một cơ sở dữ liệu khác.
Cài đặt Logstash với lệnh sau:
sudo apt install logstash
Sau khi cài đặt Logstash, chúng ta có thể tiến hành cấu hình. Các tệp cấu hình của Logstash nằm trong thư mục /etc/logstash/conf.d. Để tìm hiểu thêm về cú pháp cấu hình, bạn có thể tham khảo tài liệu tham khảo về cấu hình do Elastic cung cấp. Khi cấu hình tệp, bạn có thể hình dung Logstash như một pipeline (đường ống xử lý dữ liệu), nhận dữ liệu từ một đầu, xử lý theo một cách nào đó, rồi gửi ra điểm đích (trong trường hợp này là Elasticsearch).
Một pipeline của Logstash có hai thành phần bắt buộc: input và output, cùng một thành phần tùy chọn là filter.
- Input plugins: tiêu thụ dữ liệu từ nguồn.
- Filter plugins: xử lý dữ liệu.
- Output plugins: ghi dữ liệu đến điểm đích.

Hình minh họa pipeline của Logstash
Tạo một tệp cấu hình có tên 02-beats-input.conf để thiết lập đầu vào từ Filebeat:
sudo nano /etc/logstash/conf.d/02-beats-input.conf
Chèn cấu hình input sau. Cấu hình này định nghĩa một beats input lắng nghe trên cổng TCP 5044:
# /etc/logstash/conf.d/02-beats-input.conf
input {
beats {
port => 5044
}
}
Lưu và đóng tệp.
Tiếp theo, tạo một tệp cấu hình có tên 30-elasticsearch-output.conf:
sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf
Chèn cấu hình output sau. Cấu hình này chỉ định để Logstash lưu dữ liệu từ Beats vào Elasticsearch, đang chạy tại localhost:9200, trong một index được đặt tên theo Beat được sử dụng. Trong hướng dẫn này, Beat được sử dụng là Filebeat:
# /etc/logstash/conf.d/30-elasticsearch-output.conf
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.
Kiểm tra cấu hình Logstash với lệnh sau:
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
Nếu không có lỗi cú pháp, bạn sẽ thấy thông báo: Config Validation Result: OK. Exiting Logstash sai vài giây.
Nếu không thấy thông báo này, hãy kiểm tra các lỗi được ghi trong kết quả và cập nhật lại cấu hình để khắc phục. Lưu ý, bạn có thể nhận cảnh báo từ OpenJDK, nhưng chúng không gây ảnh hưởng và có thể bỏ qua.
Nếu kiểm tra cấu hình thành công, hãy khởi động và kích hoạt Logstash để áp dụng thay đổi:
sudo systemctl start logstash
sudo systemctl enable logstash
Bây giờ, khi Logstash đã chạy đúng cách và được cấu hình đầy đủ, chúng ta sẽ tiến hành cài đặt Filebeat.
Bước 4: Cài đặt và cấu hình Filebeat
Elastic Stack sử dụng nhiều data shipper nhẹ gọi là Beats để thu thập dữ liệu từ nhiều nguồn khác nhau và gửi đến Logstash hoặc Elasticsearch. Dưới đây là các Beats hiện có từ Elastic:
- Filebeat: thu thập và gửi các tệp log.
- Metricbeat: thu thập các số liệu từ hệ thống và dịch vụ.
- Packetbeat: thu thập và phân tích dữ liệu mạng.
- Winlogbeat: thu thập log sự kiện của Windows.
- Auditbeat: thu thập dữ liệu từ Linux audit framework và giám sát tính toàn vẹn tệp.
- Heartbeat: giám sát tình trạng khả dụng của dịch vụ bằng phương pháp kiểm tra chủ động.
Trong hướng dẫn này, chúng ta sẽ sử dụng Filebeat để chuyển tiếp log cục bộ tới 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. Chúng ta sẽ chỉnh sửa tệp cấu hình mẫu đi kèm với Filebeat.
Mở tệp cấu hình Filebeat:
sudo nano /etc/filebeat/filebeat.yml
Lưu ý, giống như Elasticsearch, tệp cấu hình của Filebeat ở định dạng YAML, do đó việc thụt dòng chính xác là rất quan trọng, cần giữ nguyên số lượng khoảng trắng như trong hướng dẫn.
Filebeat hỗ trợ nhiều loại output, nhưng thông thường bạn sẽ chỉ gửi dữ liệu trực tiếp đến Elasticsearch hoặc đến Logstash để xử lý thêm. Trong hướng dẫn này, chúng ta sẽ sử dụng Logstash để xử lý dữ liệu thu thập từ Filebeat. Filebeat sẽ không gửi dữ liệu trực tiếp đến Elasticsearch, vì vậy bạn cần tắt output này. Thực hiện bằng cách tìm phần output.elasticsearch và thêm ký tự # vào đầu các dòng sau để vô hiệu hóa:
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
Tiếp đó, cấu hình phần output.logstash. Bỏ dấu # trước các dòng output.logstash: và hosts: ["localhost:5044"]. Cấu hình này sẽ cho phép Filebeat kết nối tới Logstash trên máy chủ Elastic Stack tại cổng 5044, cổng đã được chỉ định trong cấu hình Logstash trước đó:
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
Lưu và đóng tệp.
Chức năng của Filebeat có thể mở rộng thông qua module. Trong hướng dẫn này, chúng ta sẽ sử dụng system module, dùng để thu thập và phân tích log do dịch vụ ghi log hệ thống của các bản phân phối Linux phổ biến tạo ra.
Kích hoạt module này:
sudo filebeat modules enable system
Xem danh sách module đã bật và chưa bằng lệnh:
sudo filebeat modules list
Kết quả sẽ tương tự:
Output
Enabled:
system
Disabled:
apache2
auditd
elasticsearch
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
traefik
...
Mặc định, Filebeat được cấu hình để sử dụng đường dẫn mặc định cho syslog và authorization log. Trong hướng dẫn này, bạn không cần thay đổi gì thêm. Có thể xem tham số của module trong tệp cấu hình /etc/filebeat/modules.d/system.yml.
Tiếp theo, thiết lập Filebeat ingest pipeline, dùng để phân tích dữ liệu log trước khi gửi qua Logstash đến Elasticsearch. Tải ingest pipeline cho system module bằng lệnh:
sudo filebeat setup --pipelines --modules system
Tiếp theo, tải index template vào Elasticsearch. Một index trong Elasticsearch là tập hợp các document có đặc điểm tương tự, được nhận diện bằng tên và được sử dụng khi thực hiện các thao tác khác nhau trên nó. Template này sẽ tự động áp dụng khi tạo index mới.
Tải template bằng lệnh:
sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
Output
Index setup finished.
Filebeat được đóng gói kèm các dashboard mẫu cho Kibana, cho phép trực quan hóa dữ liệu Filebeat trong Kibana. Trước khi sử dụng dashboard, bạn cần tạo index pattern và tải dashboard vào Kibana.
Trong quá trình tải dashboard, Filebeat sẽ kết nối tới Elasticsearch để kiểm tra thông tin phiên bản. Để tải dashboard khi Logstash được bật, 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
Sau vài phút, bạn sẽ nhận kết quả tương tự:
Output
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: <https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.html>
Loaded machine learning job configurations
Loaded Ingest pipelines
Bây giờ, khởi động và kích hoạt Filebeat:
sudo systemctl start filebeat
sudo systemctl enable filebeat
Nếu Elastic Stack đã được thiết lập đúng, Filebeat sẽ bắt đầu gửi log hệ thống và log xác thực tới Logstash, sau đó Logstash sẽ nạp dữ liệu này vào Elasticsearch.
Để xác minh Elasticsearch thực sự nhận được dữ liệu, bạn có thể truy vấn index Filebeat với lệnh:
curl -XGET '<http://localhost:9200/filebeat-*/_search?pretty>'
Kết quả sẽ tương tự như sau:
Output
. . .
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 2,
"successful" : 2,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4040,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "filebeat-7.17.2-2022.04.18",
"_type" : "_doc",
"_id" : "YhwePoAB2RlwU5YB6yfP",
"_score" : 1.0,
"_source" : {
"cloud" : {
"instance" : {
"id" : "294355569"
},
"provider" : "digitalocean",
"service" : {
"name" : "Droplets"
},
"region" : "tor1"
},
"@timestamp" : "2022-04-17T04:42:06.000Z",
"agent" : {
"hostname" : "elasticsearch",
"name" : "elasticsearch",
"id" : "b47ca399-e6ed-40fb-ae81-a2f2d36461e6",
"ephemeral_id" : "af206986-f3e3-4b65-b058-7455434f0cac",
"type" : "filebeat",
"version" : "7.17.2"
},
. . .
Nếu kết quả hiển thị 0 total hits thì tức là Elasticsearch chưa nhận log nào trong index được tìm kiếm. Lúc này, bạn cần xem lại cấu hình để khắc phục. Nếu kết quả mà bạn nhận được như mong đợi, bạn có thể chuyển sang bước tiếp theo để tìm hiểu cách điều hướng qua một số dashboard của Kibana.
Bước 5: Khám phá các dashboard của Kibana
Quay lại giao diện web Kibana mà chúng ta đã cài đặt trước đó.
Trên trình duyệt, truy cập FQDN hoặc địa chỉ IP công khai của máy chủ Elastic Stack. Nếu phiên làm việc đã bị gián đoạn, bạn cần đăng nhập lại bằng thông tin xác thực đã thiết lập ở Bước 2. Sau khi đăng nhập thành công, bạn sẽ thấy trang chủ của Kibana:

Kibana Homepage
Nhấp vào liên kết Discover trong thanh điều hướng bên trái (có thể cần nhấp vào biểu tượng Expand ở góc dưới bên trái để hiển thị menu điều hướng). Trong trang Discover, chọn mẫu index pattern filebeat-* đã được định nghĩa sẵn để xem dữ liệu từ Filebeat. Mặc định, phần này sẽ hiển thị toàn bộ dữ liệu log trong 15 phút gần nhất. Bạn sẽ thấy biểu đồ histogram các sự kiện log và một số thông điệp log bên dưới:

Discover page
Tại đây, bạn có thể tìm kiếm, duyệt qua log và tùy chỉnh dashboard. Tuy nhiên, ở thời điểm này, dữ liệu sẽ chưa nhiều vì chúng ta mới chỉ thu thập syslog từ máy chủ Elastic Stack.
Sử dụng bảng điều hướng bên trái để chuyển đến trang Dashboard, sau đó tìm Filebeat System dashboards. Tại đây, bạn có thể chọn các dashboard mẫu đi kèm với system module của Filebeat.
Ví dụ, bạn có thể xem thống kê chi tiết dựa trên các thông điệp syslog:

Syslog Dashboard
Hoặc xem danh sách người dùng đã sử dụng lệnh sudo và thời điểm thực hiện:

Sudo Dashboard
Kibana còn có nhiều tính năng khác như tạo biểu đồ, lọc dữ liệu, bạn có thể tự do khám phá thêm.
Kết luận
Trong hướng dẫn này, bạn đã tìm hiểu cách cài đặt và cấu hình Elastic Stack để thu thập và phân tích log hệ thống. Cần nhớ, bạn có thể gửi hầu hết mọi loại log hoặc dữ liệu được lập chỉ mục đến Logstash thông qua Beats, nhưng dữ liệu sẽ hữu ích hơn khi được phân tích và cấu trúc bằng Logstash filter, vì cách này sẽ chuyển đổi dữ liệu sang định dạng thống nhất để Elasticsearch dễ đọc.