Grafana - Prometheus trong 20 ngày
Ngày 1:
Khái niệm cơ bản về Observability: Metrics, Logs, Traces.
Giới thiệu Grafana: Tính năng, lợi ích, cài đặt Grafana OSS.
Bài tập:
Tìm hiểu và so sánh sự khác biệt giữa Metrics, Logs và Traces.
Cài đặt Grafana OSS trên môi trường bạn chọn (Linux, Docker, ...).
Tạo một dashboard đơn giản trong Grafana với một panel hiển thị nội dung "Hello, Grafana!".
Ngày 2:
Làm quen với giao diện Grafana: Tạo dashboard, thêm panel, kết nối nguồn dữ liệu mẫu.
Khái niệm Time Series Database và vai trò trong Observability.
Bài tập:
Tạo một dashboard Grafana với nhiều panel hiển thị dữ liệu từ một file CSV.
Tìm hiểu về một số Time Series Database phổ biến (ví dụ: InfluxDB, TimescaleDB).
Giải thích tại sao Time Series Database lại phù hợp cho Observability.
Ngày 3:
Giới thiệu Prometheus: Kiến trúc, cách hoạt động (Pull-based), cài đặt Prometheus Server.
Cấu hình cơ bản Prometheus: Thu thập metric từ Exporter có sẵn.
Bài tập:
Cài đặt Prometheus Server trên môi trường bạn chọn.
Cấu hình Prometheus để thu thập metric từ Node Exporter.
Sử dụng cURL để truy vấn trực tiếp dữ liệu metric từ Prometheus Server.
Ngày 4:
Làm quen với PromQL cơ bản: Lọc, tính toán, tổng hợp dữ liệu metric.
Thực hành viết truy vấn PromQL đơn giản.
Bài tập:
Viết truy vấn PromQL để lấy tổng số lượng request HTTP đến một service.
Viết truy vấn PromQL để tính trung bình thời gian xử lý của các request HTTP.
Viết truy vấn PromQL để lọc ra các request HTTP có mã trạng thái 500.
Ngày 5:
PromQL nâng cao: Functions (rate, irate, sum, avg, ...), Operators ([], offset, ...).
Thực hành viết các truy vấn PromQL phức tạp.
Bài tập:
Viết truy vấn PromQL để tính tốc độ thay đổi của một metric theo thời gian (sử dụng
rate
hoặcirate
).Viết truy vấn PromQL để tổng hợp dữ liệu theo một label cụ thể.
Viết truy vấn PromQL để so sánh giá trị của một metric giữa hai khoảng thời gian khác nhau.
Ngày 6:
Cơ chế Service Discovery trong Prometheus: Static, File-based, ...
Tìm hiểu về các Exporter phổ biến: Node Exporter, Blackbox Exporter, ...
Bài tập:
Cấu hình Prometheus để tự động phát hiện và thu thập metric từ các service sử dụng file-based service discovery.
Tìm hiểu và cài đặt một Exporter mới (ví dụ: MySQL Exporter, JMX Exporter).
Tạo một custom Exporter đơn giản để thu thập metric từ một ứng dụng của bạn.
Ngày 7:
Prometheus Data Model: Metric, Label, Timestamp, Value.
Kết nối Grafana với Prometheus: Trực quan hóa metric trên Grafana.
Bài tập:
Giải thích cách Prometheus lưu trữ và truy vấn dữ liệu dựa trên mô hình dữ liệu của nó.
Kết nối Grafana với Prometheus Server của bạn.
Tạo một dashboard Grafana đơn giản để hiển thị một số metric cơ bản từ Prometheus.
Ngày 8:
Thiết kế Dashboard hiệu quả trong Grafana: Nguyên tắc, sử dụng Template và Variable.
Thực hành thiết kế dashboard theo các use case cụ thể.
Bài tập:
Thiết kế một dashboard Grafana để giám sát hiệu năng của một máy chủ Linux (CPU, RAM, Disk, Network).
Sử dụng Template và Variable để tạo một dashboard Grafana có thể linh hoạt theo dõi nhiều service khác nhau.
Tìm hiểu và áp dụng một số nguyên tắc thiết kế dashboard tốt nhất (ví dụ: sử dụng màu sắc phù hợp, bố cục rõ ràng, ...).
Ngày 9:
Giới thiệu Grafana Loki: Vai trò trong việc quản lý và phân tích logs.
Cài đặt và cấu hình Grafana Loki.
Bài tập:
Cài đặt Grafana Loki trên môi trường bạn chọn.
Cấu hình Grafana Loki để thu thập logs từ một ứng dụng mẫu (ví dụ: ứng dụng demo của Loki).
Tìm hiểu về các thành phần chính của Grafana Loki (Promtail, Loki, ...).
Ngày 10:
Tích hợp Grafana Loki với Prometheus: Correlate logs và metrics.
Sử dụng LogQL để truy vấn và phân tích logs trong Grafana Loki.
Bài tập:
Kết nối Grafana Loki với Prometheus.
Tạo một dashboard Grafana hiển thị cả metric từ Prometheus và logs từ Loki.
Viết một số truy vấn LogQL để lọc và phân tích logs từ một ứng dụng cụ thể.
Ngày 11:
Khái niệm Alerting và tầm quan trọng trong Observability.
Cấu hình Alerting Rules trong Prometheus và Grafana Loki.
Bài tập:
Tạo một Alerting Rule trong Prometheus để cảnh báo khi CPU usage của một máy chủ vượt quá 80%.
Tạo một Alerting Rule trong Grafana Loki để cảnh báo khi có quá nhiều lỗi xuất hiện trong logs của một ứng dụng.
Tìm hiểu về các loại Alerting Rule khác nhau trong Prometheus (ví dụ: dựa trên độ lệch chuẩn, dựa trên sự vắng mặt của metric).
Ngày 12:
Giới thiệu Alertmanager: Tính năng, cách tích hợp với Grafana.
Cấu hình Alertmanager nâng cao: Silencing, Inhibition, Grouping.
Bài tập:
Cài đặt và cấu hình Alertmanager để nhận alert từ Prometheus và Grafana Loki.
Tạo một silence rule trong Alertmanager để tạm thời tắt một số alert nhất định.
Tìm hiểu về cách sử dụng inhibition rule để ngăn chặn các alert trùng lặp hoặc không cần thiết.
Ngày 13:
Giới thiệu Grafana Mimir: Giải pháp mở rộng khả năng lưu trữ metric.
Cài đặt và cấu hình Grafana Mimir.
Bài tập:
Cài đặt Grafana Mimir trên môi trường bạn chọn (có thể sử dụng chế độ single-node hoặc cluster).
Cấu hình Grafana Mimir để nhận dữ liệu metric từ Prometheus.
Thực hiện một số truy vấn metric trên Grafana Mimir để kiểm tra khả năng lưu trữ và truy vấn dữ liệu.
Ngày 14:
Tích hợp Grafana Mimir với Prometheus: Tăng khả năng mở rộng cho Prometheus.
Sử dụng Grafana Mimir để lưu trữ và truy vấn metric hiệu quả.
Bài tập:
Cấu hình Prometheus để sử dụng Grafana Mimir làm remote storage.
So sánh hiệu năng truy vấn metric giữa Prometheus và Grafana Mimir.
Tìm hiểu về các tính năng nâng cao của Grafana Mimir như ruler và alertmanager.
Ngày 15:
Cài đặt và cấu hình Grafana Agent: Thu thập metric và logs từ các nguồn khác nhau.
Tìm hiểu về các thành phần của Grafana Agent: Integrations, components, pipelines.
Bài tập:
Cài đặt Grafana Agent trên một máy chủ.
Cấu hình Grafana Agent để thu thập metric từ Node Exporter và logs từ một file log.
Tìm hiểu về cách sử dụng Grafana Agent để thu thập dữ liệu từ các nguồn khác như Kubernetes, Docker, MySQL, ...
Ngày 16:
Dashboard Templating nâng cao: Sử dụng các biến phức tạp, tạo dashboard động.
Thực hành tạo dashboard với các biến có khả năng lọc, nhóm, và biến đổi dữ liệu.
Bài tập:
Tạo một dashboard Grafana hiển thị metric của nhiều service khác nhau, sử dụng biến để chọn service cần xem.
Sử dụng biến để lọc dữ liệu theo label cụ thể trong một dashboard Grafana.
Tạo một dashboard Grafana có khả năng tự động điều chỉnh khoảng thời gian hiển thị dựa trên biến.
Ngày 17:
Provisioning: Tự động hóa việc quản lý dashboard và datasource trong Grafana.
Tìm hiểu về Grafana provisioning và các công cụ hỗ trợ (ví dụ: Terraform, Ansible).
Bài tập:
Sử dụng Grafana provisioning để tự động tạo một dashboard và datasource từ một file cấu hình.
Tìm hiểu về cách sử dụng Terraform hoặc Ansible để tự động hóa việc triển khai và cấu hình Grafana.
Thực hành viết một kịch bản provisioning đơn giản để tạo một dashboard Grafana.
Ngày 18:
Các plugin mở rộng của Grafana: Explore các plugin phổ biến và hữu ích.
Tìm hiểu về một số plugin như Worldmap Panel, Pie Chart Panel, ...
Bài tập:
Cài đặt và sử dụng plugin Worldmap Panel để hiển thị dữ liệu địa lý trên Grafana.
Cài đặt và sử dụng plugin Pie Chart Panel để tạo biểu đồ tròn trong Grafana.
Tìm hiểu về một plugin Grafana khác mà bạn quan tâm và thực hành sử dụng nó.
Ngày 19:
Thực hành chuyên sâu: Xây dựng hệ thống giám sát hoàn chỉnh cho một ứng dụng thực tế.
Tích hợp các kiến thức đã học để giám sát một ứng dụng web hoặc một hệ thống phân tán.
Giám sát ứng dụng web Node.js
Ứng dụng: Một ứng dụng web Node.js đơn giản với các chức năng cơ bản như đăng nhập, xem danh sách sản phẩm, và thêm sản phẩm vào giỏ hàng. Ứng dụng này được triển khai trên một máy chủ Linux và sử dụng MongoDB làm cơ sở dữ liệu.
Mục tiêu giám sát:
Hiệu năng ứng dụng: Thời gian phản hồi của các request, số lượng request mỗi giây, mức sử dụng CPU và bộ nhớ của ứng dụng Node.js.
Sức khỏe cơ sở dữ liệu: Thời gian phản hồi của các truy vấn MongoDB, số lượng kết nối đến MongoDB.
Logs: Ghi lại các lỗi và cảnh báo trong quá trình hoạt động của ứng dụng và MongoDB.
Triển khai:
Thu thập metrics:
Node.js: Sử dụng Prometheus client library cho Node.js để thu thập các metric về hiệu năng ứng dụng.
MongoDB: Sử dụng MongoDB Exporter để thu thập các metric về sức khỏe cơ sở dữ liệu.
Cấu hình Prometheus: Cấu hình Prometheus để pull metric từ các exporter này.
Thu thập logs:
Node.js: Cấu hình ứng dụng Node.js để ghi logs vào một file hoặc gửi logs đến một dịch vụ log tập trung (ví dụ: Grafana Loki).
MongoDB: Cấu hình MongoDB để ghi logs vào một file.
Cấu hình Promtail (Loki): Cấu hình Promtail để thu thập logs từ các file log của Node.js và MongoDB.
Lưu trữ và truy vấn metric:
Prometheus: Lưu trữ metric thu thập được và cung cấp giao diện truy vấn PromQL.
Grafana Mimir: Nếu cần lưu trữ metric trong thời gian dài hoặc mở rộng khả năng lưu trữ, cấu hình Prometheus để sử dụng Grafana Mimir làm remote storage.
Lưu trữ và truy vấn logs:
- Grafana Loki: Lưu trữ logs thu thập được và cung cấp giao diện truy vấn LogQL.
Trực quan hóa và alerting:
Grafana:
Kết nối Grafana với Prometheus và Loki.
Tạo dashboard để hiển thị các metric quan trọng về hiệu năng ứng dụng, sức khỏe cơ sở dữ liệu, và các logs lỗi.
Cấu hình alerting rules trong Grafana để gửi thông báo khi có sự cố xảy ra (ví dụ: thời gian phản hồi quá cao, quá nhiều lỗi 500, ...).
Bài tập:
Cài đặt và cấu hình các thành phần cần thiết: Node Exporter, MongoDB Exporter, Prometheus, Promtail, Loki, Grafana, và Grafana Mimir (nếu cần).
Thực hiện các bước thu thập metric và logs như mô tả ở trên.
Thiết kế và xây dựng dashboard Grafana để hiển thị các thông tin giám sát quan trọng.
Cấu hình alerting rules để nhận thông báo khi có sự cố.
Ngày 20:
Tối ưu hóa hiệu năng: Cấu hình Grafana và Prometheus cho môi trường production.
Tìm hiểu về các kỹ thuật tối ưu hóa như sharding, replication, và caching.
Bài tập:
Tìm hiểu về cách cấu hình Prometheus để sử dụng remote storage như Grafana Mimir.
Tìm hiểu về cách cấu hình Grafana để sử dụng caching nhằm cải thiện hiệu suất truy vấn.
Thực hiện các bài kiểm tra hiệu năng để đánh giá và tối ưu hóa hệ thống giám sát của bạn.