NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
11/06/2023
Lượt xem

Hướng dẫn cách cài đặt Prometheus bằng Docker trên CentOS 7

11/06/2023
16 phút đọc
Lượt xem

Đánh giá

5/5 - (118 bình chọn)

Prometheus là hệ thống giám sát mã nguồn mở và cơ sở dữ liệu chuỗi thời gian, với nhiều tính năng nổi bật như tạo và thu thập số liệu, vẽ biểu đồ dữ liệu hay cảnh báo các sự kiện bất thường. Trong hướng dẫn này, Vietnix sẽ hướng dẫn bạn cách cài đặt Prometheus bằng Docker trên CentOS 7.

Yêu cầu để cài đặt Prometheus bằng Docker trên CentOS 7

Để có thể thực hiện hướng dẫn này, cần có:

  • CentOS 7.1 Droplet.
  • User có quyền sudo.
  • Docker đã được cài đặt trên máy.

Lưu ý: Những hướng dẫn dưới đây đã được thử nghiệm trên máy có CPU/512 MB RAM chạy CentOS 7.1 Droplet. Bạn nên điều chỉnh cấu hình của Prometheus cho lượng tài nguyên khả dụng khác nhau, sẽ được đề cập cụ thể ở bước 2 trong bài hướng dẫn.

Cài đặt Docker trên VPS là một gợi ý hoàn hảo cho những ai muốn triển khai các ứng dụng trên môi trường ảo hóa. Đặc biệt, nó còn có thể giúp bạn quản lý và triển khai các ứng dụng một cách hiệu quả hơn. Vietnix hiện đang cung cấp dịch vụ VPS tốc độ cao với mức giá phải chăng, giúp bạn chủ động cài đặt và quản lý ứng dụng gồm: VPS NVMe, VPS Giá Rẻ, VPS Phổ Thông, VPS Cao Cấp và VPS GPU.

Nhanh tay liên hệ Vietnix để được tư vấn gói VPS phù hợp với nhu cầu phát triển ngay hôm nay.

Các bước cài đặt Prometheus bằng Docker trên CentOS 7

Docker cung cấp cho người dùng cách để “đóng gói” (encapsulate) các tiến trình của máy chủ bằng việc dùng bộ container Linux hoặc các công nghệ tương tự khác để dễ dàng quản lý và cách ly các quy trình. 

Trong hướng dẫn này, Vietnix sẽ hướng dẫn cài đặt ba thành phần chính để sử dụng Prometheus trên Docker gồm:

  • Server Prometheus để thu thập và truy vấn số liệu.
  • Node Exporter để xuất số liệu hệ thống theo một định dạng tương thích với Prometheus.
  • Grafana, một dashboard xây dựng giao diện dựa trên web hỗ trợ Prometheus, đồng thời cũng là một trong số các backend.

Bước 1 – Cài đặt Prometheus

Trước khi tiếp tục, hãy chắc chắn bạn đã cài đặt Docker trên mỗi máy chủ đúng cách để thực hiện các bước tiếp theo. Server Prometheus chính là phần trung tâm của hệ sinh thái Prometheus và chịu trách nhiệm cho việc thu thập và lưu trữ số liệu cũng như việc xử lý truy vấn biểu thức, tạo cảnh báo.

Image của Docker container cho mọi thành phần của Prometheus được nắm giữ, quản lý bởi tổ chức prom trên Docker Hub. Khởi chạy Image prom/prometheus không cần thêm bất kì tùy chọn khác sẽ khởi chạy server Prometheus với file cấu hình ở /etc/prometheus/prometheus.yml bên trong container.

Ngoài ra Docker còn sử dụng data volume Docker được mount trong /prometheus để lưu trữ dữ liệu metric (dạng số liệu). Thư mục (directory) của data volume này chính là mục nằm trên host được Docker tự động tạo khi container khởi động lần đầu. Dữ liệu bên trong đó vẫn được lưu trữ sau mỗi lần container restart lại.

Có rất nhiều cách để ghi đè file cấu hình mặc định. Chẳng hạn bạn có thể truyền một file cấu hình tùy chỉnh vào container từ filesystem host như một data volume. Hoặc bạn có thể chọn tạo một container Docker gốc với file cấu hình được đưa vào image container. Trong bài viết này, Vietnix sẽ hướng dẫn bạn cách truyền một file cấu hình từ host system.

Bên cạnh đó, ta cũng có nhiều cách khác nhau để tổ chức lưu trữ các số liệu. Ta sẽ sử dụng thiết lập mặc định của image Docker là dùng một data volume của Docker để lưu trữ các số liệu. Ngoài ra, bạn có thể tham khảo cách tạo container cho data volume tùy theo nhu cầu.

Đầu tiên, tạo một file cấu hình Prometheus tối thiểu trên host filesystem ở ~/promethues.yml:

nano ~/prometheus.yml

Thêm các nội dung sau vào file (Thay your_server_ip bằng IP của bạn):

~/prometheus.yml  # A scrape configuration scraping a Node Exporter and the Prometheus server  # itself.  scrape_configs:    # Scrape Prometheus itself every 5 seconds.    - job_name: 'prometheus'      scrape_interval: 5s      target_groups:        - targets: ['localhost:9090']    # Scrape the Node Exporter every 5 seconds.    - job_name: 'node'      scrape_interval: 5s      target_groups:        - targets: ['your_server_ip:9100']

Trong ví dụ này, cấu hình yêu cầu Prometheus sẽ gom (scrape) các số liệu từ chính nó (Vì Prometheus cũng hiển thị các metric về chính nó ở định dạng tương thích với Prometheus) cũng như từ Node Exporter. Do Prometheus có thể kết nối với chính nó trong container bằng tên localhost, Prometheus sẽ cần scrape Node Exporter bằng cách sử dụng địa chỉ IP server bên ngoài, vì Node Exporter sẽ chạy trong một container riêng với namespace mạng riêng.

Khởi động container Docker của Prometheus với file cấu hình ngoài:

docker run -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus -config.file=/etc/prometheus/prometheus.yml -storage.local.path=/prometheus -storage.local.memory-chunks=10000

Khi khởi chạy lệnh này lần đầu, Prometheus sẽ pull image của Docker từ Docker Hub. Đây là một lệnh khá dài và chứa rất nhiều dòng lệnh tùy chọn:

  • Option -d khởi động container của Prometheus ở chế độ tách rời, nghĩa là container sẽ chạy ở background và sẽ không bị kết thúc nếu dùng tổ hợp phím CTRL+C.
  • Option -p 9090:9090 hiển thị cổng web của Prometheus (9090) và cho phép truy cập vào cổng web thông qua địa chỉ IP bên ngoài của host system.
  • Option -v [...] mount file cấu hình prometheus.yml từ filesystem host vào vị trí bên trong container (/etc/prometheus/prometheus.yml).
  • Option -config.file được đặt tương ứng với vị trí của file cấu hình Prometheus bên trong container.
  • Option -storage.local.path cấu hình vị trí lưu trữ metric trong container.
  • Cuối cùng, option -storage.local.memory-chunks điều chỉnh mức sử dụng bộ nhớ của Prometheus với dung lượng RAM rất nhỏ của hệ thống host (chỉ 512MB) và số lượng nhỏ chuỗi thời gian lưu trữ trong hướng dẫn này (dưới 1000). Option này yêu cầu Prometheus chỉ giữ 10000 chunk mẫu trong bộ nhớ (khoảng 10 chunk mỗi chuỗi), thay vì giá trị mặc định là 1048576. Nếu máy bạn có nhiều RAM và cần lưu trữ nhiều chuỗi hơn thì bạn có thể tăng giá trị này lên mức tương ứng. Có thể liệt kê tất cả Docker container bằng lệnh dưới đây:
docker ps

Chẳng hạn, bạn sẽ thấy hiển thị tương tự dưới đây cho container Docker của Prometheus:

Output of `docker ps`  CONTAINER ID         IMAGE                        COMMAND                            CREATED             STATUS              PORTS                                   NAMES 6a89ac39911e        prom/prometheus      "/bin/prometheus -con"        2 hours ago         Up 2 hours         0.0.0.0:9090->9090/tcp       stoic_pike

Sử dụng ID của container trong output docker ps để kiểm tra log của server Prometheus đang hoạt động cách dùng lệnh:

docker logs container_id

Trong ví dụ này, dòng lệnh sẽ là:

docker logs 6a89ac39911e

Để xác định nơi mà phân vùng lưu trữ chứa số liệu trên filesystem của host được lưu trữ, dùng lệnh sau đây với container_id của bạn:

docker inspect container_id

Output sẽ hiển thị thông tin về cấu hình container bao gồm cả đường dẫn host của bất kỳ lượng Docker được mount kèm.

Tìm trong output phần hiển thị giống như sau:

Output of `docker inspect ...` ... "Mounts": [     {         "Source": "/home/vietnix/prometheus.yml",         "Destination": "/etc/prometheus/prometheus.yml",         "Mode": "",         "RW": true     },     {         "Name": "821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c",         "Source": "/var/lib/docker/volumes/821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c/_data",         "Destination": "/prometheus",         "Driver": "local",         "Mode": "",         "RW": true     } ], ...

Ở đây, metric được lưu trữ ở /var/lib/docker/volumes/821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c/_data trên hệ thống host. Directory này được tự động tạo bởi Docker khi lần đầu khởi chạy container của Prometheus. Directory chứa số liệu được ánh xạ vào directory /prometheus trong container. Dữ liệu trong đó được duy trì trong các lần restart của cùng một container. Nếu muốn, bạn cũng có thể mount một directory host sẵn có để lưu trữ dữ liệu về các thông số.

Tiếp theo, kết nối với sever Prometheus bằng địa chỉ IP của http://your_server_ip:9090/. Bạn có thể xác thực việc thu thập số liệu bằng cách điều hướng tới http://your_server_ip:9090/status và cố định endpoint của http://localhost:9090/metrics cho job prometheus trong phần Target. Cột State cho nên hiển thị trạng thái HEALTHY. Ngược lại, endpoint của http://localhost:9100/metrics (Node Exporter) nên hiển thị trạng thái UNHEALTHY vì Node Exporter vẫn chưa được khởi chạy nên không thể scrape số liệu.

Targets
Targets

Sau khi hoàn thành Bước 1, bạn đã có Prometheus hoạt động như container của Docker bằng cách sử dụng file cấu hình tùy chỉnh của Prometheus ~/prometheus.yml, nằm trên filesystem của host. Vùng lưu trữ số liệu nằm ở directory /prometheus trong container, được sao lưu trên host theo đường dẫn bởi lệnh docker inspect đã được nêu ở trên.

Bước 2 – Thiết lập Node Exporter

Node Exporter là một server hiển thị số liệu của Prometheus về máy host (node) đang chạy. Bao gồm cả số liệu về filesystem của máy, thiết bị mạng, lượng sử dụng truy cập, lượng sử dụng bộ nhớ,…

Lưu ý khởi chạy Node Exporter trên Docker sẽ có một số khó khăn vì mục đích chính của Node Exporter là hiển thị các số liệu về host mà đang chạy. Nếu khởi chạy trên Docker mà không có thêm tùy chọn, cụm không gian tài nguyên của Docker (như filesystem và các thiết bị mạng) sẽ khiến Node Exporter chỉ xuất số liệu về môi trường container chứ không phải môi trường host.

Do đó lời khuyên cho người dùng là nên chạy Node Exporter trực tiếp trên host system bên ngoài Docker. Tuy nhiên, nếu cần quản lý mọi tiến trình bằng cách sử dụng Docker thì có thể làm theo các bước sau để xuất metric host từ bên trong Docker.

Nhập lệnh dưới đây để khởi động Node Exporter trên cổng 9100 sử dụng Docker:

docker run -d -p 9100:9100 -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --net="host" prom/node-exporter -collector.procfs /host/proc -collector.sysfs /host/proc -collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

Các flag Docker và Node Exporter sau được sử dụng để cung cấp các giá trị tương đối hợp lý cho các metric của host:

  • Trên Linux, Node Exporter thu thập hầu hết số liệu từ filesystem /proc/sys. Những filesystem này được mount từ host vào container ở directory /host bằngflag -v của Docker.
  • Thông qua các flag -collector.procfs-collector.sysfs, ta đã yêu cầu Node Exporter tìm filesystem /proc/sys ở một vị trí không quy chuẩn (non-standard).
  • Để báo cáo số liệu của filesystem host cũng cần phải mount toàn bộ root (/) của filesystem vào trong container (ở /rootfs) bằng flag -v.
  • Sử dụng flag -collector.filesystem.ignored-mount-points của Node Exporter để bỏ qua các filesystem khác bên trong container mà không thuộc hệ thống host. Tùy chọn này lấy một biểu thức chính quy của các điểm mount để loại trừ khỏi các metric được báo cáo.
  • Sử dụng flag –net=host của Docker để đặt container vào cùng một stack mạng với host. Làm như vậy việc đọc các file như /proc/net/dev sẽ mang lại kết quả giống như trên host (chỉ đọc từ filesystem /proc được mount từ host là không đủ).

Nên biết rằng một vài số liệu vẫn sẽ khác so với khi Node Exporter chạy trực tiếp trên host. Cụ thể là những số liệu về việc sử dụng filesystem với tiền tố /rootfs trong giá trị của label mountpoint, vì ta đã mount filesystem root theo tiền tố này trong container.

Bên cạnh đó, ta cũng không thể đảm bảo rằng giải pháp này sẽ đáp ứng được tất cả tính năng của Node Exporter trong tương lai. Do đó hãy cần nhắc kĩ trước khi làm theo cách này.

Giờ thì server Prometheus có thể tự scrape Node Exporter. Điều hướng trang trạng thái của server Prometheus đến http://your_server_ip:9090/status và xác thực rằng trang đích http://your_server_ip:9100/metrics cho node job đang hiện ở trạng thái HEALTHY:

Trạng thái HEALTHY
Trạng thái HEALTHY

Bước 3 – Thiết lập Grafana

Grafana là trình tạo đồ họa dashboard dựa trên web hỗ trợ Prometheus như một backend cho việc truy vấn cho dữ liệu để tạo đồ thị.

Grafana lưu trữ metadata của dashboard (như dashboard nào còn hiện hữu, đồ thị nào nên được hiển thị) trong một database cấu hình được dựa trên SQL. Grafana hỗ trợ sử dụng local file-backed database SQLite 3 cũng như các server database bên ngoài như MySQL hay PostgreSQL.

Trong bài viết này, Vietnix sẽ hướng dẫn cách sử dụng một database SQLite3 dựa trên lượng dữ liệu của Docker.

Triển khai Grafana như một container Docker với mật khẩu admin mà bạn đặt (admin_password):

docker run -d -p 3000:3000 -e "GF_SECURITY_ADMIN_PASSWORD=admin_password" -v ~/grafana_db:/var/lib/grafana grafana/grafana

Dòng lệnh này sẽ bắt đầu việc tải Grafana image Docker từ Docker Hub và một volume Docker mới trong ~/grafana_db trên system host, và ở /var/lib/grafana trong filesystem container. Trong container, Grafana sẽ tự động tạo và khởi tạo database SQLite 3 ở var/lib/grafana/grafana.db.

Flag -e cho phép truyền vào các biến môi trường để xử lý việc triển khai bên trong container Docker. Tại đây, sử dụng flag -e để đặt biến môi trường GF_SECURITY_ADMIN_PASSWORD thành mật khẩu quản trị viên của dashboard mong muốn, ghi đè lên mật khẩu mặc định của admin. Các biến môi trường cũng có thể được dùng để ghi đè các cấu hình cài đặt khác của Grafana.

Để xác thực rằng Grafana đang hoạt động chính xác, điều hướng tới trang http://your_server_ip:3000/. Username của quản trị viên là admin và mật khẩu là mật khẩu bạn đã đặt khi khởi chạy container Docker trước đây.

Đăng nhập Grafana
Đăng nhập Grafana

Sau khi đăng nhập, màn hình chính của Grafana sẽ hiển thị: 

Giao diện chính Grafana
Giao diện chính Grafana

Vietnix với hơn 10 năm hoạt động đã đồng hành với hơn 50.000 khách hàng cá nhân và doanh nghiệp. Đến năm 2022 Vietnix vinh dự được nhận giải Thương hiệu Việt Nam xuất sắc nhất. Đồng thời, với tỷ lệ 97% khách hàng sau khi sử dụng dịch vụ tại Vietnix đã giới thiệu đến bạn bè, đồng nghiệp cũng là một minh chứng cho chất lượng dịch vụ luôn đáp ứng được mọi nhu cầu của khách hàng.

Nhanh tay đăng ký VPS NVMe ngay và trải nghiệm dịch vụ ổn định, tốc độ cao, hỗ trợ nhanh chóng với nhiều ưu đãi hấp dẫn nhất.

  • Đị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

Cuối cùng bạn đã có một server Prometheus, Node Exporter và Grafana đều sử dụng Docker. Dù trong bài viết này, tất cả chúng chỉ được cài đặt và hoạt động trên một máy, nhưng trong thực tế thì Node Exporter thường được sử dụng trên mọi máy được giám sát, nhiều server Prometheus và một server Grafana duy nhất để vẽ biểu đồ dữ liệu từ các server. Chúc bạn thành công.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG