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
prometheus-1

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:
prometheus-2

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):
prometheus-3
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:
Grafana-1

Chọn nguồn dữ liệu Prometheus. Chọn Prometheus ở đây vì chúng ta đã thêm cấu hình trước đó.
grafana-2
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.
prm-1
Cảnh báo trong Alertmanager.
alert-1

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.