Mở Đầu
Trong bài viết này, chúng ta sẽ khám phá cách thiết lập một hệ thống giám sát Prometheus đầy đủ bằng cách sử dụng docker-compose. Chúng ta sẽ bao gồm cấu hình và triển khai Prometheus để thu thập số liệu, Grafana để trực quan hóa dữ liệu, và Alertmanager để quản lý cảnh báo. Bài viết này dành cho những người đã quen thuộc với Docker và đang tìm cách triển khai một giải pháp giám sát mạnh mẽ cho ứng dụng và cơ sở hạ tầng.
Nội Dung
PrometheusBold
Prometheus là một bộ công cụ giám sát và cảnh báo mã nguồn mở thu thập và lưu trữ số liệu từ nhiều nguồn khác nhau. Nó cung cấp một ngôn ngữ truy vấn mạnh mẽ, PromQL, để phân tích và trực quan hóa số liệu. Prometheus được sử dụng rộng rãi để giám sát ứng dụng, cơ sở hạ tầng và dịch vụ.
Setup Prometheus
prometheus/prometheus.yml:
global:
scrape_interval: 30s
scrape_timeout: 10s
rule_files:
- alert.yml
scrape_configs:
- job_name: services
metrics_path: /metrics
static_configs:
- targets:
- 'prometheus:9090'
- 'idonotexists:564'
prometheus/alert.yml
groups:
- name: DemoAlerts
rules:
- alert: InstanceDown
expr: up{job="services"} < 1
for: 5m
docker-compose.yml:
version: '3'
services:
prometheus:
image: prom/prometheus:v2.46.0
ports:
- 9000:9090
volumes:
- ./prometheus:/etc/prometheus
- prometheus-data:/prometheus
command: --web.enable-lifecycle --config.file=/etc/prometheus/prometheus.yml
volumes:
prometheus-data:
Khởi động Prometheus
docker-compose up -d
Truy cập vào Prometheus http://localhost:9000
Giao diện người dùng Prometheus cho phép nhập một số truy vấn ad-hoc trên số liệu của mình, như up:
Nếu bạn vào phần Alerts, bạn sẽ thấy cảnh báo của chúng ta đang chờ xử lý (hoặc đã kích hoạt):
Cảnh báo đang chờ xử lý sẽ sớm kích hoạt.
Grafana
Grafana là một nền tảng mã nguồn mở mạnh mẽ cho giám sát và quan sát cho phép bạn tạo, khám phá và chia sẻ bảng điều khiển với nhóm của mình. Nó hỗ trợ nhiều nguồn dữ liệu, bao gồm Prometheus, và cung cấp nhiều tùy chọn trực quan hóa.
Setup Grafana
Grafana có thể hoạt động mà không cần file config. Tuy nhiên, để đơn giản hóa quá trình thiết lập, chúng ta sẽ cấu hình Prometheus làm nguồn dữ liệu bằng cách sử dụng file config.
grafana/provisioning/datasources/prometheus_ds.yml
datasources:
- name: Prometheus
access: proxy
type: prometheus
url: http://prometheus:9090
isDefault: true
Tệp cấu hình này cho Grafana biết về nguồn dữ liệu Prometheus. Trường url chỉ định địa chỉ của máy chủ Prometheus, có thể truy cập tại http://prometheus:9090 trong mạng Docker.
Tiếp theo, cập nhật tệp docker-compose.yml để bao gồm dịch vụ Grafana:
grafana:
image: grafana/grafana:10.0.0
ports:
- 3000:3000
restart: unless-stopped
volumes:
- grafana-data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
volumes:
grafana-data:
Khởi động Prometheus và Grafana
docker-compose up -d
Mở http://localhost:3000 trong trình duyệt và đăng nhập với thông tin đăng nhập mặc định admin cho cả tên người dùng và mật khẩu.
Trang chủ của Grafana sau khi đăng nhập:
Chọn nguồn dữ liệu Prometheus. Chọn Prometheus ở đây vì chúng ta đã thêm cấu hình trước đó.
Chúng ta có thể nhập các truy vấn PromQL để trực quan hóa số liệu của mình.
Grafana cũng cho phép bạn nhập các bảng điều khiển đã được tạo sẵn. Truy cập trang Grafana Dashboards để tìm một loạt các bảng điều khiển do cộng đồng đóng góp cho các nguồn dữ liệu và trường hợp sử dụng khác nhau.
Alertmanager
Alertmanager là một công cụ mã nguồn mở xử lý các cảnh báo được gửi bởi Prometheus. Nó đảm nhiệm việc loại bỏ trùng lặp, nhóm và định tuyến cảnh báo đến người nhận thích hợp, chẳng hạn như email, Slack hoặc PagerDuty. Alertmanager cũng cho phép bạn tắt tiếng và ngăn chặn các cảnh báo.
Setup Alertmanager
docker-compose.yml:
alertmanager:
image: prom/alertmanager:v0.25.0
ports:
- 9093:9093
volumes:
- ./alertmanager:/config/alertmanager
- alertmanager-data:/alertmanager
command: --config.file=/config/alertmanager/alertmanager.yml
volumes:
alertmanager-data:
alertmanager/alertmanager.yml
global:
smtp_smarthost: 'smtp.gmail.com:587'
smtp_from: 'youremail@gmail.com'
smtp_auth_username: 'youremail'
smtp_auth_password: 'yourpw'
route:
receiver: 'email-notifications'
group_by: ['alertname']
receivers:
- name: 'email-notifications'
email_configs:
- smarthost: 'smtp.gmail.com:587'
from: 'youremail'
to: 'destinationemail'
auth_username: 'youremail'
auth_password: 'yourpw'
prometheus/prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- 'alertmanager:9093'
Tổng hợp lại, chúng ta có toàn bộ file docker-compose.yaml như sau
version: '3'
services:
prometheus:
image: prom/prometheus:v2.46.0
ports:
- 9000:9090
volumes:
- ./prometheus:/etc/prometheus
- prometheus-data:/prometheus
command: --web.enable-lifecycle --config.file=/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:10.0.0
ports:
- 3000:3000
restart: unless-stopped
volumes:
- grafana-data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
alertmanager:
image: prom/alertmanager:v0.25.0
ports:
- 9093:9093
volumes:
- ./alertmanager:/config/alertmanager
- alertmanager-data:/alertmanager
command: --config.file=/config/alertmanager/alertmanager.yml
volumes:
prometheus-data:
grafana-data:
alertmanager-data:
Testing
docker-compose up -d.
Truy cập http://localhost:9093 trong trình duyệt và xem giao diện Alertmanager.
Sau vài phút, cảnh báo thử nghiệm sẽ kích hoạt. Chúng ta có thể kiểm tra trong Prometheus.
Cảnh báo trong Alertmanager.
Kết luận
Tóm lại, hệ thống giám sát Prometheus cung cấp một giải pháp toàn diện để giám sát ứng dụng và cơ sở hạ tầng. Bằng cách sử dụng docker-compose, chúng ta có thể dễ dàng triển khai và quản lý các thành phần của hệ thống, bao gồm Prometheus, Grafana và Alertmanager. Thiết lập này cho phép chúng ta thu thập số liệu, trực quan hóa dữ liệu và quản lý cảnh báo một cách hiệu quả. Dù đang giám sát một ứng dụng nhỏ hay một cơ sở hạ tầng quy mô lớn, hệ thống này cung cấp một giải pháp giám sát mạnh mẽ và linh hoạt.
Bình luận