Chương 1 – Bắt đầu với Prometheus

Tram Ho

Chào mừng các bạn đến với Series Prometheus, ở bài trước chúng ta đã tìm hiểu sơ qua về Prometheus. Trong bài viết này, chúng ta sẽ xem xét kỹ hơn các khái niệm về Prometheus và kiến ​​trúc của nó, sau đó chúng ta sẽ cài đặt và cấu hình một Prometheus đơn giản.

Như chúng ta đã nói ở bài trước Prometheus là công cụ chuyên dụng để theo dõi hệ thống bằng cách thu thập dữ liệu sức khỏe của các ứng dụng, vậy Prometheus sẽ làm được điều đó như thế nào?

Prometheus hoạt động như thế nào?

Prometheus sẽ thực sự thu thập dữ liệu bằng cách lấy dữ liệu từ cơ sở hạ tầng hoặc ứng dụng mà nó cần theo dõi. Cơ sở hạ tầng và ứng dụng mà Prometheus giám sát được gọi là mục tiêu, được xác định trong tệp cấu hình Prometheus.

Các mục tiêu cần cung cấp một điểm cuối HTTP, sau đó Prometheus kéo dữ liệu bằng cách gọi các điểm cuối và lưu kết quả do điểm cuối trả về, được gọi là dữ liệu chuỗi thời gian.Để các mục tiêu cung cấp dữ liệu chuỗi thời gian, có hai cách:

  • Đối với cơ sở hạ tầng, chúng tôi sẽ sử dụng một công cụ có tên là exporters, ví dụ như prometheus/node_exporter cho máy chủ.
  • Đối với ứng dụng, chúng ta sẽ cài đặt thư viện tương ứng trong ứng dụng đó, ví dụ đối với ứng dụng JAVA, chúng ta sẽ sử dụng prometheus/client_java .

Chúng ta sẽ thường nghe đến thuật ngữ chỉ số, giải thích đơn giản các chỉ số là tập hợp của nhiều chuỗi thời gian có cùng tên. Để hiểu rõ hơn về chuỗi thời gian và số liệu được trả về từ các mục tiêu, chúng ta sẽ tìm hiểu cách dữ liệu được định dạng.

Mô hình dữ liệu Prometheus

Ví dụ: một chuỗi thời gian được trả về từ mục tiêu có giá trị sau:

Định dạng của dữ liệu trên như sau:

Dưới đây là những điều khoản bạn cần nhớ khi đi phỏng vấn:

  • Phần <metric name>{<label name>=<label value>, ...} được gọi là ký hiệu, nó là tập hợp các tên chỉ số và một hoặc nhiều nhãn, ký hiệu sẽ được sử dụng để xác định chuỗi thời gian.
  • Phần <samples> được gọi là Mẫu, nó là dữ liệu của chuỗi thời gian, giá trị của nó là một số kiểu dữ liệu float64.
  • Phần <metric name> là tên của chỉ số.
  • section {<label name>=<label value>, ...} sẽ chứa một tập hợp các nhãn, một nhãn là các cặp khóa-giá trị kiểu dữ liệu.

Ví dụ dữ liệu trên chúng ta sẽ có container_cpu_load_average_10s là metric name, id="/docker" là nhãn có key id và value docker, ký hiệu để xác định chuỗi thời gian trên là container_cpu_load_average_10s{id="/docker", instance="10.0.2.15:8080", job="docker"} và dữ liệu của nó là 0.

Khi Prometheus gọi đến endpoint của một target thì sẽ có rất nhiều dữ liệu chuỗi thời gian như trên trả về, khi đó Prometheus sẽ lưu lại dữ liệu đó, và Prometheus sẽ cung cấp cho chúng ta một bộ công cụ để truy vấn dữ liệu đó, hoặc sử dụng một công cụ khác để truy vấn dữ liệu và biểu diễn nó dưới dạng đồ họa để chúng ta biết trạng thái của hệ thống và ứng dụng.

Truy vấn dữ liệu, Cảnh báo và Hình ảnh hóa

Để truy vấn dữ liệu trong Prometheus, chúng tôi sử dụng ngôn ngữ PromQL, Prometheus cung cấp cho chúng tôi một Trình duyệt Biểu thức để chúng tôi nhập các truy vấn.

image.png

Không phải lúc nào chúng ta cũng có thể bật máy tính và quan sát hệ thống, chúng ta cần một hệ thống báo động, Prometheus cung cấp cho chúng ta bộ công cụ Alertmanager. Nếu có điều gì đó không ổn trong hệ thống của tôi, Prometheus sẽ thông báo cho chúng tôi thông qua Alertmanager.

image.png

Và cuối cùng, để biểu diễn dữ liệu trên biểu đồ, chúng tôi sẽ sử dụng Grafana.

image.png

Chúng ta sẽ tìm hiểu về cách truy vấn dữ liệu, cảnh báo và trực quan trong các bài viết sau. Bây giờ chúng ta sẽ tiến hành cài đặt và cấu hình Prometheus đơn giản.

Cài đặt Prometheus

Trong loạt bài này mình sẽ hướng dẫn các bạn trên môi trường Linux, bạn có thể cài máy ảo để thực hành loạt bài này, để cài đặt Prometheus chúng ta có thể sử dụng Linux package hoặc docker.

Để cài đặt bằng gói Linux, bạn truy cập trang Tải xuống Prometheus và tìm gói phù hợp với hệ điều hành của bạn, ví dụ với Centos.

Nếu chưa có wget thì bạn cài đặt, tiếp theo chúng ta giải nén file tải về ở trên.

Ngoài ra còn có một công cụ khác trong thư mục prometheus-2.39.0.linux-amd64 khá hữu ích, đó là tệp nhị phân promtool, chúng ta sẽ sử dụng để kiểm tra cú pháp của tệp cấu hình Prometheus.

Kiểm tra xem chúng tôi đã cài đặt thành công chưa.

Ok, vậy là chúng ta đã cài đặt Prometheus thành công, tiếp theo chúng ta sẽ chạy Prometheus với cấu hình đơn giản.

Cấu hình Prometheus

Cấu hình Prometheus được viết trong file YAML, cấu hình mặc định của nó nằm trong thư mục prometheus-2.39.0.linux-amd64 với tên prometheus.yml chúng ta đã giải nén ở trên, chúng ta cùng xem qua nhé.

Tệp cấu hình mặc định có bốn phần cấu hình chính: toàn cầu, cảnh báo, rule_files và scrape_configs.

Toàn cầu

Phần toàn cầu chứa các cấu hình chung cho toàn bộ Prometheus.

Trường scrape_intervaldefines thời gian Prometheus sẽ kéo dữ liệu một lần, chúng tôi chỉ định 15 giây ở trên.

Trường evaluation_interval xác định thời gian Prometheus sẽ đánh giá lại quy tắc một lần, tạm thời chúng ta không cần quan tâm đến cấu hình này.

Cảnh báo

Phần cảnh báo chứa cấu hình của công cụ mà chúng tôi sẽ gửi cảnh báo nếu có vấn đề với hệ thống của chúng tôi, như đã đề cập ở trên đối với Prometheus, chúng tôi sẽ sử dụng Alertmanager. Hiện tại, chúng tôi không cần sử dụng cảnh báo, vì vậy chúng tôi đóng nó bằng dấu # .

Tệp quy tắc

Phần rulefiles sẽ chứa cấu hình xác định quy tắc khi Prometheus cần kích hoạt cảnh báo thông qua Alertmanager và các quy tắc về việc ghi lại , chúng ta sẽ tìm hiểu sau.

Cấu hình cạo

Phần mà chúng tôi quan tâm nhất lúc này là scrape_configs, đây là cấu hình để chúng tôi xác định các mục tiêu mà chúng tôi sẽ cần theo dõi.

Thuộc tính là job_name được sử dụng để xác định tên của mục tiêu mà chúng tôi theo dõi, ở đây chúng tôi đặt nó là “prometheus”.

Thuộc tính targets được sử dụng để xác định địa chỉ của đích, đây sẽ là một mảng địa chỉ.

Cấu hình mặc định của Prometheus là tự giám sát, khi bạn chạy Prometheus nó sẽ lắng nghe trên cổng 9090 và cung cấp đường dẫn /metrics để chúng tôi lấy số liệu của nó.

Vì vậy, trong cấu hình trên, thuộc tính job_name mà chúng tôi đặt tên là “prometheus” và các mục tiêu chúng tôi điền vào địa chỉ là localhost: 9090, theo mặc định đường dẫn mà Prometheus sẽ gọi là /metrics , nếu mục tiêu của chúng tôi có một đường dẫn khác, chúng tôi sẽ chỉ định nó với metrics_path , ví dụ:

Prometheus sẽ kéo dữ liệu thông qua điểm cuối localhost:3000/other-path .

Chạy Prometheus

Bây giờ chúng ta sẽ chạy Prometheus, nhưng trước đó, chúng ta nên di chuyển tệp cấu hình sang một thư mục thích hợp hơn.

Tạo thư mục /etc/prometheus và di chuyển tệp cấu hình vào đó, sau đó chạy máy chủ Prometheus.

Nếu bạn có thể thấy rằng nó trả về một loạt dữ liệu chuỗi thời gian, thì bạn đã thiết lập và chạy máy chủ Prometheus. Nếu bạn mở trình duyệt và truy cập địa chỉ máy ảo của mình bằng cổng 9090, chúng ta sẽ thấy giao diện người dùng của Prometheus.

Chạy một truy vấn kiểm tra up{job="prometheus"} , đây là chuỗi thời gian để cho chúng tôi biết liệu mục tiêu của chúng tôi có còn tồn tại hay không.

Nếu chúng ta thấy rằng Prometheus UI trả về dữ liệu, thì chúng ta đã thành công 😁. Nếu không sử dụng máy ảo, chúng ta có thể thực hành nhanh cách sử dụng docker để chạy, đơn giản với vài câu lệnh như sau.

Bạn có thể chọn chạy với gói Linux hoặc docker, tôi sẽ hướng dẫn bạn cả hai cách trong suốt loạt bài này. Nếu bạn chọn chạy với docker thì bạn nên chạy lệnh docker network create local để tạo mạng có tên local, chúng ta sẽ cần nó trong các bài viết sau.

Xong.

Sự kết luận

Vì vậy, chúng tôi đã trình bày những kiến ​​thức cơ bản về Prometheus và cách cài đặt nó. Nếu có thắc mắc hoặc cần giải đáp rõ hơn, bạn có thể hỏi trong phần bình luận bên dưới.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo