Báo cáo tiểu luận tập trung tìm hiểu về chương trình Prometheus và Grafana. Prometheus là một chương trình giám sát mã nguồn mở cho việc theo dõi và cảnh báo về hệ thống và Grafana là một chương trình giao diện hóa các dữ liệu được gửi về từ nguồn. Prometheus sẽ thu thập các dữ liệu từ máy được giám sát, quản lý lưu trữ và hiển thị thông qua Grafana.
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
Trang 2BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
Trang 3TP Hồ Chí Minh, ngày … tháng … năm 2023
Trang 4BẢNG PHÂN CÔNG VIỆC LÀM VÀ MỨC ĐỘ HOÀN THÀNH
Họ và Tên MSSV Công việc thực hiện hoàn thành Mức độ
Trang 5MỤ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
Trang 64.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
Trang 77 KẾT LUẬN 45
Trang 81 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ểnthành một dự án độc lập từ năm 2016 sau khi tham gia vào tổ chứ CNCF (CloudNative 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ếtquả 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 QueryLanguage)
PromQL (Prometheus Query Language) là một dạng ngôn ngữ truy vấn chophé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 gianthự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 đầuvà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
Trang 9Mộ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ửicảnh báo đi
Về phần giao diện biểu đồ (đồ thị) thì Prometheus sử dụng mã nguồnGrafana để 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 : DockerImage, cài đặt từ source với Go và file chương trình chạy sẵn đã được biêndị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
Trang 101.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 servicediscovery 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 quá 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ựchiện các cảnh báo nếu thiết lập
3
Trang 11Hì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ệnviệc lấy dữ liệu từ Client thông qua điểm cuối HTTP (HTTP Endpoint), cácClient Library sẹ gửi các thông tin trạng thái hiện tại của các dữ liệu đếnmáy chủ
Trang 12 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áychủ 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ẽ đượcPrometheus lấy về theo một khoảng thời gian thiết lập thông qua các HTTPEndpoint
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ấuthờ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ỉ thuthậ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ụ đượcthiế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
Trang 13Số 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ặcgiả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, ngoài tính tổng giá trị yếu tố còn có thể tính toá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àngtheo 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ântích và tạo ra dashboard mô tả trực quan các metric cần thiết cho việc monitoringnhư CPU, RAM, disks, IO operations và các thông tin hiển thị khác
Trang 142 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
ST
T Tên thiết bị Hệ điều hành Tên dịch vụ được cài đặt
1 Máy ảo SV-Winds-2008-ad Windows Server2009
Active Directory Domain Services
DHCP Server
7
Trang 15Apache HTTP ServerSFTP (thay thế cho FTP)Linux Exporter
Trang 173 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 đốitượ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ácthô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 WebServer
Các thông số liên quan đến thiết bị được thu thập qua Node Exporter (thiếtlập trên máy Ubuntu Server 22.04.3) và Windows Exporter (thiết lập trênmáy Windows Server 2008 R2)
Trang 184 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)
Tải tập tin chứa chương
trình từ trang chủ
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-
amd64.tar.gzGiải nén tập tin tar vừa
tải tar xvzf prometheus-2.47.0.linux-amd64.tar.gz
Tạo 2 thư mục
/etc/prometheus và
/var/lib/prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
Di chuyển vào thư mục
Di chuyển các tập tin như
consoles và
sudo mv consoles/ console_libraries/
/etc/prometheus/
11
Trang 19console_libraries đến thư
mục /etc/prometheus
Kiểm tra chương trình
chạy bằng kiểm tra
[Service]
User=prometheusGroup=prometheusType=simple
Restart=on-failureRestartSec=5sExecStart=/usr/local/bin/prometheus \
Trang 20storage.tsdb.path /var/lib/prometheus/ \ web.console.templates=/etc/prometheus/consoles
\ web.console.libraries=/etc/prometheus/console_libraries \
web.listen-address=0.0.0.0:9090 \ web.enable-lifecycle \
log.level=info
[Install]
WantedBy=multi-user.targetKhởi động lại dịch vụ
systemctl daemon sudo systemctl daemon-reload
Trang 21Hình 3 Truy cập giao diện Dashboard của Promethesu bằng trình duyệt với
http://192.168.38.130:90909
Hình 4 Trang Target hiển thị các Client thực hiện việc giám sát, trường hợp này
là cài đặt trên chính prometheus để quản lý server giám sát bằng node exporter.
Trang 224.2 Cài đặt Node Exporter trên máy Prometheus
(192.168.38.130/24) :
Các thông tin cơ bản :
Quá trình cài đặt thực hiện trên máy Ubuntu Server 22.04.3(192.168.38.130/24)
Phiên bản của node exporter : v1.6.1
Hệ điều hành áp dụng : linux amd64
Loại file tải về : file nén tar
Tên chi tiết tập tin tải về : node_exporter-1.6.1.linux-amd64.tar.gz
Bảng quá trình cài đặt Node Exporter trên máy Prometheus :
Trang 23Description=Node ExporterWants=network-online.targetAfter=network-online.target
[Service]
User=node_exporterGroup=node_exporterType=simple
Restart=on-failureRestartSec=5sExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.targetKhởi động lại
dịch vụ
daemon-reload
sudo systemctl daemon-reloadKhởi chạy dịch
Trang 25Hình 6 Chuyển sang trang metrics sẽ thấy những thông số được thu thập dựa trên các thiết lập mặc định Dựa vào những thông số này có thể gửi về Prometheus và cũng có thể hiển thị trực quan bằng Grafana.
4.3 Cài đặt Grafana trên máy giám sát (192.168.38.130/24)
Các thông tin cơ bản :
Cài đặt thông qua apt (phiên bản cài đặt : 10.2.0)
Thực hiện trên máy giám sát : 192.168.38.130/24
Trang 26Thêm Grafana “Stable
Releases” repository :
[signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
Cài đặt grafana trên máy chủ sudo apt install grafana
Khởi động lại systemctl
daemon
sudo systemctl daemon-reload
Khởi động lại grafana server sudo systemctl start grafana-server
Truy cập web interface bằng
trình duyệt bất kì
http://192.168.38.130:3000
19
Trang 27Hình 7 Giám sát phần cứng máy Prometheus thực hiện thông qua Grafana
Trang 284.4 Cài đặt Node Exporter trên máy Web Server (192.168.38.135/24)
4.4.1 Cài đặt Node Exporter trên máy Web Server
Thông tin cơ bản :
Quá trình cài đặt thực hiện trên máy Ubuntu Server 22.04.3(192.168.38.135/24)
Phiên bản của node exporter : v1.6.1
Hệ điều hành áp dụng : linux amd64
Loại file tải về : file nén tar
Tên chi tiết tập tin tải về : node_exporter-1.6.1.linux-amd64.tar.gz
Trang 29Description=Node ExporterWants=network-online.targetAfter=network-online.target
[Service]
User=node_exporterGroup=node_exporterType=simple
Restart=on-failureRestartSec=5sExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.targetKhởi động lại
Trang 31Hình 9 Truy cập node_exporter trên máy Client.
4.4.2 Tích hợp Node Exporter lên máy Prometheus :
Thực hiện việc thêm một job, tức đối tượng cần lấy các metrics để hiển thị thôngqua HTTP Endpoint, bằng cách thêm vào tập tin config các thiết lập (tập tin configtại đường dẫn : /etc/prometheus/prometheus.yaml) :
- job_name: “web-server-remote”
scrape_interval: 10s
static_configs:
- targets: [“192.168.39.135:9100”]
Trang 32Hình 10 Thêm một client vào phần job, đặt ip là của máy Client Web Server.
25
Trang 33Hình 11 Kiểm tra trên Prometheus thì có hiển thị máy Client remote
Hình 12 Sử dụng Grafana để giám sát các thông tin trong máy Web Server.
Trang 344.5.1 Cài đặt apache_exporter trên máy Web Server :
Các thông tin cơ bản :
Mục đích : giám sát thông tin trạng thái của dịch vụ Apache HTTP Server
Tải từ trang : https://github.com/Lusitaniae/apache_exporter
Trang của apache_exporter : http://192.168.38.135:9117
Quá trình cài đặt (thực hiện sau khi tải apache_exporter từ trang github) :
Di chuyển tập tin vào /usr/local/bin sudo mv apache_exporter /usr/local/bin
Thêm user là apache_exporter sudo useradd -rs /bin/false apache_exporter
Thực hiện tạo tập tin
apache_exporter.service
sudo nano /etc/systemd/system/apache_exporter.s ervice
Tùy chỉnh nội dung trong tập tin
/etc/systemd/system/apache_exporter.s
ervice
# Nội dung tập tin File:
/etc/systemd/system/apache_exporter.service
[Unit]
Description=Apache ExporterWants=network-online.targetAfter=network-online.target
[Service]
User=apache_exporter
27