BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP. HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
---------------------------
ĐỀ TÀI BÁO CÁO TIỂU LUẬN
NGHIÊN CỨU VÀ TRIỂN KHAI GIÁM SÁT MẠNG
VỚI PROMETHEUS VÀ GRAFANA
Nhóm thực hiện: N04 GVHD: ThS Trần Đắc
Tốt
TP. Hồ Chí Minh, ngày … tháng … năm 2023
BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP. HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
---------------------------
ĐỀ TÀI BÁO CÁO TIỂU LUẬN
NGHIÊN CỨU VÀ TRIỂN KHAI GIÁM SÁT MẠNG
VỚI PROMETHEUS VÀ GRAFANA
Nhóm thực hiện: N04 GVHD: ThS Trần Đắc
Tốt
TP. Hồ Chí Minh, ngày … tháng … năm 2023
BẢNG PHÂN CƠNG VIỆC LÀM VÀ MỨC ĐỘ HỒN THÀNH
Họ và Tên MSSV Công việc thực hiện Mức độ
hoàn thành
MỤC LỤC
1. GIỚI THIỆU VẤN ĐỀ..........................................................................................................1
1.1. Giới thiệu về Prometheus..........................................................................1
1.2. Các tính năng của Prometheus...................................................................3
1.3. Kiến trúc của Prometheus :........................................................................3
1.3.1. Quá trình hoạt động của Prometheus :................................................3
1.3.2. Các thành phần trong mô hình của Prometheus :................................4
1.4. Các dạng dữ liệu (metrics) trên Prometheus :............................................5
1.5. Giới thiệu về Gafana..................................................................................6
2. MƠ HÌNH THỬ NGHIỆM...................................................................................................7
2.1. Mơ hình thực nghiệm :...............................................................................7
2.2. Danh sách các thiết bị và dịch vụ thiết lập :..............................................7
3. KỊCH BẢN THỬ NGHIỆM...............................................................................................10
4. CÁC BƯỚC THỰC HIỆN..................................................................................................11
4.1. Triển khai cài đặt Prometheus (192.168.38.130/24) :.............................11
4.2. Cài đặt Node Exporter trên máy Prometheus (192.168.38.130/24) :......15
4.3. Cài đặt Grafana trên máy giám sát (192.168.38.130/24).........................19
4.4. Cài đặt Node Exporter trên máy Web Server (192.168.38.135/24)........22
4.4.1. Cài đặt Node Exporter trên máy Web Server....................................22
4.4.2. Tích hợp Node Exporter lên máy Prometheus :................................26
4.5. Cài đặt Apache Exporter trên máy Web Server (192.168.38.135/24).....28
4.5.1. Cài đặt apache_exporter trên máy Web Server :...............................28
4.5.2. Thêm đối tượng apache_exporter vào Prometheus :.........................30
4.5.3. Thêm Dashboard cho đối tượng apache_exporter :...........................31
4.6. Cài đặt Windows_Exporter trên máy windows Server 2008 R2
(192.168.38.136/24)............................................................................................34
4.7. Tích hợp đối tượng giám sát vào Prometheus :.......................................35
4.8. Cài đặt Dashboard cho windows_exporter trên Grafana :.......................36
5. KẾT QUẢ.............................................................................................................................38
5.1. Thực hiện giám sát máy Web Server thông qua node_exporter :............38
5.2. Thực hiện giám sát lưu lượng mạng bằng speedtest :..............................40
5.3. Thực hiện giám sát tình trạng dịch vụ Apache trên Web Server :...........41
5.4. Thực hiện giám sát máy Windows Server 2008 :....................................42
6. NHẬN XÉT..........................................................................................................................43
6.1. Ưu và nhược điểm của Grafana :.............................................................43
6.2. Ưu và nhược điểm của Prometheus.........................................................44
7. KẾT LUẬN...........................................................................................................................45
1. GIỚI THIỆU VẤN ĐỀ
1.1. Giới thiệu về Prometheus
Prometheus là một dịch vụ mã nguồn mở sử dụng cho việc theo dõi và cảnh báo về
hệ thống.
Xây dựng từ năm 2012 cho dự án SoundCloud nhưng được tách ra và phát triển
thành một dự án độc lập từ năm 2016 sau khi tham gia vào tổ chứ CNCF (Cloud
Native Computing Foundation).
Tính năng thu thập thông số (metric), dữ liệu từ các dịch vụ được gán thêm yếu tố
về thời gian nhất định được thiết lập, đánh giá các biểu hức quy tắc, hiển thị kết
quả và có thể kích hoạt cảnh báo nếu các điều kiện được thỏa mãn yêu cầu.
Được lập trình dựa trên ngôn ngữ Golang được thành lập bởi Google và cung cấp
cơ chế truy vấn dữ liệu sử dụng PromQL (viết tắt của Prometheus Query
Language)
PromQL (Prometheus Query Language) là một dạng ngôn ngữ truy vấn cho
phép người dùng chọn và tổng hợp các dữ liệu chuỗi thòi gian theo thời gian
thực (real time).
Kết quả được hiển thị dưới dạng biểu độ, dữ liệu dạng bảng hay dữ liệu đầu
vào cho chương trình khác thơng qua HTTP API
Ví dụ : http_requests_total{job="apiserver", handler="/api/comments"}. Ý
nghĩa : thực hiện việc truy vấn dạng dữ liệu chuỗi thời gian
“http_requests_total” với các yếu tố đặc trưng như “job” và “handler”.
1
Một số thông tin khác về Prometheus :
Phần lớn các core tính năng của Prometheus được viết bằng ngôn ngữ Go.
Một số cịn lại thì được viết bằng Java, Python hoặc Ruby.
Prometheus không dùng để lấy dữ liệu log, thay vì vậy thì Prometheus là
dịch vụ giám sát, thu thập và xử lý dữ liệu dạng metric (thông số).
Prometheus sử dụng cơ chế đi lấy (pull) dữ liệu từ máy chủ remote là chính,
chứ không sử dụng cơ chế đợi remote đẩy (push) dữ liệu lên ngoại trừ
trường hợp sử dụng PushGateway.
Prometheus sử dụng chương trình cảnh báo Alertmanager để xử lý và gửi
cảnh báo đi.
Về phần giao diện biểu đồ (đồ thị) thì Prometheus sử dụng mã nguồn
Grafana để tích hợp hiển thị.
Metric của Prometheus sử dụng chuẩn OpenMetrics.
Prometheus hỗ trợ 3 hình thức cài đặt các thành phần hệ thống gồm : Docker
Image, cài đặt từ source với Go và file chương trình chạy sẵn đã được biên
dịch sẵn.
Một số thuật ngữ trong quá trình làm việc của Prometheus :
Time-series Data: là một chuỗi các điểm dữ liệu, thường bao gồm các phép
đo liên tiếp được thực hiện từ cùng một nguồn trong một khoảng thời gian.
Endpoint: nguồn dữ liệu của các chỉ số (metric) mà Prometheus sẽ đi lấy
thông tin.
Instance: một instance là một nhãn (label) dùng để định danh duy nhất cho
một target trong một job.
Và nhiều thuật ngữ khác.
2
1.2. Các tính năng của Prometheus
Một số tính năng chính của Prometheus :
Mơ hình dữ liệu đa chiều – time series được xác định bởi tên của số liệu
(metric) và các cặp khóa – giá trị (key/value).
Ngôn ngữ truy vấn linh hoạt.
Hỗ trợ nhiều chế độ biểu đồ.
Nhiều chương trình tích hợp và hỗ trợ bởi bên thứ 3.
Hoạt động cảnh báo vấn đề linh động dễ cấu hình.
Chỉ cần 1 máy chủ là có thể hoạt động được.
Hỗ trợ Push các time series thông qua một gateway trung gian.
Các máy chủ/thiết bị giám sát có thể được phát hiện thông qua service
discovery hoặc cấu hình tĩnh.
1.3. Kiến trúc của Prometheus :
1.3.1. Quá trình hoạt động của Prometheus :
Quá trình hoạt động của Prometheus :
Thực hiện q trình lấy các thơng số/số liệu (metric) từ các job được chỉ
định qua kênh trực tiếp hoặc thông qua dịch vụ Pushgateway trung gian.
Sau đấy Prometheus sẽ lưu trữ các dữ liệu thu thập được ở local máy chủ.
Thực thi các rule để xử lý các dữ liệu theo nhu cầu cũng như kiểm tra thực
hiện các cảnh báo nếu thiết lập.
3
Hình 1. Kiến trúc của Prometheus.
1.3.2. Các thành phần trong mơ hình của Prometheus :
Các thành phần chính trong mơ hình của Prometheus :
Prometheus Server (máy chủ Prometheus) : vai trò trung tâm, lấy và lưu trữ
các dạng chuỗi dữ liệu thời gian (còn gọi là time-series).
Client Library (thư viện tại máy khách) : các thư viện về ngơn ngữ lập trình
được cung cấp trong việc khai thác các dữ liệu. Khi Prometheus thực hiện
việc lấy dữ liệu từ Client thông qua điểm cuối HTTP (HTTP Endpoint), các
Client Library sẹ gửi các thông tin trạng thái hiện tại của các dữ liệu đến
máy chủ.
4
Push Gateway Prometheus : sử dụng cho các job có thời gian thực hiện ngắn
(mang tính tạm thời), cơ bản vì các dạng dữ liệu khơng tồn tại đủ lâu để máy
chủ lấy về nên cần phải thông qua một kênh để lấy trực tiếp.
Các dạng Exporter : hiểu như các Agent được cài đặt trên các Client để thu
thập các thông tin dữ liệu liên quan đến đối tượng cần giám sát và sẽ được
Prometheus lấy về theo một khoảng thời gian thiết lập thông qua các HTTP
Endpoint.
Alert Manger : dịch vụ quản lý, xử lý các cảnh báo (alert).
1.4. Các dạng dữ liệu (metrics) trên Prometheus :
Tổng quan về Time Series Database (TSDB) :
Là cơ sở dữ liệu được tối ưu hóa cho dữ liệu chuỗi thời gian hoặc có dấu
thời gian .
Được xây dựng đặc biệt để xử lý các số liệu và sự kiện hoặc phép đo được
đóng dấu thời gian.
TSDB được tối ưu hóa để đo lường sự thay đổi theo thời gian .
Metrics là một số liệu được đo tại một thời điểm trong hệ thống :
Đơn vị đo có thể là giá trị, móc thời gian và định danh về một đối tượng cụ
thể.
Các dữ liệu thì thu thập bất cứ khi nào xuất hiện nhưng số liệu thì chỉ thu
thập được trong khoảng thời gian ngắn.
Ví dụ : dữ liệu probe_process thể hiện tình trạng hoạt động của dịch vụ được
thiết lập luôn có thể thu thập tại bất kì thời điểm nào nhưng số liệu (ví dụ :
probe_process = 1 hoặc 0) thì chỉ thu thập khi trạng thái dịch vụ là 1 hoặc 0.
5
Số liệu (Metrics) được thể hiện trên Prometheus thông qua 4 dạng :
Counter : là số liệu đại diện cho bộ đếm, có giá trị tăng hoặc trở về 0 khi
được khởi động lại, thường không sử dụng để đếm cho các giá trị có thể
giảm.
Gauge : là số liệu đại diện cho một giá trị số duy nhất, có thể tăng hoặc
giảm.
Histogram : đếm các giá trị theo các tiêu chí được thiết lập, cung cấp cơ chế
tính tổng các giá trị theo tiêu chí ấy.
Summary : tương tự như histogram, các giá trị thường là thời lượng yêu cầu
và kích thước phản hồi, ngồi tính tổng giá trị yếu tố cịn có thể tính tốc các
đới tượng thông qua một dạng cửa sổ trượt (sliding time window).
1.5. Giới thiệu về Gafana
Grafana là một vizualizer hiển thị các metric dưới dạng các biểu đồ (chart) hoặc đồ
thị (graph), được tập hợp lại thành dashboard có tính tùy biến cao, giúp dễ dàng
theo dõi tình trạng của node.
Sau khi thu thập được các Metrics từ thiết bị, grafana sẽ sử dụng metric đó để phân
tích và tạo ra dashboard mô tả trực quan các metric cần thiết cho việc monitoring
như CPU, RAM, disks, IO operations và các thông tin hiển thị khác.
6
2. MƠ HÌNH THỬ NGHIỆM
2.1. Mơ hình thực nghiệm :
Hình 2. Mơ hình thực nghiệm cho bài thực hành triển khai giám sát bằng
Prometheus và Grafana
2.2. Danh sách các thiết bị và dịch vụ thiết lập :
Danh sách các thiết bị và dịch vụ thiết lập.
STT Tên thiết bị Hệ điều hành Tên dịch vụ được cài đặt
Active Directory Domain
1 Máy ảo SV-Winds-2008- Windows Server ad 2009 Services
DHCP Server
7
DNS Server
Web Server IIS
IP 192.168.38.13 6
Subnet File and Storage Services
Mask
255.255.255.0
GW 192.168.38.2 Windows Exporter
2 Máy ảo SV-Ubu-22.04.3- web Apache HTTP Server
SFTP (thay thế cho FTP)
Linux Exporter
IP 5 192.168.38.13 22.04.3 Ubuntu Server SSH
Subnet 255.255.255.0
Mask
Gateway 192.168.38.2
3 Máy ảo SV-Ubu- Prometheus Prometheus + Grafana
IP 192.168.38.13 SSH
Address 0 Ubuntu Server
Subnet 255.255.255.0 22.04.3
Mask
Gateway 192.168.38.2
8
9
3. KỊCH BẢN THỬ NGHIỆM
Các nội dung thực hiện trong bài thực nghiệm :
Thực hiện thiết lập các thiết bị trong mơ hình (cài đặt máy ảo và các dịch vụ
cần thiết).
Thiết lập máy giám sát Prometheus và Grafana.
Thiết lập các Exporter trên các Client để thực hiện việc giám sát các đối
tượng
Kiểm tra các nội dung giám sát được trên Prometheus và Grafana
Prometheus thực hiện giám sát các đối tượng được để cập đến trong bài :
Các thông số về phần cứng như : CPU, Memery, lưu lượng mạng và các
thông số khác
Thông tin về trạng thái của dịch vụ Apache được cài đặt trên máy Web
Server.
Các thông số liên quan đến thiết bị được thu thập qua Node Exporter (thiết
lập trên máy Ubuntu Server 22.04.3) và Windows Exporter (thiết lập trên
máy Windows Server 2008 R2)
10
4. CÁC BƯỚC THỰC HIỆN
4.1. Triển khai cài đặt Prometheus (192.168.38.130/24) :
Quá trình thực hiện trên máy Ubuntu Server 22.04.3 (192.168.38.130/24)
CÀI ĐẶT PROMETHEUS TRÊN UBUNTU SERVER 22.04.3
(192.168.38.130/24)
Nội dung thực hiện Câu lệnh cài đặt
Tải tập tin chứa chương wget
trình từ trang chủ /> ownload/v2.47.0/prometheus-2.47.0.linux-
amd64.tar.gz
Giải nén tập tin .tar vừa tar xvzf prometheus-2.47.0.linux-amd64.tar.gz
tải
Tạo 2 thư mục sudo mkdir /etc/prometheus /var/lib/prometheus
/etc/prometheus và
/var/lib/prometheus
Di chuyển vào thư mục cd prometheus-2.47.0.linux-amd64/
prometheus-2.47.0.linux-
amd64
Di chuyển tập tin sudo mv prometheus promtool /usr/local/bin/
prometheus và promtool
đến thư mục
/usr/local/bin/
Di chuyển tập tin sudo mv prometheus.yml
prometheus.yml (YAML /etc/prometheus/prometheus.yml
configuration) đến thư
mục /etc/prometheus
Di chuyển các tập tin như sudo mv consoles/ console_libraries/
consoles và /etc/prometheus/
11
console_libraries đến thư prometheus --version
mục /etc/prometheus
sudo useradd -rs /bin/false prometheus
Kiểm tra chương trình
chạy bằng kiểm tra sudo chown -R prometheus: /etc/prometheus /var/lib/
version prometheus
Tạo User là prometheus sudo nano /etc/systemd/system/prometheus.service
[Unit]
Chuyển các quyền sở Description=Prometheus
hữu hai thư mục Wants=network-online.target
/etc/prometheus và After=network-online.target
/var/lib/prometheus cho
user promethesu
Tạo prometheus.service
Chèn nội dung vào tập
tin prometheus.service
/etc/systemd/system/
prometheus.service
(đường dẫn)
[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
12
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles
\
--web.console.libraries=/etc/prometheus/console_libr
aries \
--web.listen-address=0.0.0.0:9090 \
--web.enable-lifecycle \
--log.level=info
Khởi động lại dịch vụ [Install]
systemctl daemon WantedBy=multi-user.target
sudo systemctl daemon-reload
Khởi động dịch vụ
prometheus : sudo systemctl start prometheus
Truy cập dịch vụ bằng http://192.168.38.130:9090
trình duyệt web
13