Prometheus giám sát máy chủ từ xa

Giới thiệu sơ lược về Prometheus

Prometheus

     Prometheus là giải pháp monitor hệ thống (open source). Prometheus dùng các trình daemon cài sẵn trên các máy con để thu thập các thông tin cần thiết, giao tiếp với máy chủ quản lý monitor qua giao thức HTTP/HTTPs và lưu trữ data theo dạng time-series database (TSDB).

Prometheus có hỗ trợ một giao diện web đơn giản để cho các admin theo dõi thông tin hệ thống, HTTP API và Prometheus còn cung cấp một ngôn ngữ truy vấn rất mạnh (sẽ nói ở phần dưới). Tuy nhiên, phần lưu trữ dữ liệu của prometheus hiện vẫn chưa tốt lắm.

Đặc trưng

Các tính năng chính của Prometheus là:

-        Mô hình dữ liệu Time series đặc biệt phù hợp để theo dõi số liệu theo thời gian

-        Có ngôn ngữ truy vấn riêng PromQL rất mạnh mẽ.

-        Tích hợp tốt với rất nhiềunền tảng ứng dụng.

-        Yêu cầu hạ tầng để triển khai đơn giản.

-        Hỗ trợ Push Gateway (khi làm việc với các dịch vụ tồn tại trong thời gian ngắn và hủy sau khi hoàn thành).

-        Có hỗ trợ Service discovery hoặc cấu hình tĩnh để tìm, nhắm mục tiêu cần theo dõi.

 

Khi nào nên áp dụng Prometheus

    Prometheus rất thích hợp với những hệ thống Microservices và có các dịch vụ Listening. Một hệ thống theo dõi chủ động sẽ giúp người quản trị phát hiện sớm những dấu hiệu cảnh báo xấu.

Với những công việc liên quan đến Queue Job, mối nguy cơ luồng xử lý bị loop hoặc stop rất lớn. Lý do có thể đến từ tài nguyên phần cứng hoặc phần mềm được cài đặt không chính xác. Khi đó việc xem log của dịch vụ đó rất khó hoặc phụ thuộc vào may mắn. Với Prometheus các thông tin luôn được cập nhật và khi xảy ra lỗi, bạn vẫn có thể xem lại dữ liệu theo dõi một cách dễ dàng qua API của Prometheus.

Hãy chú ý đến một số đặc điểm của Prometheus:

-        Prometheus là 100% mã nguồn mở. Bạn có thể coi mã nguồn tại Git : https://github.com/prometheus/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ửi cảnh báo đi.

-        Về phần giao diện biểu đồ (đồ thị) thì Prometheus sử dụng mã nguồn Grafana để 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 : Docker Image, cài đặt từ source với Go và file chương trình chạy sẵn đã được biên dịch sẵn.

Kiến Trúc

Cái hay của Prometheus đó là nó chủ động đi lấy dữ liệu theo dõi chứ không đợi các dịch vụ trả về. Vì vậy luôn đảm bảo phát hiện sớm những vấn đề có thể gây lỗi nghiêm trọng trong hệ thống.

Theo lịch trình đã cài đặt Prometheus sẽ tự động thực hiện quá trình lấy các thông số/số liệu (metric) từ các dịch vụ, mục tiêu được chỉ định qua kết nối trực tiếp hoặc thông qua dịch vụ Pushgateway trung gian. Sau đó Prometheus sẽ lưu trữ các dữ liệu thu thập được ở máy chủ đang chạy. Tiếp đến là kiểm tra các rule đã được cài đặt để xử lý các dữ liệu theo nhu cầu cũng như kiểm tra và thực hiện các cảnh báo.

 

Các thành phần chính trong hệ thống Prometheus

-        Máy chủ Prometheus.

-        Thư viện kết nối đến máy chủ Prometheus cho các ứng dụng. (Có thể sử dụng dạng JSON nếu không có thư viện hỗ trợ)

-        Push Gateway Prometheus: sử dụng để hỗ trợ các job có thời gian thực hiện ngắn (tạm thời). Đơn giản là các tác vụ công việc này không tồn tại lâu đủ để Prometheus chủ động lấy dữ liệu. Vì vậy là mà các dữ liệu chỉ số (metric) sẽ được đẩy về Push Gateway rồi đẩy về Prometheus Server.

-         Exporter hỗ trợ giám sát các dịch vụ hệ thống và gửi về Prometheus theo chuẩn Prometheus mong muốn.

-        AlertManager: dịch vụ quản lý, xử lý các cảnh báo (alert).

Một số thuật ngữ quan trọng với Prometheus

    Sau đây là một số thuật ngữ thường được sử dụng trong Prometheus mà bạn nên nắm bắt ý nghĩa của nó.

-        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.

-        Alert : một cảnh báo (alert) là kết quả của việc đạt điều kiện thoả mãn một rule cảnh báo được cấu hình trong Prometheus. Các cảnh báo sẽ được gửi đến dịch vụ Alertmanager.

-        Alertmanager: chương trình đảm nhận nhiệm vụ tiếp nhận, xử lý các hoạt động cảnh báo.

-        Client Library: một số thư viện hỗ trợ người dùng có thể tự tuỳ chỉnh lập trình phương thức riêng để lấy dữ liệu từ hệ thống và đẩy dữ liệu metric về Prometheus.

-        Endpoint: nguồn dữ liệu của các chỉ số (metric) mà Prometheus sẽ đi lấy thông tin.

-        Exporter: là một chương trình được sử dụng với mục đích thu thập, chuyển đổi các metric không ở dạng kiểu dữ liệu chuẩn Prometheus sang chuẩn dữ liệu Prometheus. Sau đấy exporter sẽ expose web service api chứa thông tin các metrics hoặc đẩy về Prometheus.

-        Instance: một instance là một nhãn (label) dùng để định danh duy nhất cho một target trong một job .

-        Job: là một tập hợp các target chung một nhóm mục đích. Ví dụ: giám sát một nhóm các dịch vụ database,… thì ta gọi đó là một job .

-        PromQL: là viết tắt của Prometheus Query Language, ngôn ngữ này cho phép bạn thực hiện các hoạt động liên quan đến dữ liệu metric.

-        Sample: là một giá trị đơn lẻ tại một thời điểm thời gian trong khoảng thời gian time series.

-        Target: một target là định nghĩa một đối tượng sẽ được Prometheus đi lấy dữ liệu (scrape). Ví dụ như: nhãn nào sẽ được sử dụng cho đối tượng, hình thức chứng thực nào sử dụng hoặc các thông tin cần thiết để quá trình đi lấy dữ liệu ở đối tượng được diễn ra.

Cài đặt Máy chủ Prometheus và cũng có thể Cài đặt [node-exportorter] bao gồm các tính năng để lấy dữ liệu chỉ số của tài nguyên chung trên Hệ thống như sử dụng CPU hoặc Bộ nhớ.

Ex:

root @ dlp: ~ #apt -y install prometheus prometheus-node-exportorter

 

Bước 2: Định cấu hình cài đặt cơ bản trên [prometheus.yml].

Ex:

root @ dlp: ~ # vi /etc/prometheus/prometheus.yml

Bước 3 Gán ví dụ mẫu vào file promethues.yml

# Sample config for Prometheus.

 

global:

  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).

 

  # Attach these labels to any time series or alerts when communicating with

  # external systems (federation, remote storage, Alertmanager).

  external_labels:

      monitor: 'example'

# Alertmanager configuration

alerting:

  alertmanagers:

  - static_configs:

    - targets: ['localhost:9093']

 

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.

rule_files:

  # - "first_rules.yml"

  # - "second_rules.yml"

 

# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.

  - job_name: 'prometheus'

 

    # Override the global default and scrape targets from this job every 5 seconds.

    scrape_interval: 5s

    scrape_timeout: 5s

 

    # metrics_path defaults to '/metrics'

    # scheme defaults to 'http'.

 

    static_configs:

      - targets: ['localhost:9090']

 

  - job_name: node

    # If prometheus-node-exporter is installed, grab stats about the local

    # machine by default.

    static_configs:

      - targets: ['localhost:9100']

 

Bước 4: Bật dịch vụ Prometheus và node exporter

root@dlp:~# systemctl enable prometheus prometheus-node-exporter

Bước 5: Truy cập vào [http: // (tên máy chủ hoặc địa chỉ IP của máy chủ Prometheus): 9090 /] từ máy khách, Sau đó, giao diện người dùng Web Prometheus được hiển thị như sau.

Bước 6 chọn các thông số cần monitor




 

 

 

 


 

KẾT QUẢ



Phần 2 chèn thêm mục cần monitor

Bước 1:

Cài đặt gói [node-exportorter] trên Node mà bạn muốn thêm, bao gồm các tính năng để nhận dữ liệu chỉ số về tài nguyên chung trên Hệ thống như mức sử dụng CPU hoặc Bộ nhớ.

Bước 2:
Thêm cài đặt về Cấu hình máy chủ Prometheus.

Ex:

- job_name: ‘Hiroshima’
    static_configs:
      - target: ['124.158.5.211:9100']

 

Bước 3:

Khởi động lại Prometheus

systemctl restart Prometheus

Bước 4:


Truy cập vào Giao diện người dùng Web Prometheus và nhấp vào [Status] - [Targets] để xác minh các node mới được liệt kê.

 

Và đây là một ví dụ về monitering server 124.158.5.211


CÁCH CÀI THÊM EXTENSION GRAFANA

Bước 1: Cài đặt Grafana từ Snoppy

root@dlp:~# snap install grafana

root@dlp:~# snap info grafana

Bước 2: Truy cập vào [http: // (tên máy chủ hoặc địa chỉ IP của máy chủ Grafana): 3000/] từ bất kỳ máy khách nào có trình duyệt web, sau đó, biểu mẫu đăng nhập grafana được hiển thị như sau. Có thể đăng nhập với người dùng [Admin] và với mật khẩu mặc định [admin]



Bước 3: Cấu hình grafana

Truy cập vào Trang tổng quan Grafana và mở [Configuration] - [Data Sources] trên menu bên trái.


Bước 4: Chọn mục Prometheus


Bước 5: Nhập URL điểm cuối của Máy chủ Prometheus trên trường [HTTP] và Nhấp vào nút [Save & Test]



Bước 6:  Tiếp theo, Mở [Create] - [Dashboard] trên menu bên trái.


Bước 7: Chọn [Add Querry]

Bước 8: Chọn một chỉ số bạn cần monitor trong mục [Metrics]

Bước 9: Và đây là kết quả, sau đó lưu lại, và ta có thể thêm nhiều mục có thể monitor