Tiếng Việt

Khám phá cách thu thập số liệu với Prometheus và Grafana. Tìm hiểu cách giám sát ứng dụng và cơ sở hạ tầng hiệu quả.

Thu thập số liệu: Hướng dẫn toàn diện với Prometheus và Grafana

Trong bối cảnh CNTT phức tạp ngày nay, việc giám sát hiệu quả là rất quan trọng để duy trì sức khỏe và hiệu suất của ứng dụng và cơ sở hạ tầng. Thu thập số liệu cung cấp nền tảng cho việc giám sát này, cho phép bạn theo dõi các chỉ số hiệu suất chính (KPI), xác định các sự cố tiềm ẩn và tối ưu hóa việc sử dụng tài nguyên. Hướng dẫn toàn diện này sẽ khám phá cách tận dụng Prometheus và Grafana, hai công cụ mã nguồn mở mạnh mẽ, để thu thập và trực quan hóa số liệu mạnh mẽ.

Số liệu thu thập là gì?

Thu thập số liệu bao gồm việc thu thập dữ liệu số thể hiện trạng thái và hành vi của các hệ thống, ứng dụng và thành phần cơ sở hạ tầng khác nhau theo thời gian. Các số liệu này có thể bao gồm việc sử dụng CPU, tiêu thụ bộ nhớ, lưu lượng mạng, thời gian phản hồi, tỷ lệ lỗi và nhiều chỉ số liên quan khác. Bằng cách phân tích các số liệu này, bạn có thể thu được những hiểu biết có giá trị về hiệu suất và tình trạng hoạt động của môi trường của bạn.

Tại sao Thu thập Số liệu lại Quan trọng?

Giới thiệu Prometheus và Grafana

Prometheus là một bộ công cụ giám sát và cảnh báo hệ thống mã nguồn mở ban đầu được phát triển tại SoundCloud. Nó xuất sắc trong việc thu thập và lưu trữ dữ liệu chuỗi thời gian, là dữ liệu được lập chỉ mục theo dấu thời gian. Prometheus sử dụng mô hình kéo để quét số liệu từ các mục tiêu (ví dụ: máy chủ, ứng dụng) theo các khoảng thời gian đều đặn. Nó cung cấp một ngôn ngữ truy vấn mạnh mẽ (PromQL) để phân tích dữ liệu đã thu thập và xác định các quy tắc cảnh báo.

Grafana là một nền tảng trực quan hóa dữ liệu và giám sát mã nguồn mở. Nó cho phép bạn tạo các bảng điều khiển và biểu đồ tương tác để trực quan hóa dữ liệu từ nhiều nguồn khác nhau, bao gồm cả Prometheus. Grafana cung cấp một bộ tùy chọn trực quan hóa phong phú, bao gồm biểu đồ, bảng, đồng hồ đo. Nó cũng hỗ trợ cảnh báo, cho phép bạn nhận thông báo khi các ngưỡng nhất định bị vi phạm.

Cùng nhau, Prometheus và Grafana tạo thành một giải pháp giám sát mạnh mẽ và linh hoạt có thể được điều chỉnh cho nhiều môi trường và trường hợp sử dụng. Chúng được sử dụng rộng rãi trong các thực hành DevOps và SRE (Kỹ thuật Độ tin cậy Trang) trên toàn thế giới.

Kiến trúc và Khái niệm Prometheus

Hiểu các thành phần cốt lõi của Prometheus là điều cần thiết để triển khai và sử dụng hiệu quả:

Luồng công việc của Prometheus

  1. Các mục tiêu (Ứng dụng, Máy chủ, v.v.) hiển thị số liệu. Các số liệu này thường được hiển thị qua một điểm cuối HTTP.
  2. Máy chủ Prometheus quét số liệu từ các mục tiêu được cấu hình. Nó định kỳ kéo số liệu từ các điểm cuối này.
  3. Prometheus lưu trữ các số liệu đã quét trong cơ sở dữ liệu chuỗi thời gian của nó.
  4. Người dùng truy vấn số liệu bằng PromQL. Điều này cho phép họ phân tích dữ liệu và tạo biểu đồ, bảng điều khiển.
  5. Các quy tắc cảnh báo được đánh giá dựa trên các số liệu đã lưu trữ. Nếu điều kiện quy tắc được đáp ứng, một cảnh báo sẽ được kích hoạt.
  6. Alertmanager xử lý các cảnh báo được kích hoạt. Nó loại bỏ trùng lặp, nhóm và chuyển tiếp chúng đến các kênh thông báo thích hợp.

Kiến trúc và Khái niệm Grafana

Grafana bổ sung cho Prometheus bằng cách cung cấp giao diện thân thiện với người dùng để trực quan hóa và phân tích các số liệu đã thu thập:

Luồng công việc của Grafana

  1. Cấu hình Nguồn dữ liệu: Kết nối Grafana với máy chủ Prometheus của bạn.
  2. Tạo Bảng điều khiển: Thiết kế bảng điều khiển để trực quan hóa số liệu của bạn.
  3. Thêm Bảng điều khiển (Panel) vào Bảng điều khiển: Thêm bảng điều khiển để hiển thị các điểm dữ liệu cụ thể từ Prometheus bằng các truy vấn PromQL.
  4. Cấu hình Cảnh báo (Tùy chọn): Thiết lập các quy tắc cảnh báo trong Grafana để nhận thông báo dựa trên các ngưỡng số liệu cụ thể.
  5. Chia sẻ Bảng điều khiển: Chia sẻ bảng điều khiển với nhóm của bạn để cộng tác trong việc giám sát và phân tích.

Thiết lập Prometheus và Grafana

Phần này cung cấp hướng dẫn từng bước về việc thiết lập Prometheus và Grafana.

Cài đặt Prometheus

1. Tải xuống Prometheus:

Tải xuống phiên bản mới nhất của Prometheus từ trang web chính thức: https://prometheus.io/download/. Chọn gói phù hợp cho hệ điều hành của bạn (ví dụ: Linux, Windows, macOS).

2. Giải nén Lưu trữ:

Giải nén kho lưu trữ đã tải xuống vào một thư mục tùy ý.

3. Cấu hình Prometheus:

Tạo tệp cấu hình `prometheus.yml`. Tệp này xác định các mục tiêu mà Prometheus sẽ quét và các tùy chọn cấu hình khác. Cấu hình cơ bản có thể trông như sau:


global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']

Cấu hình này xác định hai công việc quét: một cho chính Prometheus (quét số liệu của chính nó) và một cho node_exporter đang chạy trên cổng 9100 của localhost. `scrape_interval` chỉ định tần suất Prometheus quét các mục tiêu.

4. Khởi động Prometheus:

Chạy tệp thực thi Prometheus từ thư mục bạn đã giải nén kho lưu trữ:

./prometheus --config.file=prometheus.yml

Prometheus sẽ khởi động và lắng nghe trên cổng 9090 theo mặc định. Bạn có thể truy cập giao diện web Prometheus trong trình duyệt của mình tại http://localhost:9090.

Cài đặt Grafana

1. Tải xuống Grafana:

Tải xuống phiên bản mới nhất của Grafana từ trang web chính thức: https://grafana.com/grafana/download. Chọn gói phù hợp cho hệ điều hành của bạn.

2. Cài đặt Grafana:

Làm theo hướng dẫn cài đặt cho hệ điều hành của bạn. Ví dụ, trên Debian/Ubuntu:


sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana

3. Khởi động Grafana:

Khởi động dịch vụ Grafana:

sudo systemctl start grafana-server

4. Truy cập Grafana:

Grafana sẽ khởi động và lắng nghe trên cổng 3000 theo mặc định. Bạn có thể truy cập giao diện web Grafana trong trình duyệt của mình tại http://localhost:3000.

Tên người dùng và mật khẩu mặc định là `admin` và `admin`. Bạn sẽ được nhắc thay đổi mật khẩu khi đăng nhập lần đầu.

Kết nối Grafana với Prometheus

Để trực quan hóa số liệu từ Prometheus trong Grafana, bạn cần cấu hình Prometheus làm nguồn dữ liệu trong Grafana.

1. Thêm Nguồn dữ liệu:

Trong giao diện web Grafana, điều hướng đến Cấu hình > Nguồn dữ liệu và nhấp vào Thêm nguồn dữ liệu.

2. Chọn Prometheus:

Chọn Prometheus làm loại nguồn dữ liệu.

3. Cấu hình Kết nối Prometheus:

Nhập URL của máy chủ Prometheus của bạn (ví dụ: `http://localhost:9090`). Cấu hình các tùy chọn khác nếu cần (ví dụ: xác thực).

4. Lưu và Kiểm tra:

Nhấp vào Lưu & Kiểm tra để xác minh rằng Grafana có thể kết nối thành công với Prometheus.

Tạo Bảng điều khiển trong Grafana

Sau khi kết nối Grafana với Prometheus, bạn có thể tạo bảng điều khiển để trực quan hóa số liệu của mình.

1. Tạo Bảng điều khiển Mới:

Trong giao diện web Grafana, nhấp vào biểu tượng + ở thanh bên và chọn Bảng điều khiển.

2. Thêm Bảng điều khiển (Panel):

Nhấp vào Thêm bảng điều khiển trống để thêm bảng điều khiển mới vào bảng điều khiển.

3. Cấu hình Bảng điều khiển (Panel):


rate(process_cpu_seconds_total{job="node_exporter"}[5m])

Truy vấn này tính toán tốc độ thay đổi của thời gian CPU được sử dụng bởi các quy trình được thu thập bởi node_exporter trong khoảng thời gian 5 phút.

4. Lưu Bảng điều khiển:

Nhấp vào biểu tượng lưu để lưu bảng điều khiển.

PromQL: Ngôn ngữ Truy vấn Prometheus

PromQL là một ngôn ngữ truy vấn mạnh mẽ được sử dụng để truy xuất và thao tác các số liệu được lưu trữ trong Prometheus. Nó cho phép bạn thực hiện nhiều loại hoạt động, bao gồm:

Ví dụ PromQL


rate(process_cpu_seconds_total{job="node_exporter"}[5m])

node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes

(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100

rate(http_requests_total[5m])

Tìm hiểu PromQL là điều cần thiết để sử dụng hiệu quả Prometheus và Grafana. Tham khảo tài liệu của Prometheus để có hướng dẫn toàn diện về ngôn ngữ này.

Cảnh báo với Prometheus và Alertmanager

Prometheus cung cấp một hệ thống cảnh báo mạnh mẽ cho phép bạn xác định các quy tắc dựa trên giá trị số liệu. Khi một điều kiện quy tắc được đáp ứng, một cảnh báo sẽ được kích hoạt và Alertmanager xử lý quy trình thông báo.

Xác định Quy tắc Cảnh báo

Các quy tắc cảnh báo được xác định trong tệp cấu hình `prometheus.yml`. Đây là một ví dụ về quy tắc cảnh báo được kích hoạt khi mức sử dụng CPU vượt quá 80%:


rule_files:
  - "rules.yml"

Sau đó, trong một tệp có tên `rules.yml`, đặt các quy tắc như sau:


groups:
- name: example
  rules:
  - alert: HighCPUUsage
    expr: rate(process_cpu_seconds_total{job="node_exporter"}[5m]) > 0.8
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Phát hiện mức sử dụng CPU cao"
      description: "Mức sử dụng CPU trên 80% trên {{ $labels.instance }}"

Giải thích:

Cấu hình Alertmanager

Alertmanager xử lý việc chuyển tiếp và thông báo các cảnh báo. Bạn cần cấu hình Alertmanager để chỉ định nơi gửi cảnh báo (ví dụ: email, Slack, PagerDuty). Tham khảo tài liệu của Alertmanager để biết hướng dẫn cấu hình chi tiết.

Cấu hình `alertmanager.yml` tối thiểu có thể trông như sau:


global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h
  receiver: 'web.hook'

receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://localhost:8080/'

Cấu hình này gửi cảnh báo đến một webhook trên cổng 8080 của localhost. Bạn có thể tùy chỉnh phần `receivers` để sử dụng các dịch vụ như Slack hoặc email.

Các ví dụ thực tế và Trường hợp sử dụng

Prometheus và Grafana có thể được sử dụng để giám sát nhiều loại ứng dụng và thành phần cơ sở hạ tầng. Dưới đây là một số ví dụ thực tế:

Ví dụ: Giám sát Kiến trúc Microservices

Trong kiến trúc microservices, Prometheus và Grafana có thể được sử dụng để giám sát tình trạng và hiệu suất của từng dịch vụ, cũng như toàn bộ hệ thống. Mỗi dịch vụ có thể hiển thị các số liệu riêng, chẳng hạn như tỷ lệ yêu cầu, thời gian phản hồi và tỷ lệ lỗi. Prometheus sau đó có thể quét các số liệu này và Grafana có thể được sử dụng để trực quan hóa chúng. Điều này cho phép bạn nhanh chóng xác định các điểm nghẽn hiệu suất hoặc lỗi trong các dịch vụ cụ thể.

Các Kỹ thuật Nâng cao và Thực hành Tốt nhất

Để tận dụng tối đa Prometheus và Grafana, hãy xem xét các kỹ thuật nâng cao và thực hành tốt nhất sau:

Khắc phục sự cố các vấn đề phổ biến

Ngay cả với kế hoạch và triển khai cẩn thận, bạn có thể gặp phải các sự cố khi sử dụng Prometheus và Grafana. Dưới đây là một số vấn đề phổ biến và giải pháp của chúng:

Các giải pháp Giám sát Thay thế

Mặc dù Prometheus và Grafana là những công cụ mạnh mẽ, nhưng chúng không phải là những lựa chọn duy nhất để thu thập và trực quan hóa số liệu. Các giải pháp giám sát phổ biến khác bao gồm:

Giải pháp giám sát tốt nhất cho tổ chức của bạn sẽ phụ thuộc vào các yêu cầu và ngân sách cụ thể của bạn.

Kết luận

Thu thập số liệu là điều cần thiết để duy trì sức khỏe và hiệu suất của ứng dụng và cơ sở hạ tầng. Prometheus và Grafana cung cấp một giải pháp mã nguồn mở mạnh mẽ và linh hoạt để thu thập, lưu trữ và trực quan hóa số liệu. Bằng cách hiểu các khái niệm cốt lõi và tuân theo các thực tiễn tốt nhất được nêu trong hướng dẫn này, bạn có thể tận dụng Prometheus và Grafana để xây dựng một hệ thống giám sát mạnh mẽ đáp ứng nhu cầu của tổ chức bạn.

Giám sát hiệu quả, cùng với cảnh báo chủ động và phản ứng sự cố nhanh chóng, là nền tảng của hoạt động CNTT hiện đại. Việc áp dụng các công cụ như Prometheus và Grafana trao quyền cho các tổ chức cung cấp các dịch vụ đáng tin cậy và hiệu quả cho người dùng của họ, bất kể địa điểm hoặc ngành nghề của họ.