---
title: "Cách cài đặt Elaticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 20.04"
description: "Cách cài đặt Elaticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 20.04"
url: https://cloudfly.vn/techblog/cach-cai-dat-elaticsearch-logstash-va-kibana-elastic-stack-tren-ubuntu-2004
image: https://media.cloudfly.vn/posts/techblog_2.jpg
---

# Cách cài đặt Elaticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 20.04

## Giới thiệu

Elastic Stack — trước đây được gọi là *ELK Stack* — là một bộ sưu tập phần mềm nguồn mở do Elastic sản xuất, cho phép bạn tìm kiếm, phân tích và trực quan hóa các nhật ký được tạo từ bất kỳ nguồn nào ở bất kỳ định dạng nào, một phương pháp được gọi là *bộ log tập trung* (centralized logging). Bộ log tập trung có thể hữu ích khi cố gắng xác định các sự cố với máy chủ hoặc ứng dụng của bạn vì nó cho phép bạn tìm kiếm trong tất cả các nhật ký của mình ở một nơi duy nhất. Nó cũng hữu ích vì nó cho phép bạn xác định các sự cố trải rộng trên nhiều máy chủ bằng cách so sánh nhật ký của chúng trong một khung thời gian cụ thể.

Elastic Stack có bốn thành phần chính:

* **Elaticsearch**: một công cụ tìm kiếm *RESTful* phân tán 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 gửi dữ liệu đến tới Elaticsearch.
* **Kibana**: giao diện web để tìm kiếm và hiển thị nhật ký.
* **Beats**: bộ gửi dữ liệu đơn mục đích, nhẹ, có thể gửi dữ liệu từ hàng trăm hoặc hàng nghìn máy đến Logstash hoặc Elaticsearch.

Trong hướng dẫn này, bạn sẽ cài đặt Elastic Stack trên máy chủ Ubuntu 20.04. Bạn sẽ tìm hiểu cách cài đặt tất cả các thành phần của Elastic Stack — bao gồm Filebeat, một Beat được sử dụng để chuyển tiếp và tập trung nhật ký và tệp — đồng thời thiết lập cấu hình chúng để thu thập và trực quan hóa nhật ký hệ thống. Ngoài ra, vì Kibana thường chỉ khả dụng trên `localhost`, chúng tôi sẽ sử dụng Nginx để ủy quyền cho nó để nó có thể truy cập được qua trình duyệt web. Chúng tôi sẽ cài đặt tất cả các thành phần này trên một máy chủ duy nhất mà chúng tôi sẽ gọi là *Elastic Stack server* của chúng tôi.

<$>[note]
**Lưu ý:** Khi cài đặt Elastic Stack, bạn phải sử dụng cùng một phiên bản trên toàn bộ ngăn xếp. Trong hướng dẫn này, chúng tôi sẽ cài đặt các phiên bản mới nhất của toàn bộ ngăn xếp, tại thời điểm viết bài này, Elaticsearch 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 những điều sau đây:

* Máy chủ Ubuntu 20.04 có RAM 4GB và 2 CPU được thiết lập với non-root sudo user. Bạn có thể đạt được điều này bằng cách làm theo Thiết lập máy chủ ban đầu với Ubuntu 20.04. Đối với hướng dẫn này, chúng tôi sẽ làm việc với lượng CPU và RAM tối thiểu cần thiết để chạy Elaticsearch. Lưu ý rằng dung lượng CPU, RAM và dung lượng lưu trữ mà máy chủ Elaticsearch của bạn sẽ yêu cầu tùy thuộc vào khối lượng nhật ký mà bạn mong đợi.
* Đã cài đặt OpenJDK 11. Xem phần [Cài đặt JRE/JDK mặc định] của hướng dẫn Cách cài đặt Java với Apt trên Ubuntu 20.04 để thiết lập điều này.
* Nginx được cài đặt trên máy chủ của bạn, mà chúng tôi sẽ thiết lập cấu hình sau trong hướng dẫn này làm proxy ngược cho Kibana. Làm theo hướng dẫn của chúng tôi về Cách cài đặt Nginx trên Ubuntu 20.04 để thiết lập tính năng này.

Ngoài ra, vì Elastic Stack được sử dụng để truy cập thông tin có giá trị về máy chủ của bạn mà bạn không muốn người dùng trái phép truy cập, điều quan trọng là bạn phải giữ an toàn cho máy chủ của mình bằng cách cài đặt chứng chỉ TLS/SSL. Đây là tùy chọn nhưng **được khuyến khích mạnh mẽ**.

Tuy nhiên, vì cuối cùng bạn sẽ thực hiện các thay đổi đối với khối máy chủ Nginx của mình trong suốt hướng dẫn này, nên sẽ có ý nghĩa hơn nếu bạn hoàn thành hướng dẫn Let's Encrypt trên Ubuntu 20.04 ở cuối bước thứ hai của hướng dẫn này. Với ý nghĩ đó, nếu bạn dự định thiết lập cấu hình Let's Encrypt trên máy chủ của mình, bạn sẽ cần chuẩn bị những thứ sau trước khi thực hiện:

* Một tên miền đủ điều kiện (FQDN). Hướng dẫn này sẽ sử dụng `<^>your_domain<^>` xuyên suốt. Bạn có thể mua một tên miền trên CloudFly, nhận một tên miền miễn phí trên Freenom hoặc sử dụng công ty đăng ký tên miền mà bạn chọn.
* Cả hai bản ghi DNS sau được thiết lập cho máy chủ của bạn. 
1. Một bản ghi A với `<^>your_domain<^>` trỏ đến địa chỉ IP công cộng của máy chủ của bạn.
2. Một bản ghi A với `www.<^>your_domain<^>` trỏ đến địa chỉ IP công cộng của máy chủ của bạn.

## Bước 1 - Cài đặt và thiết lập cấu hình Elaticsearch

Các thành phần Elaticsearch không có sẵn trong kho gói mặc định của Ubuntu. Tuy nhiên, chúng có thể được cài đặt bằng APT sau khi thêm danh sách nguồn gói của Elastic.

Tất cả các gói được ký bằng khóa ký Elaticsearch để bảo vệ hệ thống của bạn khỏi giả mạo gói. Các gói đã được xác thực bằng khóa 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 Elaticsearch và thêm danh sách nguồn gói Elastic để cài đặt Elaticsearch.

Để bắt đầu, hãy sử dụng cURL, công cụ dòng lệnh để truyền dữ liệu bằng URL, để nhập khóa GPG công khai của Elaticsearch vào APT. Lưu ý rằng chúng tôi đang sử dụng các đối số -fsSL để tắt tất cả 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 trên một vị trí mới nếu được chuyển hướng. Đưa đầu ra của lệnh cURL vào chương trình khóa apt, chương trình này sẽ thêm khóa GPG công khai vào APT.
```command
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
```

Tiếp theo, thêm danh sách nguồn đàn hồi vào thư mục `sources.list.d`, nơi APT sẽ tìm kiếm các nguồn mới:
```command
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, hãy cập nhật danh sách gói của bạn để APT sẽ đọc nguồn Elastic mới:
```command
sudo apt update
```

Sau đó cài đặt Elaticsearch bằng lệnh này:
```command
sudo apt install elasticsearch
```

Elaticsearch hiện đã được cài đặt và sẵn sàng để được thiết lập cấu hình. Sử dụng trình soạn thảo 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 Elaticsearch, `elaticsearch.yml`. Ở đây, chúng tôi sẽ sử dụng `nano`:
```command
sudo nano /etc/elasticsearch/elasticsearch.yml
```

<$>[note]
**Lưu ý:** Tệp cấu hình của Elaticsearch ở định dạng YAML, có nghĩa là chúng ta cần duy trì định dạng thụt lề. Đảm bảo rằng bạn không thêm bất kỳ khoảng trống nào khi chỉnh sửa tệp này.
<$>

Tệp `elaticsearch.yml` cung cấp các tùy chọn cấu hình cho cluster, node, paths, memory, network, discovery, và gateway của bạn. Hầu hết các tùy chọn này được cấu hình sẵn trong tệp nhưng bạn có thể thay đổi chúng theo nhu cầu của mình. Với mục đích trình diễn cấu hình một máy chủ, chúng tôi sẽ chỉ điều chỉnh cài đặt cho máy chủ lưu trữ mạng.

Elaticsearch lắng nghe lưu lượng truy cập từ mọi nơi trên cổng `9200`. Bạn sẽ muốn hạn chế quyền truy cập bên ngoài vào phiên bản Elaticsearch của mình để ngăn người ngoài đọc dữ liệu của bạn hoặc tắt cụm Elaticsearch của bạn thông qua [REST API]. Để hạn chế quyền truy cập và do đó tăng tính bảo mật, hãy tìm dòng chỉ định `network.host`, bỏ ghi chú và thay thế giá trị của nó bằng `localhost` như sau:
```nginx
[label /etc/elasticsearch/elasticsearch.yml]
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: <^>localhost<^>
. . .
```

Chúng tôi đã chỉ định `localhost`để Elaticsearch lắng nghe trên tất cả các giao diện và IP bị ràng buộc. Nếu bạn muốn nó chỉ nghe trên một giao diện cụ thể, bạn có thể chỉ định IP của nó thay cho `localhost`. Lưu và đóng `elaticsearch.yml`. Nếu bạn đang sử dụng `nano`, bạn có thể làm như vậy bằng cách nhấn `CTRL+X`, tiếp theo là `Y` rồi `ENTER`.

Đây là những cài đặt tối thiểu bạn có thể bắt đầu để sử dụng Elaticsearch. Bây giờ bạn có thể bắt đầu Elaticsearch lần đầu tiên.

Bắt đầu dịch vụ Elaticsearch với `systemctl`. Hãy cho Elaticsearch một vài phút để khởi động. Nếu không, bạn có thể gặp lỗi về việc không thể kết nối.
```command
sudo systemctl start elasticsearch
```

Tiếp theo, hãy chạy lệnh sau để kích hoạt Elaticsearch khởi động mỗi khi máy chủ của bạn khởi động:
```command
sudo systemctl enable elasticsearch
```

Bạn có thể kiểm tra xem dịch vụ Elaticsearch của mình có đang chạy hay không bằng cách gửi yêu cầu HTTP:
```command
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ộ của mình, tương tự như sau:
```
[secondary_label Output]
{
  "name" : "Elasticsearch",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
  "version" : {
    "number" : "7.7.1",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
```

Bây giờ Elaticsearch đã hoạt động, hãy cài đặt Kibana, thành phần tiếp theo của Elastic Stack.

## Bước 2 — Cài đặt và thiết lập cấu hình Bảng điều khiển Kibana

Theo tài liệu chính thức, bạn chỉ nên cài đặt Kibana sau khi cài đặt Elaticsearch. Cài đặt theo thứ tự này đảm bảo rằng các thành phần phụ thuộc vào mỗi sản phẩm được đặt đúng vị trí.

Vì bạn đã thêm nguồn gói Elastic ở bước trước, nên 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`:
```command
sudo apt install kibana
```

Sau đó kích hoạt và bắt đầu dịch vụ Kibana:
```command
sudo systemctl enable kibana
sudo systemctl start kibana
```

Vì Kibana được thiết lập cấu hình để chỉ nghe trên `localhost` nên chúng tôi phải thiết lập proxy ngược để cho phép bên ngoài truy cập vào nó. Chúng tôi sẽ sử dụng Nginx cho mục đích này, ứng dụng này đã được cài đặt trên máy chủ của bạn.

Đầu tiên, sử dụng lệnh `openssl` để tạo người dùng Kibana quản trị mà bạn sẽ sử dụng để truy cập giao diện web Kibana. Ví dụ: chúng tôi sẽ đặt tên cho tài khoản này là `<^>kibanaadmin<^>`, nhưng để đảm bảo tính bảo mật cao hơn, chúng tôi khuyên bạn nên chọn một tên không chuẩn cho người dùng của mình, tên đó sẽ khó đoán.

Lệnh sau sẽ tạo người dùng và mật khẩu Kibana quản trị, đồng thời lưu trữ chúng trong tệp `htpasswd.users`. Bạn sẽ thiết lập cấu hình Nginx để yêu cầu tên người dùng và mật khẩu này và đọc tệp này trong giây lát:
```command
echo "<^>kibanaadmin<^>:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
```

Nhập và xác nhận mật khẩu tại dấu nhắc. Hãy nhớ hoặc ghi lại thông tin đăng nhập này, vì bạn sẽ cần nó để truy cập giao diện web Kibana.

Tiếp theo, chúng tôi sẽ tạo một tệp khối máy chủ Nginx. Ví dụ: chúng tôi sẽ gọi tệp này là `<^>your_domain<^>`, mặc dù bạn có thể thấy hữu ích khi đặt cho tên miền của mình một cái tên mô tả hơn. Ví dụ: nếu bạn đã thiết lập bản ghi FQDN và DNS cho máy chủ này, bạn có thể đặt tên tệp này theo tên FQDN của mình.

Sử dụng nano hoặc trình soạn thảo văn bản ưa thích của bạn, tạo tệp khối máy chủ Nginx:
```command
sudo nano /etc/nginx/sites-available/<^>your_domain<^>
```

Thêm khối mã sau vào tệp, đảm bảo cập nhật `<^>your_domain<^>` để khớp với FQDN hoặc địa chỉ IP công cộng của máy chủ. Mã này thiết lập cấu hình Nginx để hướng lưu lượng HTTP của máy chủ của bạn đến ứng dụng Kibana đang lắng nghe trên `localhost:5601`. Ngoài ra, nó cấu hình Nginx để đọc tệp `htpasswd.users` và yêu cầu xác thực cơ bản.

Lưu ý rằng nếu bạn đã làm theo hướng dẫn Nginx tiên quyết cho đến cuối, bạn có thể đã tạo tệp này và điền vào tệp một số nội dung. Trong trường hợp đó, hãy xóa tất cả nội dung hiện có trong tệp trước khi thêm nội dung sau:
```nginx
[label /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 bạn hoàn tất, hãy lưu và đóng tệp.

Tiếp theo, kích hoạt cấu hình mới bằng cách tạo một liên kết tượng trưng đến thư mục `sites-enabled`. Nếu bạn đã tạo tệp khối máy chủ có cùng tên trong điều kiện tiên quyết Nginx, thì bạn không cần chạy lệnh này:
```command
sudo ln -s /etc/nginx/sites-available/<^>your_domain<^> /etc/nginx/sites-enabled/<^>your_domain<^>
```

Sau đó kiểm tra cấu hình để tìm lỗi cú pháp:
```command
sudo nginx -t
```

Nếu có bất kỳ lỗi nào được báo cáo trong đầu ra của bạn, hãy quay lại và kiểm tra kỹ xem nội dung bạn đặt trong tệp cấu hình đã được thêm chính xác chưa. Khi bạn thấy `syntax is ok` ở đầu ra, hãy tiếp tục và khởi động lại dịch vụ Nginx:
```command
sudo systemctl reload nginx
```

Nếu bạn làm theo hướng dẫn thiết lập máy chủ ban đầu, bạn nên bật tường lửa UFW. Để cho phép kết nối với Nginx, chúng ta có thể điều chỉnh các quy tắc bằng cách gõ:
```command
sudo ufw allow 'Nginx Full'
```

<$>[note]
**Lưu ý:** Nếu bạn đã làm theo hướng dẫn Nginx tiên quyết, bạn có thể đã tạo quy tắc UFW cho phép cấu hình `Nginx HTTP` thông qua tường lửa. Vì cấu hình `Nginx Full` cho phép cả lưu lượng HTTP và HTTPS đi qua tường lửa nên bạn có thể xóa quy tắc mà bạn đã tạo trong hướng dẫn điều kiện tiên quyết một cách an toàn. Làm như vậy với lệnh sau:
```command
sudo ufw delete allow 'Nginx HTTP'
```
<$>

Kibana hiện có thể truy cập được thông qua FQDN của bạn hoặc địa chỉ IP công cộng của máy chủ Elastic Stack của bạn. Bạn có thể kiểm tra trang trạng thái của máy chủ Kibana bằng cách điều hướng đến địa chỉ sau và nhập thông tin đăng nhập của bạn khi được nhắc:
```custom_prefix()
http://<^>your_domain<^>/status
```

Trang trạng thái này hiển thị thông tin về việc sử dụng tài nguyên của máy chủ và liệt kê các plugin đã cài đặt.

![description image](https://media.cloudfly.vn/posts/KibanaDashboard.png)

<$>[note]
**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ủ của mình. Bạn có thể làm theo hướng dẫn Let's Encrypt ngay bây giờ để nhận chứng chỉ SSL miễn phí cho Nginx trên Ubuntu 20.04. Sau khi nhận được chứng chỉ SSL/TLS, bạn có thể quay lại và hoàn thành hướng dẫn này.
<$>

Bây giờ bảng điều khiển Kibana đã được thiết lập cấu hình, hãy 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 Elaticsearch, 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 đổi dữ liệu thành định dạng chung và xuất sang cơ sở dữ liệu khác.

Cài đặt Logstash bằng lệnh này:
```command
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 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ể xem tham chiếu cấu hình mà Elastic cung cấp. Khi bạn thiết lập cấu hình tệp, sẽ rất hữu ích khi coi Logstash như một đường dẫn lấy dữ liệu ở một đầu, xử lý dữ liệu 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à Elaticsearch). Đường dẫn Logstash có hai phần tử bắt buộc là `input` và `output`, và một phần tử tùy chọn là `filter`. Các input plugin tiêu thụ dữ liệu từ một nguồn, các filter plugin xử lý dữ liệu và các output plugin ghi dữ liệu vào đích.

![description image](https://media.cloudfly.vn/posts/logstash_pipeline_updated.png)

Tạo tệp cấu hình có tên `02-beats-input.conf` nơi bạn sẽ thiết lập đầu vào Filebeat của mình:
```command
sudo nano /etc/logstash/conf.d/02-beats-input.conf
```

Chèn cấu hình `input` dưới đây. Điều này chỉ định `beats` input sẽ nghe trên cổng TCP `5044`.
```nginx
[label /etc/logstash/conf.d/02-beats-input.conf]
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-elasticsearch-output.conf`:
```command
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 thiết lập cấu hình Logstash để lưu trữ dữ liệu Beats trong Elaticsearch, đang chạy ở `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:
```nginx
[label /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 tin.

Kiểm tra cấu hình Logstash của bạn bằng lệnh này:
```command
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
```

Nếu không có lỗi cú pháp, đầu ra của bạn sẽ hiển thị `Config Validation Result: OK. Exiting Logstash` sau vài giây. Nếu bạn không thấy điều này trong đầu ra của mình, hãy kiểm tra xem có bất kỳ lỗi nào được ghi trong đầu ra của bạn không 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á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 quá trình kiểm tra cấu hình của bạn thành công, hãy bắt đầu và bật Logstash để các thay đổi cấu hình có hiệu lực:
```command
sudo systemctl start logstash
sudo systemctl enable logstash
```

Bây giờ Logstash đang chạy chính xác và được thiết lập cấu hình đầy đủ, hãy cài đặt Filebeat.

## Bước 4 - Cài đặt và thiết lập 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 Elaticsearch. Dưới đây là các Beat hiện có sẵn từ Elastic:

* Filebeat: thu thập và vận chuyển các tệp nhật ký.
* Metricbeat: thu thập số liệu từ các hệ thống và dịch vụ của bạn.
* Packetbeat: thu thập và phân tích dữ liệu mạng.
* Winlogbeat: thu thập nhật ký sự kiện Windows.
* Auditbeat: thu thập dữ liệu khung kiểm toán Linux và theo dõi tính toàn vẹn của tệp.
* Heartbeat: theo dõi các dịch vụ về tính khả dụng của chúng bằng tính năng thăm dò tích cực.

Trong hướng dẫn này, chúng tôi sẽ sử dụng Filebeat để chuyển tiếp các bản ghi cục bộ tới Elastic Stack của chúng tôi.

Cài đặt Filebeat bằng `apt`:
```command
sudo apt install filebeat
```

Tiếp theo, thiết lập cấu hình Filebeat để kết nối với Logstash. Ở đây, chúng tôi sẽ sửa đổi tệp cấu hình ví dụ đi kèm với Filebeat.

Mở tệp cấu hình Filebeat:
```command
sudo nano /etc/filebeat/filebeat.yml
```

<$>[note]
**Lưu ý:** Cũng như Elaticsearch, tệp cấu hình của Filebeat ở định dạng YAML. Điều này có nghĩa là việc thụt đầu dòng thích hợp là rất quan trọng, vì vậy hãy đảm bảo sử dụng cùng số lượng khoảng trắng được chỉ định trong các hướng dẫn này.
<$>

Filebeat hỗ trợ nhiều đầu ra, nhưng bạn thường chỉ gửi các sự kiện trực tiếp đến Elaticsearch hoặc Logstash để xử lý bổ sung. Trong hướng dẫn này, chúng tôi sẽ sử dụng Logstash để thực hiện xử lý bổ sung đối với dữ liệu do 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 Elaticsearch, vì vậy hãy vô hiệu hóa đầu ra đó. Để làm như vậy, hãy tìm phần `output.elasticsearch` và nhận xét các dòng sau bằng cách đặt trước chúng bằng dấu `#`:
```nginx
[label /etc/filebeat/filebeat.yml]
...
<^>#<^>output.elasticsearch:
  # Array of hosts to connect to.
  <^>#<^>hosts: ["localhost:9200"]
...
```

Sau đó, cấu hình phần `output.logstash`. Bỏ ghi chú các dòng `output.logstash:` và `hosts: ["localhost:5044"]` bằng cách xóa dấu `#`. Thao tác này sẽ thiết lập 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 cổng `5044`, cổng mà chúng tôi đã chỉ định đầu vào Logstash trước đó:
```nginx
[label /etc/filebeat/filebeat.yml]
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 mô-đun Filebeat. Trong hướng dẫn này, chúng ta sẽ sử dụng mô-đun hệ thống, thu thập và phân tích cú pháp nhật ký được tạo bởi dịch vụ ghi nhật ký hệ thống của các bản phân phối Linux phổ biến.

Hãy kích hoạt nó:
```command
sudo filebeat modules enable system
```

Bạn có thể xem danh sách các mô-đun đã bật và tắt bằng cách chạy:
```command
sudo filebeat modules list
```

Bạn sẽ thấy một danh sách tương tự như sau:
```
[secondary_label Output]
Enabled:
system

Disabled:
apache2
auditd
elasticsearch
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
traefik
...
```

Theo mặc định, Filebeat được thiết lập cấu hình để sử dụng các đường dẫn mặc định cho nhật ký hệ thống và nhật ký ủy quyền. Trong trường hợp của hướng dẫn này, bạn không cần thay đổi bất cứ điều gì trong cấu hình. Bạn có thể xem thông số của module trong file cấu hình `/etc/filebeat/modules.d/system.yml`.

Tiếp theo, chúng ta cần thiết lập các quy trình nhập dữ liệu Filebeat, phân tích dữ liệu nhật ký trước khi gửi nó qua logstash tới Elaticsearch. Để tải đường ống dẫn nhập cho mô-đun hệ thống, hãy nhập lệnh sau:
```command
sudo filebeat setup --pipelines --modules system
```

Tiếp theo, tải mẫu chỉ mục vào Elaticsearch. *Elasticsearch index* 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 để chỉ chỉ mục khi thực hiện các hoạt động khác nhau bên trong nó. Mẫu chỉ mục sẽ được tự động áp dụng khi một chỉ mục mới được tạo.

Để tải mẫu, sử dụng lệnh sau:
```command
sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
```

```
[secondary_label Output]
Index setup finished.
```

Filebeat đi kèm với bảng điều khiển Kibana mẫu cho phép bạn trực quan hóa dữ liệu Filebeat trong Kibana. Trước khi có thể sử dụng bảng thông tin, bạn cần tạo mẫu chỉ mục và tải bảng thông tin vào Kibana.

Khi bảng điều khiển tải, Filebeat kết nối với Elaticsearch để kiểm tra thông tin phiên bản. Để tải trang tổng quan khi bật Logstash, bạn cần tắt đầu ra Logstash và bật đầu ra Elaticsearch:
```command
sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601
```

Bạn sẽ nhận được đầu ra tương tự như sau:
```
[secondary_label 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ờ bạn có thể bắt đầu và kích hoạt Filebeat:
```command
sudo systemctl start filebeat
sudo systemctl enable filebeat
```

Nếu bạn đã thiết lập chính xác Elastic Stack của mình, Filebeat sẽ bắt đầu gửi nhật ký hệ thống và nhật ký ủy quyền của bạn tới Logstash, sau đó sẽ tải dữ liệu đó vào Elaticsearch.

Để xác minh rằng Elaticsearch thực sự đang nhận dữ liệu này, hãy truy vấn chỉ mục Filebeat bằng lệnh này:
```command
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
```

Bạn sẽ nhận được đầu ra tương tự như sau:
```
[secondary_label 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.7.1-2020.06.04",
        "_type" : "_doc",
        "_id" : "FiZLgXIB75I8Lxc9ewIH",
        "_score" : 1.0,
        "_source" : {
          "cloud" : {
            "provider" : "digitalocean",
            "instance" : {
              "id" : "194878454"
            },
            "region" : "nyc1"
          },
          "@timestamp" : "2020-06-04T21:45:03.995Z",
          "agent" : {
            "version" : "7.7.1",
            "type" : "filebeat",
            "ephemeral_id" : "cbcefb9a-8d15-4ce4-bad4-962a80371ec0",
            "hostname" : "june-ubuntu-20-04-elasticstack",
            "id" : "fbd5956f-12ab-4227-9782-f8f1a19b7f32"
          },


...
```

Nếu đầu ra của bạn hiển thị tổng số lần truy cập là 0, thì Elaticsearch không tải bất kỳ nhật ký 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 đầu ra như mong đợi, hãy tiếp tục sang bước tiếp theo, trong đó chúng ta sẽ xem cách điều hướng qua một số bảng điều khiển của Kibana.

## Bước 5 — Khám phá Bảng điều khiển Kibana

Hãy quay lại giao diện web Kibana mà chúng ta đã cài đặt trước đó.

Trong trình duyệt web, hãy truy cập FQDN hoặc địa chỉ IP công cộng của máy chủ Elastic Stack của bạn. Nếu phiên của bạn bị gián đoạn, bạn sẽ cần nhập lại thông tin đăng nhập mà bạn đã xác định ở Bước 2. Sau khi đăng nhập, bạn sẽ nhận được trang chủ Kibana:

![description image](https://media.cloudfly.vn/posts/kibana-home2004.png)

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 nhật ký trong 15 phút qua. Bạn sẽ thấy một biểu đồ với các sự kiện nhật ký và một số thông báo nhật ký bên dưới:

![description image](https://media.cloudfly.vn/posts/kibana-syslog-filebeat2004.jpg)

Tại đây, bạn có thể tìm kiếm và duyệt qua nhật ký của mình, đồng thời tùy chỉnh trang tổng quan của mình. Tuy nhiên, tại thời điểm này, sẽ không có nhiều thứ trong đó vì bạn chỉ đang thu thập các nhật ký 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 bảng điều khiển mẫu đi kèm với mô-đun `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 nhật ký hệ thống của mình:

![description image](https://media.cloudfly.vn/posts/syslogfilebeat2004.jpg)

Bạn cũng có thể xem người dùng nào đã sử dụng lệnh `sudo` và khi nào:

![description image](https://media.cloudfly.vn/posts/kibana-sudo-2004.jpg)

Kibana có nhiều tính năng khác, chẳng hạn như vẽ đồ thị và lọc, vì vậy hãy thoải mái khám phá.

## Kết luận

Trong hướng dẫn này, bạn đã học cách cài đặt và thiết lập cấu hình Elastic Stack để thu thập và phân tích nhật ký hệ thống. Hãy nhớ rằng bạn có thể gửi bất kỳ loại nhật ký hoặc dữ liệu được lập chỉ mục nào tới Logstash bằng Beats, nhưng dữ liệu thậm chí sẽ trở nên hữu ích hơn nếu được phân tích cú pháp và cấu trúc bằng bộ lọc Logstash, vì điều này chuyển đổi dữ liệu thành định dạng nhất quán có thể đọc được dễ dàng bởi Elaticsearch.
