kiến thức DevOps thực tế và chi tiết

elroydevops DevOps thực tế và chi tiết từ doanh nghiệp

Cách sử dụng ELK stack (latest version)

Đã khá lâu từ bài Sử dụng grafana để monitoring (tự động giám sát) mình đã chưa làm thêm bài viết về logs, monitoring, cũng may mắn và rất cảm ơn mọi người ủng hộ nên vô được top tìm kiếm google.

Vừa lúc nhà Elastic Stack 8.8.1 released mình làm bài viết cách sử dụng ELK stack một công cụ thu logs, monitoring vô cùng mạnh mẽ, mà dễ dùng.

Xem xong bài viết dưới đây bạn có thể hiểu và sử dụng ELK stack được ngay ứng dụng trong công việc của bạn.

Monitoring là bước thường được cho là sau cùng tuy nhiên có thể nói là một bước không thể thiếu.

Giúp bạn giảm thời gian đáng kể, nếu như bạn quản lý thủ công bằng cách truy cập vô từng tài nguyên để xem logs khi có lỗi.

Bài viết này mình sẽ cùng bạn tìm hiểu cài đặt và sử dụng ELK stack, một công cụ có thể nói là DevOps Engineer nào cũng biết vì tính dễ dùng, mạnh mẽ của nó.

ELK stack là gì?

Rất đơn giản thôi là viết tắt của 3 từ Elasticsearch, Logstash, Kibana và gộp lại thành một bộ công cụ dùng để thu thập, xử lý, hiển thị dữ liệu trực quan.

Vậy Elasticsearch, Logstash, Kibana ý nghĩa gì? Để làm gì?

Mình sẽ giải thích vô dùng đơn giản bạn có thể hiểu ngay sau đây.

Đôi khi chúng ta tìm hiểu trên mạng một định nghĩa dài ngoằng, cứng nhắc chưa chắc đã hiểu nó để làm gì.

Đơn giản thì, Elasticsearch là một hệ thống tìm kiếm và phân tích dữ liệu phân tán hay nói một cách dễ hiểu hơn nó là nơi để thực hiện những truy vấn từ dữ liệu mà bạn thu thập được

Phân tán đây là gì? chính là việc bạn có thể chia dữ liệu thành nhiều phân đoạn và lưu trữ trên nhiều máy chủ khác nhau. Điều này giúp cải thiện hiệu suất và khả năng mở rộng của hệ thống khi xử lý tìm kiếm và phân tích dữ liệu.

Tiếp theo, Logstash là một công cụ thể thu thập dữ liệu với rất nhiều định dạng khác nhau và xử lý chúng để làm sao dữ liệu “trông sạch sẽ hơn”.

Cuối cùng là, Kibana là một giao diện web để giúp trực quan hóa dữ liệu từ elasticsearch dưới dạng các biểu đồ, bảng, và các thành phần khác như hình ảnh, văn bản, hay nút điều khiển.

Bạn hãy xem mô hình dưới đây:

Vậy tóm lại là chúng ta có Logstash có thể thu thập, chuyển dữ liệu xử lý từ các nguồn khác nhau đến Elasticsearch để lưu trữ và tìm kiếm khi có dữ liệu rồi thì dùng Kibana để hiển thị dữ liệu trực quan hơn.

Thêm một chút về Logstash

  • Logstash có thể trực tiếp được cấu hình để thu thập từ file (.json .log .csv…)
  • Logstash có thể thu thập trực tiếp từ cơ sở dữ liệu (ví dụ tác động của người dùng vào database như select, insert,…)
  • Logstash có thể thu thập từ những định dạng beat gửi đến.

Vậy tiếp theo chúng ta tìm hiểu…

Beat là gì?

Bạn có thể hiểu đơn giản là công cụ để thu thập dữ liệu và hiện tại đang có một số loại beat chính sau:

  1. Filebeat: Filebeat là một Beat được sử dụng để thu thập và chuyển dữ liệu từ các tập tin log. Nó theo dõi các tập tin log và gửi các sự kiện log đến Logstash hoặc Elasticsearch để xử lý và lưu trữ.
  2. Metricbeat: Metricbeat được sử dụng để thu thập thông tin về các chỉ số hệ thống và dịch vụ từ các máy chủ và hệ thống. Nó có thể thu thập các chỉ số CPU, bộ nhớ, tải hệ thống, thông tin về dịch vụ như MySQL, Apache và nhiều hơn nữa. Metricbeat gửi các dữ liệu thu thập được đến Logstash hoặc Elasticsearch để phân tích và hiển thị.
  3. Packetbeat: Packetbeat là một Beat được sử dụng để thu thập thông tin về giao thức mạng từ dữ liệu gói tin. Nó có thể phân tích và hiểu được các giao thức như HTTP, DNS, ICMP, MySQL, PostgreSQL và nhiều giao thức khác. Packetbeat gửi dữ liệu thu thập được đến Logstash hoặc Elasticsearch để phân tích và xem xét chi tiết về hoạt động mạng.
  4. Auditbeat: Auditbeat là một Beat được sử dụng để thu thập các sự kiện hệ thống và log kiểm tra an ninh từ các hệ điều hành Linux. Nó có thể thu thập thông tin về hoạt động hệ thống như các sự kiện đăng nhập, thay đổi quyền truy cập file, các sự kiện quản lý quyền truy cập và nhiều hơn nữa. Auditbeat gửi dữ liệu thu thập được đến Logstash hoặc Elasticsearch để phân tích và giám sát an ninh hệ thống.
  5. Heartbeat: Heartbeat là một Beat được sử dụng để theo dõi sự hoạt động và sự sống còn của các dịch vụ và máy chủ. Nó có thể kiểm tra kết nối mạng, kiểm tra tính khả dụng của dịch vụ web và nhiều kiểm tra khác. Heartbeat gửi thông tin về trạng thái hoạt động đến Logstash hoặc Elasticsearch để giám sát và thông báo sự cố.

Trong bài viết đầu tiên về ELK stack này của mình mình sẽ hướng dẫn sử dụng Filebeat, Logstash, Elasticsearch, Kibana một bộ rất thịnh hành được sử dụng.

Sử dụng ELK stack như thế nào?

Mình có hình mô tả hạ tầng như dưới đây:

  • Server 1: có IP 10.32.3.150 sử dụng để chạy docker containers dự án và cài đặt filebeat để thu thập logs từ các containers.
  • Server 2: có IP 10.32.3.110 sử dụng để cài đặt ELK stack

Nếu bạn muốn cài đặt nhanh chóng các server chỉ chạy 1 câu lệnh bạn có thể xem Cách dùng Vagrant tạo máy ảo

Triển khai sử dụng ELK stack chi tiết

Đầu tiên trên server 2: chúng ta thực hiện cài ELK stack trước tức server 10.32.3.110

$ mkdir /home/ELK && cd /home/ELK tạo thư mục để làm việc ELK stack.

$ touch install-elk.sh && chmod +x install-elk.sh && vi install-elk.sh tạo file bash script cài đặt ELK với nội dung sau:

#!/bin/bash

# Cài đặt Java Development Kit (JDK)
apt update
apt install -y default-jdk

# Cài đặt Elasticsearch
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-8.x.list
apt update
apt install -y elasticsearch

# Cấu hình Elasticsearch
echo "network.host: 0.0.0.0" >> /etc/elasticsearch/elasticsearch.yml

# Khởi động Elasticsearch
systemctl enable elasticsearch
systemctl start elasticsearch

# Cài đặt Logstash
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-8.x.list
apt update
apt install -y logstash

# Cài đặt Kibana
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-8.x.list
apt update
apt install -y kibana

# Cấu hình Kibana để cho phép truy cập từ tất cả các nguồn
echo "server.host: 0.0.0.0" >> /etc/kibana/kibana.yml

# Khởi động Kibana
systemctl enable kibana
systemctl start kibana

# Reset mật khẩu elastic search và tạo token cho kibana
elastic_password=$(echo "y" | /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic | grep -o "New value: .*" | cut -d ' ' -f 3-)
kibana_token=$(/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana)

# Di chuyển và mở verification code
cd /usr/share/kibana && verification_code=$(bin/kibana-verification-code)

# Hiển thị thông tin đăng nhập
echo "Thông tin đăng nhập:"
echo "-------------------"
echo "Elasticsearch:"
echo "   Tài khoản: elastic"
echo "   Mật khẩu: $elastic_password"
echo ""
echo "Kibana:"
echo "   Token: $kibana_token"
echo ""
echo "Mã xác minh Kibana:"
echo "$verification_code"

$ ./install-elk.sh chạy file bash script để tự động cài đặt ELK

Lúc này bạn nên làm cốc cafe cho tỉnh táo vì quá trình này có thể mất vài phút, và sau đó sẽ được kết quả:

cài đặt ELK stack

Tiến hành truy cập: https://10.32.3.110:9200 để xem trạng thái của elasticsearch, nhập tài khoản mật khẩu elasticsearch ở trên:

Và được kết quả thành công cấu hình và cài đặt elastic search

Tiếp tục truy cập http://10.32.3.110:5601 cấu hình kibana, nhập token ở trên vào:

Tiếp tục nhập mã xác nhận ở trên vào:

Sau khi bạn nhập mã xác nhận, đợi một chút cho kibana khởi động

Vậy là chúng ta đã cài đặt thành công kibana kết nối bảo mật với elastic search

Tiếp theo chúng ta sẽ cấu hình logstash để nhận log từ Webserver như đã nói ở trên:

trong logstash chúng ta có 3 khối chính input, filter, output (tuy nhiên ở đây mình chỉ sử dụng 2 khối input và output cho dễ hiểu) filter bạn có thể hiểu là giúp chúng ta lọc dữ liệu thô.

$ vi /etc/logstash/conf.d/container-3150.conf tạo file cấu hình với nội dung sau:

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    index => "containers_3.150"
    hosts => ["10.32.3.110:9200"]
    user => "elastic"
    password => "WsD0RVA+Zdf53UDOYTL_"
    ssl => true
    ssl_certificate_verification => false #bạn có thể chuyển thành true và sử dụng /etc/elasticsearch/certs/http_ca.crt
  }
}

$ ufw allow 5044/tcp mở port để cho logstash sử dụng (bạn chú ý mở lại các port tương ứng cho elastic, kibana, ssh,.. nếu như không truy cập được nhé)

$ systemctl stop logstash && systemctl start logstash dừng và khởi động lại logstash

Tiếp theo chúng ta sẽ tiến hành setup trên server thứ nhất có IP là 10.32.3.150

Cài đặt và cấu hình filebeat để sử dụng ELK stack

$ touch install-filebeat.sh && chmod +x install-filebeat.sh && vi install-filebeat.sh tạo file bash script cài đặt filebeat có nội dung sau:

#!/bin/bash

# Cập nhật hệ thống
sudo apt update

# Cài đặt các gói cần thiết
sudo apt install -y apt-transport-https wget

# Tải xuống và cài đặt GPG key của Elastic
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

# Thêm kho lưu trữ Elastic vào danh sách nguồn
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

# Cập nhật hệ thống để áp dụng thay đổi mới
sudo apt update

# Cài đặt Filebeat
sudo apt install -y filebeat

# Sao chép file cấu hình mẫu
sudo cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.bak

# Bật dịch vụ Filebeat
sudo systemctl enable filebeat
sudo systemctl start filebeat

$ ./install-filebeat.sh chạy file cài đặt filebeat

Được kết quả cài đặt thành công

$ mv /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.bak lưu lại file cấu hình mặc định của filebeat (kiểu backup lại sau bạn có dùng thì dùng)

$ vi /etc/filebeat/filebeat.yml tạo file cấu hình filebeat mới với nội dung sau:

filebeat.inputs:
- type: log
  paths:
    - /var/lib/docker/containers/*/*-json.log # thu thập logs tất cả các container hiện có trên server

output.logstash:
  hosts: ["10.32.3.110:5044"]

Hãy đảm bảo server này của bạn đã cài docker và đang chạy container nào đấy để thu thập được đúng nhé (bước này mình không chi tiết thêm vì bạn sử dụng monitoring thì chắc đã rất quen với docker rồi).

$ filebeat test output test output filebeat như dưới đây là đã sẵn sàng gửi logs về logstash.

$ systemctl stop filebeat && systemctl start filebeat khởi động lại dịch vụ filebeat.

Tiến hành cấu hình sử dụ ng ELK với Kibana

Chọn Stack Management

Bạn đã thấy chúng ta đã có Index được tạo ra từ bước cấu hình logstash

Tiếp theo chúng ta sẽ tạo data view để xem dữ liệu từ index đó, chọn Discover -> Create data view

Nhập những thông tin dưới đây

Tạo data view thành công và chọn View all matches

Chúng ta được dữ liệu của logs dưới đây:

Bạn có thể xem dữ liệu cụ thể ở đây

sử dụng ELK stack

Bạn có thể lọc dữ liệu theo ngày giờ như bạn có thể thấy khi mình thao tác project chạy trên containers nên lượng logs cũng đã được ghi lại:

Vậy là trong bài viết này mình đã hướng dẫn xong cách cài đặt và sử dụng ELK stack trong những bài viết sau mình sẽ làm chi tiết hơn về dashboard, hình ảnh, bảng,… Nếu bạn muốn tìm hiểu về DevOps thì có thể theo dõi website của mình, mình luôn hướng tới sự chi tiết, đơn giản, Mình sẽ làm nhiều hướng dẫn hơn về các kỹ năng các tool khác để giúp bạn tối ưu được những tác vụ cũng như tiết kiệm những chi phí khi phát triển phần mềm. Thanks.

 

Mọi thắc mắc bạn có thể liên hệ:

Email: [email protected]

Leave a comment

Your email address will not be published. Required fields are marked *