Trong bài viết hướng dẫn về thu thập số liệu cơ sở hạ tầng với Packetbeat và ELK trên CentOS 7 này, Vietnix sẽ hướng dẫn bạn cách cấu hình và sử dụng Packetbeat với ELK stack để thu thập và trực quan hóa các số liệu cơ sở hạ tầng.
Giới thiệu PacketBeat và ELK
Packetbeat cho phép bạn theo dõi lưu lượng mạng thời gian thực cho các giao thức cấp ứng dụng như HTTP và MySQL cũng như DNS và các dịch vụ khác.
Để làm được điều này, bạn cấu hình các agent (được gọi là “shippers”) trên máy khách để nghe và phân tích lưu lượng mạng, ánh xạ các thông điệp thành các giao dịch. Sau đó, những shipper này tạo ra các bản ghi cho mỗi hành động và gửi đến Elasticsearch hoặc Logstash.
Khi có dữ liệu, bạn có thể dùng công cụ Kibana để tìm kiếm, phân tích và có cái nhìn tổng quan về dữ liệu. Từ đó, bạn có thể giám sát hệ thống một cách toàn diện, tìm ra các vấn đề nhanh chóng và giải quyết chúng dễ dàng.
Yêu cầu để thu thập số liệu cơ sở hạ tầng với Packetbeat và ELK trên CentOS 7
- Một máy chủ CentOS 7 có RAM 4GB được cấu hình với bộ cài đặt ELK Stack (Elasticsearch-Logstash-Kibana).
- Một máy chủ CentOS 7 với dung lượng RAM bất kỳ. Máy chủ này sẽ đóng vai trò như một client.
- Một tài khoản người dùng có quyền
sudo
ở mỗi máy chủ.
Bước 1: Tải template Packetbeat Index vào Elasticsearch
Trong bài viết sử dụng Packetbeat để gửi log đến Elasticsearch. Do đó, bạn cần tải template Packetbeat index. Template này cấu hình Elasticsearch phân tích các trường Packetbeat gửi đến.
Đầu tiên, bạn đăng nhập vào server ELK :
ssh vietnix@your_elk_server_ip
Sau khi đăng nhập, tải template Packetbeat index về thư mục home của bạn:
cd ~
curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json
Sau đó, bạn nhập lệnh sau đây để tải template:
curl -XPUT 'http://localhost:9200/_template/packetbeat' -d@packetbeat.template-es2x.json
Bạn sẽ thấy output này nếu template được tải thành công.
Output
{"acknowledged":true}
Khi server ELK của bạn đã sẵn sàng để nhận dữ liệu từ Packetbeat, hãy cài đặt shipper trên client server.
Bước 2: Cài đặt Packetbeat trên client server
Để cài đặt shipper Packetbeat, bạn cần phải lấy chứng chỉ SSL để thiết lập kết nối giữa client server và server ELK.
Hãy tìm địa chỉ IP client server của bạn. Sau đó, trên server ELK, sao chép chứng chỉ SSL sang client server của bạn bằng lệnh scp
:
scp /etc/pki/tls/certs/logstash-forwarder.crt vietnix@your_client_server_private_ip_address:/tmp
Tiếp theo, bạn đăng nhập vào client server của mình:
ssh vietnix@your_client_server_ip_address
Sau khi đăng nhập, bạn sao chép chứng chỉ SSL của server ELK vào thư mục /etc/pki/tls/certs
:
sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
Tiếp theo, bạn cần cài đặt Packetbeat. Trên client server, chạy lệnh sau để nhập khóa GPG công khai của Elasticsearch vào rpm:
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Tạo và chỉnh sửa một file repository mới cho Packetbeat:
sudo vi /etc/yum.repos.d/elastic-beats.repo
Thêm các dòng sau vào file:
[beats]
name=Elastic Beats Repository
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1
Sau đó, bạn lưu file và thoát khỏi trình soạn thảo.
Hãy nhập lệnh sau để cài đặt gói Packetbeat:
sudo yum update
sudo yum -y install packetbeat
Packetbeat đã được cài đặt nhưng bạn cần cấu hình để sử dụng công cụ này.
Bước 3: Cấu hình Packetbeat trên client
Packetbeat cần biết thông tin để ghi vào log và nơi gửi dữ liệu đến. Hãy cấu hình Packetbeat kết nối với Logstash trên server ELK và xác định loại lưu lượng mạng bạn muốn theo dõi. Bạn cần sửa đổi file cấu hình mặc định của Packetbeat để làm điều này.
Trên client, bạn hãy chỉnh sửa file cấu hình Packetbeat:
sudo vi /etc/packetbeat/packetbeat.yml
Lưu ý: File cấu hình của Packetbeat có định dạng YAML. Vì vậy, thụt đầu dòng rất quan trọng. Hãy sử dụng đúng số lượng khoảng trắng giống như các hướng dẫn trong bài.
Gần đầu của file, bạn sẽ thấy phần input
. Đây là nơi bạn có thể chỉ định những số liệu và thống kê nào sẽ được gửi đến server ELK. Trong bài viết sử dụng input mặc định nhưng bạn có thể thay đổi input phù hợp với nhu cầu của mình.
Chọn network interface để bắt gói tin. Trên Linux, Packetbeat hỗ trợ bắt tất cả các tin nhắn được gửi hoặc nhận bởi máy chủ mà Packetbeat được cài đặt. Sử dụng any
làm thiết bị:
# Select the network interfaces to sniff the data. You can use the "any"
# keyword to sniff on all connected interfaces.
interfaces:
device: any
Trong phần protocols
, bạn cấu hình ports mà Packetbeat có thể tìm thấy cho mỗi giao thức. Nếu bạn sử dụng ports không theo chuẩn thì hãy thêm chúng ở đây. Nếu không, các port mặc định cũng sẽ hoạt động tốt.
protocols:
dns:
ports: [53]
include_authorities: true
include_additionals: true
http:
ports: [80, 8080, 8081, 5000, 8002]
memcache:
ports: [11211]
mysql:
ports: [3306]
pgsql:
ports: [5432]
redis:
ports: [6379]
thrift:
ports: [9090]
mongodb:
ports: [27017]
Tiếp theo, bạn cần cho Packetbeat biết gửi dữ liệu đến đâu.
Dưới phần output
, tìm đến dòng bắt đầu bằng elasticsearch:
. Đó là phần output của Elasticsearch. Phần này không được sử dụng nên bạn hãy xóa hoặc chú thích toàn bộ cho đến khi đến dòng #logstash:
Bắt đầu xóa tại đây:
### Elasticsearch as output
elasticsearch:
# Array of hosts to connect to.
# Scheme and port can be left out and will be set to the default (http and 9200)
...
Tiếp tục xóa cho đến khi bạn tìm thấy dòng này:
### Logstash as output
Thay vì gửi dữ liệu đến Elasticsearch bạn sẽ gửi nó đến Logstash. Vì vậy, hãy tìm phần output của Logstash đã được chú thích được bắt đầu bằng #logstash:
. Bỏ chú thích dòng đó bằng cách xóa ký tự #
ở đầu dòng. Sau đó, bỏ chú thích dòng hosts: ["localhost:5044"]
và thay localhost
bằng địa chỉ IP riêng server ELK của bạn. Phần cấu hình sẽ trông như thế này:
### Logstash as output
logstash:
# The Logstash hosts
hosts: ["your_ELK_server_private_ip_address:5044"]
Cấu hình Packetbeat này kết nối đến Logstash trên server ELK của bạn trên cổng 5044
.
Tiếp theo, bạn hãy tìm phần tls
và xóa bỏ comment trước tls:
. Sau đó bỏ comment cho dòng lệnh chỉ định certificate_authorities
và thay đổi giá trị của dòng đó thành ["/etc/pki/tls/certs/logstash-forwarder.crt"]
:
tls:
# List of root certificates for HTTPS server verifications
certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
Cấu hình này sử dụng chứng chỉ mà bạn đã sao chép từ server ELK. Nếu thiếu chứng chỉ này, client sẽ không thể thiết lập kết nối.
Nếu bạn muốn kiểm tra lại file cấu hình của mình thì có thể so sánh với ví dụ này. Ví dụ này đã loại bỏ hầu hết các chú thích không cần thiết để cải thiện tính đọc hiểu.
############################# Sniffer #########################################
interfaces:
device: any
############################# Protocols #######################################
protocols:
dns:
ports: [53]
include_authorities: true
include_additionals: true
http:
ports: [80, 8080, 8081, 5000, 8002]
memcache:
ports: [11211]
mysql:
ports: [3306]
pgsql:
ports: [5432]
redis:
ports: [6379]
thrift:
ports: [9090]
mongodb:
ports: [27017]
############################# Output ##########################################
output:
### Logstash as output
logstash:
hosts: ["your_ELK_server_private_ip_address:5044"]
tls:
certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
############################# Logging #########################################
logging:
files:
rotateeverybytes: 10485760 # = 10MB
Sau khi đã kiểm tra cấu hình, lưu file và thoát khỏi trình chỉnh sửa văn bản.
Khởi động Packetbeat để áp dụng những thay đổi của bạn:
sudo systemctl start packetbeat
Cấu hình Packetbeat tự động khởi động khi máy chủ của bạn khởi động lại bằng lệnh sau đây:
sudo systemctl enable packetbeat
Lặp lại bước này cho bất kỳ máy chủ nào mà bạn muốn theo dõi.
Packetbeat sẽ lắng nghe lưu lượng mạng và gửi đến Logstash. Hãy kiểm tra xem công cụ có hoạt động tốt không ở bước tiếp theo.
Nếu bạn đang tìm kiếm một VPS đáng tin cậy để thực hiện thu thập các số liệu cơ sở hạ tầng với PacketBeat và ELK trên CentOS 7, dịch vụ VPS của Vietnix là một sự lựa chọn hàng đầu.
Với Vietnix, bạn sẽ có một nền tảng VPS mạnh mẽ và linh hoạt, đảm bảo đáp ứng được yêu cầu hiệu suất và tài nguyên của PacketBeat, ELK. Vietnix cung cấp các gói dịch vụ VPS đa dạng và có thể chủ động tùy chỉnh như VPS Giá Rẻ, VPS Cloud Server, VPS AMD, VPS NVMe với giá từ 89.000 VND/Tháng. Tùy theo nhu cầu của mình mà bạn có thể chọn gói VPS có dung lượng ổ cứng, CPU, RAM phù hợp.
Hệ điều hành CentOS 7 được hỗ trợ đầy đủ trên các gói VPS tại Vietnix, mang lại sự tương thích và ổn định cho việc triển khai PacketBeat và ELK. Các dịch vụ mạng cung cấp bởi Vietnix đảm bảo kết nối mạng ổn định và không giới hạn Data Transfer để thu thập và truyền dữ liệu mạng một cách hiệu quả.
Bên cạnh đó, yếu tố an toàn và bảo mật cũng được Vietnix chú trọng. Các gói VPS được hỗ trợ backup tự động giúp bảo vệ dữ liệu quan trọng của bạn an toàn trong quá trình thu thập và lưu trữ.
Giao diện quản lý dễ sử dụng và tính năng linh hoạt của Vietnix giúp bạn dễ dàng quản lý VPS của mình và mở rộng linh hoạt theo nhu cầu.
Liên hệ ngay với Vietnix để được tư vấn lựa chọn gói dịch vụ VPS phù hợp nhé.
Bước 4: Kiểm tra cài đặt Packetbeat
Packetbeat trên client server sẽ gửi log của lưu lượng mạng đến Logstash trên server ELK của bạn. Logstash sẽ tải dữ liệu Packetbeat vào Elasticsearch trong một date-stamped index có tên là packetbeat-YYYY.MM.DD
. Bạn hãy tạo một yêu cầu HTTP đơn giản trên client và tìm kiếm yêu cầu đó trong Elasticsearch trên máy chủ ELK để kiểm tra hoạt động này.
Trên client server của bạn, sử dụng curl
để tạo một yêu cầu đến http://www.elastic.co
.
curl http://www.elastic.co/ > /dev/null
Sau đó, trên máy chủ ELK, xác minh rằng Elasticsearch đang nhận dữ liệu bằng cách truy vấn Packetbeat index với lệnh dưới đây:
curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'
Bạn sẽ thấy một loạt output giống như thế này:
Output{
"hits" : {
"total" : 3,
"max_score" : 1.0,
"hits" : [ {
"_index" : "packetbeat-2016.11.13",
"_type" : "dns",
"_id" : "AVheUqX0CSBq6gd6x-Oj",
"_score" : 1.0,
"_source" : {
"direction" : "out",
"server" : "",
"responsetime" : 49,
"resource" : "www.elastic.co",
"dns" : {
"additionals_count" : 0,
"answers" : [ {
"class" : "IN",
"data" : "2406:da00:ff00::6b16:f086",
"name" : "www.elastic.co",
"ttl" : 59,
"type" : "AAAA"
}, {
"class" : "IN",
"data" : "2406:da00:ff00::b849:ab0e",
"name" : "www.elastic.co",
"ttl" : 59,
"type" : "AAAA"
}, {
"class" : "IN",
"data" : "2406:da00:ff00::ccec:d96c",
"name" : "www.elastic.co",
"ttl" : 59,
"type" : "AAAA"
} ],
"answers_count" : 3,
"authorities_count" : 0,
"flags" : {
"authoritative" : false,
"recursion_allowed" : true,
"recursion_desired" : true,
"truncated_response" : false
},
"id" : 26078,
"op_code" : "QUERY",
"question" : {
"class" : "IN",
"name" : "www.elastic.co",
"type" : "AAAA"
},
"response_code" : "NOERROR"
},
"method" : "QUERY",
"count" : 1,
"client_ip" : "your_client_server_ip",
"proc" : "",
"transport" : "udp",
"status" : "OK",
"ip" : "8.8.8.8",
"client_port" : 52505,
"client_server" : "",
"port" : 53,
"@timestamp" : "2016-11-13T15:33:43.500Z",
"type" : "dns",
"query" : "class IN, type AAAA, www.elastic.co",
"client_proc" : "",
"beat" : {
"hostname" : "your_client_server_hostname",
"name" : "your_client_server_hostname"
},
"bytes_in" : 32,
"bytes_out" : 116,
"@version" : "1",
"host" : "your_client_server_hostname",
"tags" : [ "beats_input_raw_event" ]
}
...
...
} ]
}
}
Nếu kết quả trả về là 0 total hits thì Elasticsearch đang không tải bất kỳ dữ liệu Packetbeat nào dưới index bạn đã tìm kiếm. Bạn nên thử lại sau một vài giây vì có thể mất một thời gian ngắn để nhận lại dữ liệu.
Nếu bạn vẫn không thấy kết quả sau khi đợi, hãy xem lại cài đặt của bạn để tìm lỗi. Hãy đảm bảo rằng bạn đã trỏ file cấu hình của Packetbeat vào chứng chỉ mà bạn chuyển sang vì nếu đường dẫn không chính xác sẽ báo lỗi.
Khi bạn nhận được output mong muốn, bạn có thể tiếp tục bước tiếp theo và tìm hiểu cách sử dụng Kibana để xem một số biểu đồ và đồ thị lưu lượng mạng của bạn.
Bước 5: Trực quan hóa dữ liệu với Kibana
Trong trình duyệt web, hãy truy cập vào tên miền hoặc địa chỉ IP công cộng của server ELK. Sau khi nhập thông tin đăng nhập của, bạn sẽ thấy trang Kibana Discover của mình.
Lưu ý: Bạn đã cấu hình thông tin đăng nhập này khi bạn cấu hình người dùng cho Kibana.
Nhấp vào tab Settings ở đầu trang. Chọn packetbeat-* từ menu Index Patterns ở phía bên trái giao diện và đặt làm default index:
Sau đó chọn tab Discover ở đầu trang để xem dữ liệu. Bạn sẽ thấy trang hiển thị như sau:
Từ đây, bạn có thể xem các mục Packetbeat khác nhau bằng cách lọc các trường đang có. Bạn có thể nhấp vào các trường này để thêm hoặc trực quan hóa dữ liệu bằng cách sử dụng các phép tổng hợp (count, sum, min, max, median,…).
Ngoài ra, Kibana còn cung cấp một loạt cách để xem dữ liệu dễ dàng mà bạn có thể sử dụng để phân tích dữ liệu. Nhấp vào tab Visualize ở đầu trang để liệt kê các visualization hoặc mở một visualization đã lưu.
Tiếp theo, hãy xem dashboard mẫu của Packetbeat mà bạn đã tải lên ở đầu bài viết này. Nhấp vào tab Dashboard ở đầu trang, sau đó nhấp vào biểu tượng Load Saved Dashboard ở phía bên phải màn hình. Bạn sẽ thấy một danh sách các bộ lọc Dashboard dưới dạng đề xuất được phân trang như hình:
Chọn Packetbeat-Dashboard từ danh sách các gợi ý. Vì bạn chỉ có vài yêu cầu web như document trong index nên dashboard sẽ No results found cho các giao dịch DB, Cache, RPC hoặc các kết quả khác.
Nhưng nếu bạn cuộn xuống, bạn sẽ thấy một loạt các số liệu thống kê đã được thu thập từ các client server mà bạn đã cài đặt trên Packetbeat.
Từ đây, bạn có thể tạo biểu đồ dữ liệu dựa trên các thông tin trong index. Ví dụ, bạn có thể tạo biểu đồ phân tích các truy vấn HTTP dựa trên thời gian phản hồi. Từ đó có thể phát hiện ra các phản hồi chậm từ các ứng dụng web. Bạn cũng có thể sử dụng các sub-aggregations để phân tích sâu hơn, tìm ra thời gian phản hồi cho từng code, tên miền được truy cập,…
Chính thức thành lập vào năm 2012, trải qua 11 năm hoạt động, Vietnix tự hào đã được sát cánh cùng chục ngàn khách hàng cá nhân và doanh nghiệp phát triển kinh doanh trên không gian Internet.
Với năng lực, kinh nghiệm và sự tận tâm đối với khách hàng, Vietnix đang ngày càng khẳng định vị thế dẫn đầu trong lĩnh vực cung cấp dịch vụ hosting và VPS tốc độ cao tại Việt Nam.
Do đó, nếu có nhu cầu thuê VPS để thực hiện các dự án, bạn có thể tham khảo các gói dịch vụ tại Vietnix.
- Với hơn 100.000 dịch vụ đã được kích hoạt tại Vietnix, chứng tỏ sự tin tưởng của đông đảo khách hàng.
- 97% khách hàng đánh giá 5 sao và giới thiệu dịch vụ sau khi sử dụng, chứng tỏ dịch vụ của Vietnix được đánh giá cao.
- Đạt được Giải thưởng Thương hiệu Việt Nam xuất sắc, khẳng định chất lượng và uy tín của dịch vụ.
Liên hệ ngay với Vietnix để trải nghiệm VPS tốc độ cao theo thông tin dưới đây.
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
Lời kết
Thực hiện theo hướng dẫn trong bài viết về cách thu thập số liệu cơ sở hạ tầng với Packetbeat và ELK trên CentOS 7 này, bạn có thể tập trung các số liệu hệ thống của mình bằng cách sử dụng Elaticsearch và Logstash. Đồng thời dễ dàng hiển thị chúng qua Kibana. Điều này giúp bạn nhanh chóng xem thông tin về hoạt động của máy chủ của mình. Sau đó, có thể xem xét các công cụ khác như Filebeat, Topbeat,… để nghiên cứu các nguồn dữ liệu khác. Nếu còn điều gì chưa rõ, hãy bình luận bên dưới để được hỗ trợ nhé.