Thứ sáu, 15/01/2016 | 00:00 GMT+7

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

Prometheus là một hệ thống giám sát open-souce và database chuỗi thời gian. Nó đề cập đến nhiều khía cạnh của việc giám sát như tạo và thu thập số liệu, vẽ biểu đồ dữ liệu kết quả trên trang tổng quan và cảnh báo về sự bất thường. Để làm điều này, nó cung cấp nhiều thành phần khác nhau được chạy riêng biệt nhưng được sử dụng kết hợp.

Một bài báo từ người đồng sáng tạo Prometheus Julius Volz

Docker cung cấp một cách để bạn đóng gói các quy trình server bằng cách sử dụng containers Linux (hoặc các công nghệ đóng gói khác) để chúng dễ dàng được quản lý và cách ly với nhau. Để tìm hiểu thêm về Docker, hãy xem Hệ sinh thái Docker: Giới thiệu về các thành phần chung .

Trong hướng dẫn này, ta sẽ tìm hiểu cách cài đặt ba thành phần chính để sử dụng Prometheus trên Docker. Đó là:

  • Server Prometheus để thu thập các chỉ số và truy vấn chúng
  • Trình xuất khẩu nút để xuất các chỉ số hệ thống ở định dạng tương thích với Prometheus
  • Grafana, một trình tạo console đồ họa dựa trên web hỗ trợ Prometheus trong số các backend khác

Có nhiều thành phần khác trong hệ sinh thái Prometheus, nhưng ba thành phần này cung cấp một điểm khởi đầu tốt để sử dụng Prometheus.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

Lưu ý: Bài viết này đã được thử nghiệm trên 1 CPU / 512 MB RAM CentOS 7.1 Server. Cấu hình Prometheus nên được điều chỉnh cho các lượng tài nguyên có sẵn khác nhau như đã nêu trong Bước 2 của bài viết này.

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

Phần này sẽ giải thích cách cài đặt server Prometheus chính bằng Docker. Đảm bảo cài đặt Docker theo phần Yêu cầu trước khi tiếp tục. Server Prometheus là phần trung tâm của hệ sinh thái Prometheus và chịu trách nhiệm thu thập và lưu trữ các số liệu cũng như xử lý các truy vấn biểu thức và tạo cảnh báo.

Containers images Docker cho tất cả các thành phần Prometheus được lưu trữ trong tổ chức vũ hội trên Docker Hub. Việc chạy hình ảnh prom/prometheus Docker mà không có bất kỳ tùy chọn nào khác sẽ khởi động server Prometheus với file cấu hình mẫu nằm tại /etc/prometheus/prometheus.yml bên trong containers . Nó cũng sử dụng một data volumes Docker được gắn tại /prometheus bên trong containers để lưu trữ dữ liệu số liệu đã thu thập. Thư mục data volumes này thực sự là một folder trên server lưu trữ mà Docker tự động tạo khi containers được khởi động lần đầu tiên. Dữ liệu bên trong nó vẫn tồn tại giữa các lần khởi động lại cùng một containers .

Có nhiều cách để overrides file cấu hình mặc định. Ví dụ: một file cấu hình tùy chỉnh có thể được chuyển vào containers từ hệ thống file server lưu trữ dưới dạng data volumes Docker hoặc bạn có thể chọn tạo một containers Docker dẫn xuất với file cấu hình của bạn được đưa vào containers images . Trong hướng dẫn này, ta sẽ chọn chuyển file cấu hình từ hệ thống server .

Có nhiều mẫu khác nhau để tổ chức lưu trữ các chỉ số. Trong hướng dẫn này, ta sẽ sử dụng hành vi mặc định của Docker image là sử dụng data volumes Docker để lưu trữ các số liệu.Ngoài ra, bạn có thể cân nhắc việc tạo containers data volumes nếu điều đó phù hợp hơn với nhu cầu của bạn.

Lưu ý: Để tìm hiểu cách tạo khối dữ liệu Docker, hãy đọc Cách làm việc với khối dữ liệu Docker trên Ubuntu 14.04 (các phần liên quan của bài viết này không dành riêng cho Ubuntu).

Đầu tiên, tạo một file cấu hình Prometheus tối thiểu trên hệ thống file server tại ~/prometheus.yml :

  • nano ~/prometheus.yml

Thêm các nội dung sau vào file (thay your_server_ip bằng địa chỉ IP của Server):

~ / 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'] 

Cấu hình ví dụ này làm cho Prometheus loại bỏ các chỉ số từ chính nó (vì Prometheus cũng hiển thị các chỉ số về chính nó ở định dạng tương thích với Prometheus) cũng như từ Node Exporter mà ta sẽ cài đặt sau. Mặc dù Prometheus có thể kết nối với chính nó bên trong containers của nó bằng cách sử dụng tên server localhost , nhưng nó cần phải loại bỏ Node Exporter bằng IP bên ngoài của server của bạn vì Node Exporter sẽ chạy trong một containers riêng biệt với không gian tên mạng riêng.

Khởi động containers Prometheus Docker với file cấu hình bên 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

Lần đầu tiên bạn chạy lệnh này, nó sẽ kéo Docker image từ Docker Hub.

Lệnh này khá dài và chứa nhiều tùy chọn dòng lệnh. Ta hãy xem xét nó một cách chi tiết hơn:

  • Tùy chọn -d khởi động containers Prometheus ở chế độ tách rời, nghĩa là containers sẽ được khởi động ở chế độ nền và sẽ không bị kết thúc bằng cách nhấn CTRL+C
  • Tùy chọn -p 9090:9090 cho thấy cổng web của Prometheus (9090) và làm cho nó có thể truy cập được thông qua địa chỉ IP bên ngoài của hệ thống server .
  • Tùy chọn -v [...] gắn file cấu hình prometheus.yml từ hệ thống file server vào vị trí bên trong containers mà Prometheus mong đợi nó ( /etc/prometheus/prometheus.yml ).
  • Tùy chọn -config.file được đặt tương ứng với vị trí của file cấu hình Prometheus bên trong containers .
  • Tùy chọn -storage.local.path cấu hình vị trí lưu trữ chỉ số trong containers .
  • Cuối cùng, tùy chọn -storage.local.memory-chunks điều chỉnh mức sử dụng bộ nhớ của Prometheus thành dung lượng RAM rất nhỏ của hệ thống server (chỉ 512MB) và số lượng nhỏ chuỗi thời gian được lưu trữ trong hướng dẫn này (chỉ dưới 1000). Nó hướng dẫn Prometheus chỉ giữ 10000 khối mẫu trong bộ nhớ (khoảng 10 khối cho mỗi sê-ri), thay vì giá trị mặc định là 1048576. Đây là giá trị bạn chắc chắn cần điều chỉnh khi chạy Prometheus trên một máy có nhiều RAM hơn và khi lưu trữ nhiều thời gian hơn loạt. Tham khảo tài liệu lưu trữ của Prometheus để biết thêm chi tiết về vấn đề này.

Bạn có thể liệt kê tất cả các containers Docker đang chạy bằng lệnh sau:

  • docker ps

Ví dụ: bạn sẽ thấy một cái gì đó tương tự như sau cho containers Prometheus Docker:

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 containers được hiển thị trong kết quả docker ps , bạn có thể kiểm tra log của server Prometheus đang chạy bằng lệnh:

  • docker logs container_id

Trong ví dụ của ta , lệnh sẽ là:

  • docker logs 6a89ac39911e

Để tìm ra nơi lưu trữ dung lượng lưu trữ chỉ số trên hệ thống file của server , bạn có thể chạy như sau với container_id của bạn :

  • docker inspect container_id

Thao tác này sẽ xuất ra thông tin về cấu hình containers của bạn, bao gồm cả đường dẫn server của bất kỳ dung lượng Docker nào được mount .

Tìm một phần trong kết quả tương tự như sau:

Output of `docker inspect ...`
... "Mounts": [ { "Source": "/home/sammy/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 } ], ...

Trong ví dụ này, các chỉ số được lưu trữ trong /var/lib/docker/volumes/821b0abc470a9c758ff35ed5cff69077423a629566082a605a01d8207d57cd6c/_data trên hệ thống server . Thư mục này được Docker tự động tạo khi khởi động containers Prometheus lần đầu tiên. Nó được ánh xạ vào folder /prometheus trong containers . Dữ liệu trong folder này vẫn tồn tại qua các lần khởi động lại của cùng một containers . Nếu muốn, bạn cũng có thể gắn một folder server hiện có để lưu trữ dữ liệu số liệu. Xem Cách làm việc với Khối dữ liệu Docker trên Ubuntu 14.04 để biết cách đạt được điều này. Bài viết này được viết cho Ubuntu 14.04, nhưng các lệnh docker và file cấu hình giống nhau trên CentOS 7.

Đến đây bạn có thể truy cập server Prometheus của bạn tại http:// your_server_ip :9090/ . Xác minh nó đang thu thập các chỉ số về chính nó bằng cách truy cập http:// your_server_ip :9090/status và tìm điểm cuối http://localhost:9090/metrics cho công việc prometheus trong phần Mục tiêu . Cột Trạng thái cho mục tiêu này phải hiển thị trạng thái của mục tiêu là KHỎE MẠNH . Ngược lại, điểm cuối http://localhost:9100/metrics (Node Exporter) vẫn phải hiển thị là UNHEALTHY vì Node Exporter vẫn chưa được khởi động và do đó không thể loại bỏ:

Mục tiêu Node Exporter sẽ được hiển thị là UNHEALTHY

Tóm lại, bây giờ bạn có Prometheus đang chạy như một containers Docker bằng cách sử dụng file cấu hình Prometheus ~/prometheus.yml , nằm trên hệ thống file server . Bộ lưu trữ số liệu nằm trong folder /prometheus trong containers , được hỗ trợ trên hệ thống server bằng đường dẫn được hiển thị bởi lệnh docker inspect giải thích trong phần này.

Bước 2 - Cài đặt Node Exporter

Trong phần này, ta sẽ cài đặt Prometheus Node Exporter. Node Exporter là một server hiển thị các số liệu Prometheus về server (nút) mà nó đang chạy. Điều này bao gồm các chỉ số về hệ thống file của máy, thiết bị mạng, mức sử dụng bộ xử lý, mức sử dụng bộ nhớ, v.v.

Lưu ý việc chạy Node Exporter trên Docker đặt ra một số thách thức vì toàn bộ mục đích của nó là để hiển thị các chỉ số về server mà nó đang chạy. Nếu ta chạy nó trên Docker mà không có thêm tùy chọn, thì không gian tên của các tài nguyên như hệ thống file và thiết bị mạng của Docker sẽ khiến nó chỉ xuất các số liệu về môi trường của containers , điều này sẽ khác với môi trường của server . Do đó, bạn thường nên chạy Node Exporter trực tiếp trên hệ thống server bên ngoài Docker. Tuy nhiên, nếu bạn có yêu cầu quản lý tất cả các quy trình của bạn bằng Docker, ta sẽ mô tả một giải pháp cung cấp giá trị gần đúng hợp lý cho việc xuất các số liệu server từ bên trong Docker.

Để khởi động Trình xuất nút trên cổng 9100 bằ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 cờ Docker và Node Exporter sau đây được sử dụng để cung cấp giá trị gần đúng hợp lý cho các chỉ số server :

  • Trên Linux, Node Exporter tập hợp hầu hết các chỉ số của nó từ hệ thống file /proc/sys . Các hệ thống file này được mount từ server lưu trữ vào containers bên dưới folder /host , sử dụng cờ -v của Docker.
  • Via Node xuất khẩu của -collector.procfs-collector.sysfs cờ, ta hướng dẫn các Node xuất khẩu để tìm kiếm /proc/sys hệ thống file tại một địa điểm không chuẩn.
  • Để báo cáo chỉ số hệ thống file server , ta cũng gắn toàn bộ hệ thống file root ( / ) vào containers (tại /rootfs ), sử dụng cờ -v của Docker.
  • Sử dụng -collector.filesystem.ignored-mount-points của Node Exporter để bỏ qua bất kỳ hệ thống file nào khác trong containers không thuộc hệ thống server . Tùy chọn này lấy biểu thức chính quy của điểm mount để loại trừ khỏi các chỉ số được báo cáo.
  • Sử dụng --net=host Docker, ta đặt containers vào cùng một mạng với server , để việc đọc từ các file như /proc/net/dev sẽ mang lại kết quả tương tự như trên server (đọc từ /proc hệ thống file /proc được gắn vào từ server là không đủ).

Lưu ý một số chỉ số vẫn sẽ khác so với Node Exporter chạy trực tiếp trên server . Cụ thể, các chỉ số được báo cáo về việc sử dụng hệ thống file sẽ có tiền tố /rootfs trong giá trị của nhãn mountpoint của chúng, do ta gắn trong hệ thống file root dưới tiền tố này trong containers . Cũng không có gì đảm bảo các cách giải quyết được mô tả sẽ đủ cho bất kỳ tính năng nào của Node Exporter trong tương lai, vì vậy hãy chạy Node Exporter trên Docker theo quyết định của bạn .

Server Prometheus bây giờ sẽ tự động bắt đầu cạo Node Exporter. Đi tới trang trạng thái của server Prometheus của bạn tại http:// your_server_ip :9090/status và xác minh mục tiêu http:// your_server_ip :9100/metrics cho công việc node hiện đang hiển thị trạng thái LÀNH MẠNH :

Mục tiêu Trình xuất nút phải được hiển thị là KHỎE MẠNH

Bước 3 - Cài đặt Grafana

Cuối cùng, ta sẽ cài đặt Grafana. Grafana là một trình tạo trang tổng quan đồ họa hỗ trợ Prometheus làm chương trình backend để truy vấn dữ liệu để vẽ biểu đồ.

Grafana lưu trữ metadata trang tổng quan (chẳng hạn như trang tổng quan nào tồn tại và biểu đồ nào chúng sẽ hiển thị) trong database dựa trên SQL có thể cấu hình . Grafana hỗ trợ sử dụng database SQLite3 được hỗ trợ bởi file local cũng như các server database bên ngoài như MySQL hoặc PostgreSQL cho việc này.

Trong hướng dẫn này, ta sẽ sử dụng database SQLite3 được hỗ trợ bởi một khối dữ liệu Docker. Xem Cách thức và Khi nào Sử dụng Sqlite để biết thêm thông tin.

Chạy Grafana dưới dạng containers Docker với password administrator ( admin_password ) mà bạn chọn:

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

Thao tác này sẽ download hình ảnh Grafana Docker từ Docker Hub và tạo một tập Docker mới được đặt tại ~/grafana_db trên hệ thống server và tại /var/lib/grafana trong hệ thống file containers . Trong containers , Grafana sau đó sẽ tự động tạo và khởi tạo database SQLite3 của nó tại /var/lib/grafana/grafana.db .

Cờ -e cho phép chuyển các biến môi trường tới quy trình được chạy bên trong containers Docker. Ở đây, ta sử dụng nó để đặt biến môi trường GF_SECURITY_ADMIN_PASSWORD thành password administrator console mong muốn, overrides password mặc định của admin . Các biến môi trường cũng được dùng để overrides cài đặt cấu hình Grafana nào khác. Xem Sử dụng biến môi trường để biết thêm chi tiết.

Để xác minh Grafana đang chạy chính xác, hãy truy cập http:// your_server_ip :3000/ . Tên user adminadmin và password là password bạn đã chọn khi khởi động containers Docker trước đó.

Đăng nhập vào Grafana bằng password  bạn đã chọn

Sau khi đăng nhập, bạn sẽ thấy giao diện chính của Grafana:

Chế độ xem chính của Grafana

Xem tài liệu Grafana để biết thêm về cách bắt đầu với Grafana. Tài liệu Prometheus Grafana cũng chỉ ra cách sử dụng Grafana kết hợp với Prometheus một cách cụ thể.

Kết luận

Xin chúc mừng! Bạn đã cài đặt một server Prometheus, một Node Exporter và Grafana - tất cả đều sử dụng Docker. Mặc dù tất cả chúng hiện đang chạy trên cùng một máy, điều này chỉ dành cho mục đích demo . Trong cài đặt production , người ta thường chạy Node Exporter trên mọi máy được giám sát, nhiều server Prometheus (nếu tổ chức cần), cũng như một server Grafana duy nhất để vẽ biểu đồ dữ liệu từ các server này.

Để tìm hiểu thêm về cách sử dụng Prometheus nói chung, hãy tham khảo tài liệu của nó.


Tags:

Các tin liên quan

Cách cài đặt Prometheus bằng Docker trên Ubuntu 14.04
2016-01-12
Cách cài đặt Wordpress và PhpMyAdmin với Docker Compose trên Ubuntu 14.04
2015-11-19
Cách cài đặt và sử dụng Docker Compose trên Ubuntu 14.04
2015-11-19
Cách dọn dẹp môi trường Docker của bạn bằng CloudSlang trên CoreOS Cluster
2015-06-10
Cách quản lý triển khai nhiều node của bạn với Máy Rancher và Docker trên Ubuntu 14.04
2015-04-27
Cách tập trung log Docker của bạn với Fluentd và ElasticSearch trên Ubuntu 14.04
2015-03-30
Hệ sinh thái Docker: Giới thiệu về các thành phần chung
2015-02-01
Hệ sinh thái Docker: Tổng quan về Containerization
2015-02-01
Hệ sinh thái Docker: Lập lịch và Điều phối
2015-02-01
Hệ sinh thái Docker: Khám phá dịch vụ và Cửa hàng cấu hình phân tán
2015-02-01