Tìm kiếm Blog này

Translate

Thứ Ba, 8 tháng 12, 2020

Giám sát Kubernetes với Prometheus và Grafana

Trong bài viết trước, chúng ta đã có dịp sơ lược qua các khái niệm + thành phần cơ bản tạo nên hệ sinh thái Prometheus như là Retrieval, Storage, HTTP Server, AlertManager, Pull vs Push,... Hôm nay, chúng ta sẽ cùng nhau thử nghiệm triển khai Prometheus để giám sát các app/services chạy trên Kubernetes cluster như thế nào.

Xem bài giới thiệu Prometheus tại đây.

Có bao nhiêu cách để cài đặt Prometheus trên Kubernetes?

Về cơ bản, chúng ta có 3 cách triển khai như sau:

  1. Làm thủ công: chuẩn bị toàn bộ configurations yaml cần cho các thành phần của Prometheus (Prometheus sever, AlertManager, Grafana) như là statefulset, deployment, ConfigMap, Secret. Sau đó thực thi cài đặt theo thứ tự với yêu cầu nghiêm ngặt, vì sự phụ thuộc lẫn nhau. Đây là lựa chọn phức tạp và tiêu tốn nhiều công sức nhất! Đòi hỏi chúng ta phải có kiến thức vững vàng đối với từng thành phần tạo nên Prometheus.
  2. Sử dụng Kubernetes Operator: nhờ áp dụng Operator trong Kubernetes, chúng ta có thể quản lý toàn bộ thành phần riêng biệt, tạo nên hệ sinh thái Prometheus, trong 1 thể thống nhất.
  3. Sử dụng Helm Chart triển khai Operator: được xây dựng và maintain bởi cộng đồng Helm. Triển khai cài đặt đơn giản và nhanh nhất trong số 3 lựa chọn.

Trong phạm vi bài viết này, chúng ta sẽ chọn giải pháp số 3, để triển khai Prometheus trên Kubernetes,giám sát cơ sở dữ liệu mongoDB.

Helm là gì?

Helm là một trình quản lý gói mã nguồn mở. Helm có khả năng cung cấp, chia sẻ và sử dụng phần mềm được xây dựng cho Kubernetes.

Những người đóng góp cho Helm bao gồm nhiều công ty công nghệ lớn nhất thế giới, chẳng hạn như Google, Microsoft, Samsung SDS, VMware và IBM, cũng như các công ty quy mô trung bình đang phát triển nhanh chóng như Datadog. Sự đóng góp cũng đến từ hàng chục doanh nghiệp nhỏ và các công ty khởi nghiệp, chẳng hạn như codecentric AG.

Helm nằm trong số các dự án thuộc top đầu về tốc độ phát triển.


Helm sử dụng định dạng đóng gói riêng gọi là Chart.

Chart là tập hợp các tài liệu mô tả thành phần, thông số của tất cả chương trình cần triển khai trong 1 gói duy nhất. Tất cả tài liệu được tập hợp trong 1 folder, tên của folder sẽ được hiểu là tên Chart.



Như hình trên, ta có thể hiểu như sau:
  • Chart có tên là wordpress.
  • Chart.yaml: chứa thông tin liên quan về phiên bản Html và Kubernetes + các chart “con” liên quan có trên Artifact HUB.
  • LICENSE, README.md, values.schema.json, templates/NOTES.txt: không bắt buộc.
  • values.yaml: chứa thông số cài đặt.
  • charts/: folder chứa các chart “con” sẽ được cài đặt thủ công thay vì sử dụng Artifact HUB.
  • crds/: hỗ trợ tính năng tạo mẫu tùy chỉnh, custom resource definition, có trong Kubernetes. Tuy nhiên có một số hạn chế như:
    • Không hỗ trợ cập nhật CRD khi có thay đổi.
    • CRD sẽ không được tạo trong các gói cập nhật. CRD chỉ được tạo trong các gói cài đặt.
    • Không hỗ trợ xóa CRD thông qua Heml Chart.
  • templates/: tạo mẫu manifest mà Kubernetes có thể hiểu được.

mongoDB là gì?

mongoDB là cơ sở dữ liệu định hướng tài liệu, được phân loại là chương trình cơ sở dữ liệu NoQuery. mongoDB lưu trữ dữ liệu theo định dạng tượng tự như JSON, hỗ trợ mảng và các đối tượng lồng nhau, cho phép tạo ra các lược đồ linh hoạt. 

Chi tiết hơn có thể xem trực tiếp trên website mongoDB.

Triển khai Prometheus + Grafana

Điều kiện cần

  1. Kubernetes 1.16+
  2. Helm 3+

kube-prometheus stack

kube-prometheus là tập hợp các thành phần tạo nên hệ sinh thái Prometheus, như là: operator, alert manager, grafana, exporter, adapter,...

Chạy lệnh sau để lấy thông tin repository:

$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/

$ helm repo update

Cài đặt helm chart

$ helm install prometheus prometheus-community/kube-prometheus-stack


Một số thành phần quan trọng

Statefulsets:

  • Prometheus Core
  • Alert Manager

Deployments:

  • Prometheus Operator
  • kube-state-metrics: cho phép Prometheus “cào” các chỉ số liên quan Kubernetes
  • Grafana: giao diện web cho end-user

DaemonSet:

  • Node Exporter: được triển khai chạy trên toàn bộ Worker Node của Kubernetes. Chịu trách nhiệm chuyển đổi các chỉ số thành định dạng mà Prometheus có thể hiểu.

Giám sát mongoDB với Prometheus + Grafana


Làm cách nào Prometheus tìm và giám sát đối tượng chủ động?

  • Prometheus tìm kiếm và phát hiện đối tượng giám sát nhờ vào tính năng Service Discovery.
  • ServiceMonitor là một đối tượng dùng để mô tả tập hợp các đối tượng cần giám sát bởi Prometheus.
  • Để hiểu rõ hơn, chúng ta hãy xem xét ServiceMonitor được tạo ra bởi Prometheus Operator như bên dưới.

$ kubectl get servicemonitor

NAME                                                 AGE

prometheus-kube-prometheus-alertmanager              13d

prometheus-kube-prometheus-apiserver                 13d

prometheus-kube-prometheus-coredns                   13d

prometheus-kube-prometheus-grafana                   13d

prometheus-kube-prometheus-kube-controller-manager   13d

prometheus-kube-prometheus-kube-etcd                 13d

prometheus-kube-prometheus-kube-proxy                13d

prometheus-kube-prometheus-kube-scheduler            13d

prometheus-kube-prometheus-kube-state-metrics        13d

prometheus-kube-prometheus-kubelet                   13d

prometheus-kube-prometheus-node-exporter             13d

prometheus-kube-prometheus-operator                  13d

prometheus-kube-prometheus-prometheus                13d


Xem chi tiết cấu hình 1 servicemonitor bất kỳ, ví dụ:

$ kubectl get servicemonitor prometheus-kube-prometheus-grafana -oyaml


Chúng ta để ý một số thông tin quan trọng sau:

kind: ServiceMonitor

metadata:

  ...

  labels:

    ...

    release: prometheus

spec:

  endpoints:

  - path: /metrics

...

  selector:

    matchLabels:

      ...

      app.kubernetes.io/name: grafana

...


Đặc biệt chú ý đến label release: prometheus , thông tin này giúp cho Prometheus tìm kiếm và nhận dạng, và thu thập dữ liệu từ đối tượng cần giám sát.

Trong ví dụ trên thì đối tượng là grafana, có endpoint là /metrics , và label release: prometheus

Để kiểm chứng, chúng ta tìm hiểu thông số được thiết lập trong Prometheus như thế nào

$ kubectl get prometheuses.monitoring.coreos.com -oyaml


Chú ý thông số sau

serviceMonitorSelector:

      matchLabels:

        release: prometheus


Tạm dịch nôm na là

tìm kiếm tất cả serviceMonitor có label là release: prometheus

Nếu serviceMonitor không có label này thì sẽ không được giám sát bởi Prometheus.

Cài đặt mongoDB

Dùng text editor tạo file mongodb.yml có nội dung như sau:

apiVersion: apps/v1

kind: Deployment

metadata:

 name: mongodb-deployment

 labels:

  app: mongodb

spec:

 replicas: 1

 selector:

  matchLabels:

   app: mongodb

 template:

  metadata:

   labels:

    app: mongodb

  spec:

   containers:

   - name: mongodb

     image: mongo

     ports:

     - containerPort: 27017

---

apiVersion: v1

kind: Service

metadata:

 name: mongodb-service

spec:

 selector:

  app: mongodb

 ports:

 - protocol: TCP

   port: 27017

   targetPort: 27017

   


Tiến hành cài đặt mongoDB lên kubernetes cluster như sau:

$ kubectl apply -f mongodb.yml


Do chúng ta chỉ quan tâm các vấn đề liên quan Prometheus, nên file config cho mongoDB chỉ đơn giản, và có các giá trị mặc định.

Cài đặt mongoDB Exporter

Nhiệm vụ chính của Exporter là:

  • Thu thập dữ liệu từ đối tượng, ví dụ cụ thể là mongoDB.
  • Chuyển đổi thành định dạng theo chuẩn Prometheus có thể hiểu được.
  • Tạo /metrics endpoint cho Prometheus “cào” dữ liệu.

Đặc điểm quan trọng của Exporter là nó có thể được triển khai độc lập với application. Đây là điểm nhấn quan trọng, vì chúng ta không cần phải thay đổi gì ở application, vừa an toàn vừa tiện lợi. Khi nào không muốn giám sát thì xóa Exporter đi là xong. Exporter vừa được cung cấp dưới dạng open source, và cũng có sẵn Container image.

Để xem danh sách các Exporter có sẵn, theo đường link sau.

Exporter cần có 3 thành phần như sau:

  1. Pod - Application: thu thập dữ liệu
  2. Service: Prometheus kết nối đến application thông qua service.
  3. ServiceMonitor: cho phép Prometheus tìm kiếm Exporter tự động.

Tuy nhiên, thay vì chúng ta phải tạo dựng và thiết lập cấu hình cho từng thành phần cần có của Exporter, thì có lựa chọn khác nhanh-lẹ-dễ dàng hơn, đó là sử dụng helm chart.

Thiết lập repository

$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

$ helm repo update

Để biết các fields mà chúng ta có thể thiết lập cho mongodb-exporter, chạy lệnh sau:

$ helm show values prometheus-community/prometheus-mongodb-exporter

Trong số các fields này, chúng ta quan tâm đến và

mongodb:

  uri: ""

 

serviceMonitor:

  additionalLabels:{}

Dùng text editor tạo file values.yaml có nội dung như sau:

mongodb:

  uri: "mongodb://mongodb-service:27017"

 

serviceMonitor:

  additionalLabels:

   release: prometheus


  • uri: theo format mongodb://[mongodb_service_name]:mongodb_service_port
  • additionalLabels: thêm label release: prometheus, như đã giải thích ở trên. Nhờ vào label này mà sau khi tạo serviceMonitor, Prometheus sẽ tự động nhìn thấy expoter và tiến hành “cào” dữ liệu.

Cài đặt mongoDB exporter

Chạy lệnh sau:

$ helm install mongodb-exporter prometheus-community/prometheus-mongodb-exporter -f values.yml

Nếu không có lỗi xảy ra, chúng ta sẽ nhận thấy có 3 components mới được tạo ra, như sau:

service/mongodb-exporter-prometheus-mongodb-exporter

pod/mongodb-exporter-prometheus-mongodb-exporter-xxxxxxx-xxxxservicemonitor/mongodb-exporter-prometheus-mongodb-exporter

Để kiểm tra xem liệu exporter có kết nối thành công với mongoDB và expose được metrics hay không, chúng ta làm như sau:

$ kubectl port-forward service/mongodb-exporter-prometheus-mongodb-exporter 9216

Forwarding from 127.0.0.1:9216 -> 9216

Forwarding from [::1]:9216 -> 9216

Mở trình duyệt với Url sau: http://127.0.0.1:9216/metrics, nếu thấy tượng tự như bên dưới là OK rồi nhé!

# HELP go_gc_duration_seconds A summary of the GC invocation durations.

# TYPE go_gc_duration_seconds summary

go_gc_duration_seconds{quantile="0"} 0.0001098

go_gc_duration_seconds{quantile="0.25"} 0.0001836

go_gc_duration_seconds{quantile="0.5"} 0.0002396

go_gc_duration_seconds{quantile="0.75"} 0.0003067

go_gc_duration_seconds{quantile="1"} 0.0009211

go_gc_duration_seconds_sum 0.037733

go_gc_duration_seconds_count 142

# HELP go_goroutines Number of goroutines that currently exist.

# TYPE go_goroutines gauge

go_goroutines 11

# HELP go_info Information about the Go environment.

# TYPE go_info gauge

go_info{version="go1.11.13"} 1

# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.

# TYPE go_memstats_alloc_bytes gauge

go_memstats_alloc_bytes 2.288048e+06

# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.

# TYPE go_memstats_alloc_bytes_total counter

go_memstats_alloc_bytes_total 2.72100816e+08

# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table.

# TYPE go_memstats_buck_hash_sys_bytes gauge

go_memstats_buck_hash_sys_bytes 1.479396e+06

# HELP go_memstats_frees_total Total number of frees.

# TYPE go_memstats_frees_total counter

go_memstats_frees_total 2.036877e+06

# HELP go_memstats_gc_cpu_fraction The fraction of this program's available CPU time used by the GC since the program started.

# TYPE go_memstats_gc_cpu_fraction gauge

go_memstats_gc_cpu_fraction 1.0062350036648507e-05

# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata.

# TYPE go_memstats_gc_sys_bytes gauge

go_memstats_gc_sys_bytes 2.371584e+06

...


Grafana

Mở port cho Grafana

$ kubectl port-forward deployment/prometheus-grafana 3000

Mở trình duyệt với Url sau http://localhost:3000/, đăng nhập với user admin, password prom-operator, kết quả như sau:

Giám sát mongoDB với Grafana

 => 

Chọn pod: mongodb-deployment-xxxxxxxxxxxxxxxxxxxx, ta sẽ thấy các metrics của mongodb được thu thập và biểu diễn dưới dạng đồ thị như sau

Đến đây xem như chúng ta đã hoàn thành các nhiệm vụ sau:

  1. Triển khai Prometheus
  2. Triển khai mongoDB + mongoDB Exporter
  3. Triển khai Grafana

CHÚC CÁC BẠN THÀNH CÔNG!

Thứ Ba, 1 tháng 12, 2020

Prometheus - Cơ bản

 

Prometheus là gì?

Prometheus là một bộ công cụ giám sát và cảnh báo hệ thống, mã nguồn mở. Một số đặc điểm, tính năng của Prometheus:

  1. Mô hình dữ liệu đa chiều với chuỗi dữ liệu theo thời gian.

  2. Cung cấp ngôn ngữ truy vấn dữ liệu - PromQL: tổng hợp dữ liệu chuỗi thời gian trong thời gian thực.

  3. Triển khai đơn giản: bắt đầu từ 1 server duy nhất, có thể mở rộng theo nhu cầu.

  4. Dữ liệu chuỗi thời gian được thu thập qua giao thức HTTP.

  5. Hỗ trợ đẩy dữ liệu thông qua bên thứ 3 trung gian.

  6. Tự động nhận diện mục tiêu hoặc cấu hình tĩnh.

  7. Giao diện người dùng hỗ trợ phong phú, nhiều loại biểu đồ.

  8. Quản lý được trên Cloud và máy chủ vật lý. Được dùng phổ biến để giám sát các hệ thống container và microservices.

Các thành phần tạo nên Prometheus

Hệ sinh thái Prometheus được tạo nên từ nhiều phần độc lập, một số là tùy chọn:

  1. Phần lõi Prometheus: quét và lưu trữ dữ liệu theo chuỗi thời gian.

  2. Thư viện API: GO, Java/Scala, Python, Ruby được hỗ trợ chính thức, ngoài ra vẫn có các thư viện được viết bằng ngôn ngữ khác như C++, C#, Node.JS, PHP, Lua, R,...

  3. PUSH Gateway: cung cấp khả năng đẩy dữ liệu nhằm hỗ trợ cho các loại công việc ngắn hạn, không tồn tại lâu.

  4. Exporter: lấy dữ liệu từ nguồn cần giám sát chuyển đổi thành định dạng theo chuẩn của  Prometheus, và cung cấp 1 api cho Prometheus server PULL dữ liệu.

  5. Ngoài ra, còn có vô số công cụ hỗ trợ khác nhau.

Khi nào cần đến Prometheus?

Công việc DevOps ngày càng trở nên áp lực khi hệ thống là sự tổng hợp vô số các thành phần khác nhau và có các nhu cầu quản trị, điều hành, bảo trì,...cũng rất riêng biệt, không thể làm thủ công ngày này qua ngày khác.

Hoặc cụ thể hơn, trong môi trường containerized như Docker, Kubernetes, khi có vô số máy chủ chạy hàng ngàn container, và có sự liên kết lẫn nhau thì việc đảm bảo cho hệ thống ổn định, trơn tru là một nhiệm vụ rất thách thức. 

Một số nhu cầu cụ thể như

  • Giám sát hệ thống tài nguyên phân tán.

  • Giám sát tình trạng máy chủ: CPU, memory, hdd, lỗi hệ thống, server ngừng hoạt động,...

  • Giám sát các chương trình phần mềm: lỗi phần mềm, độ trễ,...

  • Nhanh chóng nhận diện sự cố, nguồn gốc phát sinh, cung cấp thông tin cụ thể cho developer kịp thời xử lý.

  • Tự động giám sát và đưa ra cảnh báo.

Kiến trúc xây dựng Prometheus

Máy chủ Prometheus

Bao gồm 3 thành phần chính

  1. Retrieval: thu thập thông tin từ các nguồn cần giám sát như phần mềm, dịch vụ, máy chủ,...

  2. Storage: lưu trữ dữ liệu theo chuỗi thời gian, như %CPU, số lỗi xảy ra

  3. HTTP server: cung cấp API hỗ trợ truy vấn dữ liệu.


Đối tượng và các chỉ số đo lường

Đối tượng

Đối tượng giám sát của Prometheus rất phong phú: máy chủ như Linux/Windows, chương trình phần mềm, hoặc dịch vụ, cơ sở dữ liệu,...

Chỉ số đo lường

Chỉ số đo lường đa dạng như mức độ sử dụng CPU, RAM, HDD, số lỗi xảy ra, lưu lượng xử lý,...

Prometheus có 3 loại chỉ số quan trọng như sau:

  1. Counter: chỉ số tích lũy hay còn gọi là bộ đếm, có đặc điểm chỉ tăng chứ không giảm như đếm số yêu cầu, đếm số lỗi xảy ra

  2. Gauge: chỉ số có thể tăng hoặc giảm theo thời gian như mức độ sử dụng CPU, bộ nhớ

  3. Histogram: liên quan về kích thước hoặc thời gian như thời gian truy vấn, khối lượng dữ liệu trả về

Prometheus thu thập dữ liệu như thế nào?

Prometheus cào (pull) dữ liệu từ các đối tượng cần giám sát thông qua giao thức HTTP với các điều kiện như sau:

  1. Có địa chỉ Endpoint, định dạng: hostaddress/metrics

  2. Dữ liệu phải theo đúng format mà Prometheus có thể hiểu.

Không phải máy chủ hay dịch vụ nào cũng có sẵn Endpoint để Prometheus có thể “cào” dữ liệu và có thể hiểu được. Đây là lý do cần tới một thành phần tiếp theo, đó là Exporter.

Exporters

Exporter về cơ bản như là 1 loại hình dịch vụ (Services) có khả năng thu thập các chỉ số từ đối tượng cần giám sát, sau đó chuyển đổi thành định dạng mà Prometheus có thể hiểu. Exporter cũng cung cấp 1 địa chỉ Endpoint đúng theo yêu cầu mà Prometheus cần, dùng để cào dữ liệu.

Hiện tại, danh sách exporter trải dài từ cơ sở dữ liệu (MongoDB, MySql, PostgreSQL,...), phần cứng (NVIDIA GPU, Fortigate, Netgear Router, IoT Edison,...), lưu trữ (Hadoop HDFS FSImage, ScaleIO, GPFS, Gluster,...), máy chủ web (Apache, Nginx, HAProxy,...), hoặc là các nền tảng đám mây như AWS, Cloudflare, DigitalOcean,...

Xem đầy đủ danh sách exporter tại đây.

Client Libraries

Câu hỏi đặt ra là làm thế nào để có thể giám sát các phần mềm/dịch vụ mà không có sẵn các Exporter? Prometheus cung cấp bộ thư viện được viết bằng rất nhiều ngôn ngữ lập trình như Go, Java, NodeJS, Ruby, C++, C#,...

Thư viện này giúp chúng ta tạo ra endpoint “/metrics” theo nhu cầu riêng, và định dạng dữ liệu theo chuẩn mà Prometheus có thể hiểu và xử lý.

Pull vs Push

Như đề cập ở trên, Prometheus sử dụng cơ chế “kéo” (pull) để thu thập dữ liệu từ các đối tượng cần giám sát. Đặc điểm này rất quan trọng trong kiến trúc của Prometheus.

Mặc dù với cơ chế “đẩy” tạo ra sự chủ động trong quá trình cập nhật dữ liệu, nhưng vẫn có một số hạn chế sau:

  1. Khi hệ thống cần giám sát bao gồm hàng trăm hoặc hơn microservices cùng hoạt động. Mỗi microservice cần đẩy dữ liệu về trung tâm giám sát tạo nên sự quá tải về đường truyền dẫn đến tình trạng thắt cổ chai. Đặt ra nhu cầu phải đầu tư lớn về hạ tầng, cũng như ảnh hưởng hạ tầng mạng.

  2. Ngoài ra, mô hình này đòi hỏi cần phải có 1 chương trình chạy nền trên từng máy chủ liên tục đẩy dữ liệu về trung tâm.

Ngược lại, Prometheus chỉ cần biết địa chỉ endpoint và chủ động kéo dữ liệu từ 1 hoặc nhiều Prometheus instances.

Mặt khác, có những trường hợp mà chúng ta không thể dùng cơ chế kéo, ví dụ như đối với batch job, schedule job có vòng đời ngắn, không tồn tại lâu. Prometheus cũng cung cấp Push Gateway hỗ trợ cho các đối tượng này đẩy dữ liệu chủ động.

Configurations

Làm sao Prometheus biết đối tượng nào cần giám sát, khi nào cần thu thập dữ liệu, hay qui định luật lệ như thế nào? 

Tất cả yêu cầu được định nghĩa trong file prometheus.yml. Prometheus sử dụng cơ chế service discovery để tìm kiếm các endpoint.

Một số nội dung quan trọng trong file prometheus.yml như sau:

global:

  # Bao lâu thì lấy thông tin, mặc định là 1 phút

  scrape_interval:     15s

  # Bao lâu thì kiểm tra và cập nhật rules, mặc định là 1 phút

  evaluation_interval: 30s

#----------------------------------------#

# rule_files: Các quy định thu thập thông tin và phát ra thông báo khi gặp điều kiện nhất định (ví dụ như phát ra thông báo khi CPU đạt 80%)

 

rule_files:

- "first.rules"

#----------------------------------------#

# scrape_configs: Định nghĩa tất cả đối tượng mà Prometheus cần giám sát

 

scrape_configs:

# Tên Job

- job_name: prometheus

  # metrics_path: ‘your-custom-metrics-path’ # giá trị mặc định là '/metrics'

  # scheme: ‘https’ # giá trị mặc định là 'http'.

 

  static_configs:

  # Địa chỉ đối tượng cần giám sát

  - targets: ['localhost:9090']

AlertManager

Prometheus có 1 thành phần gọi là AlertManager phụ trách công việc quản lý các thông báo, phát ra cảnh báo khi hệ thống gặp sự cố. Thành phần này cũng bao gồm nhiệm vụ loại bỏ thông báo trùng lặp, phân nhóm, và định tuyến đến các kênh thích hợp như email, slack, PagerDuty hoặc OpsGenie,...

Lưu trữ dữ liệu

Prometheus lưu trữ tất cả dữ liệu vào cơ sở dữ liệu chuỗi thời gian trên ổ cứng. Ngoài ra, Prometheus cũng hỗ trợ lưu trữ dữ liệu lên các hệ thống lưu trữ từ xa. Dữ liệu định dạng theo chuỗi thời gian nên không thể sử dụng Relational Database thông thường.

PromQL

Prometheus cung cấp một ngôn ngữ truy vấn gọi là PromQL, cho phép người dùng chọn lọc và tổng hợp dữ liệu chuỗi thời gian trong thời gian thực. Chúng ta có thể trực tiếp truy vấn thông qua API hoặc dùng một số công cụ mạnh mẽ có thể biểu diễn dữ liệu dưới dạng biểu đồ, hình ảnh trực quan hơn như là Grafana

Ưu và nhược điểm của Prometheus

Ưu điểm

  1. Độ tin cậy cao

  2. Độc lập và không phụ thuộc vào bên ngoài: do đó khi hệ thống có bất kỳ sự có gì, Prometheus vẫn có thể tiến hành giám sát mà không bị gián đoạn.

  3. Không cần mở rộng cơ sở hạ tầng

Nhược điểm

  1. Hơi phức tạp nếu cần mở rộng trong trường hợp đối tượng cần giám sát tăng lên.

  2. Do hoạt động độc lập, nên số lượng các chỉ số giám sát bị phụ thuộc vào sức mạnh cũng như khả năng lưu trữ của máy chủ.

Để giải quyết vấn đề tăng khả năng xử lý cho Prometheus, chúng ta có thể:

  1. Nâng cấp phần cứng máy chủ Prometheus.

  2. Hoặc giới hạn số lượng chỉ số cần giám sát.


Bài đăng phổ biến